// Think() 関数を作成する(グーだけ, チョキだけ, パーだけのプレイヤーに対応)
using System;
using System.Drawing;
using System.Windows.Forms;
public class MyForm : Form
{
Bitmap score, gu, chyoki, pa;
Button button0, button1, button2;
TextBox textBox1;
Random rand;
int you, my; //あなたと私の手
int y_c, m_c; //あなたと私の得点
int game_cnt; //ゲームのカウント
int old; //前回の you の手
int y_cnt; //you の手の連続数
public MyForm()
{
InitializeComponent();
rand = new Random(); //時間に応じて決まるシード値で初期化
Paint += new PaintEventHandler(MyHandler);
try
{
score = new Bitmap("C:\\DATA\\Test\\score.gif");
gu = new Bitmap("C:\\DATA\\Test\\jyanken0.gif");
chyoki= new Bitmap("C:\\DATA\\Test\\jyanken1.gif");
pa = new Bitmap("C:\\DATA\\Test\\jyanken2.gif");
}
catch
{
MessageBox.Show("画像ファイルが読めません!", "C:\\DATA\\Test\\");
return ;
}
y_c= 0;
m_c= 0;
game_cnt= 0;
old= 0;
y_cnt= 0;
}
private void InitializeComponent()
{
// button0
button0 = new Button();
button0.Parent = this;
button0.Location = new System.Drawing.Point(20, 240);
button0.Text = "グー";
button0.Click += new System.EventHandler(this.button0_Click);
// button1
button1 = new Button();
button1.Location = new System.Drawing.Point(20, 280);
button1.Text = "チョキ";
button1.Click += new System.EventHandler(this.button1_Click);
// button2
button2 = new Button();
button2.Location = new System.Drawing.Point(20, 320);
button2.Text = "パー";
button2.Click += new System.EventHandler(this.button2_Click);
// textBox1
textBox1 = new System.Windows.Forms.TextBox();
textBox1.Location = new System.Drawing.Point(20, 380);
textBox1.Size = new System.Drawing.Size(300, 40);
this.ClientSize = new System.Drawing.Size(400, 420);
this.Controls.Add(this.button0);
this.Controls.Add(this.button1);
this.Controls.Add(this.button2);
this.Controls.Add(this.textBox1);
this.Name = "MyForm";
this.ResumeLayout(false);
this.PerformLayout();
}
private void MyHandler(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
g.DrawImage(score, 20, 20);
switch(you)
{ case 0: g.DrawImage(gu, 110, 240);
break;
case 1: g.DrawImage(chyoki, 110, 240);
break;
case 2: g.DrawImage(pa, 110, 240);
break;
}
switch(my)
{ case 0: g.DrawImage(gu, 240, 240);
break;
case 1: g.DrawImage(chyoki, 240, 240);
break;
case 2: g.DrawImage(pa, 240, 240);
break;
}
}
private void button0_Click(object sender, EventArgs e)
{
you = 0;
my = Think();
Judge(you, my);
Info(you, my);
Invalidate();
}
private void button1_Click(object sender, EventArgs e)
{
you = 1;
my = Think();
Judge(you, my);
Info(you, my);
Invalidate();
}
private void button2_Click(object sender, EventArgs e)
{
you = 2;
my = Think();
Judge(you, my);
Info(you, my);
Invalidate();
}
// コンピュータが考える
private int Think()
{
int n= rand.Next(3)+2; //2~4の乱数
if (y_cnt>n) //連続回数>乱数
{ y_cnt= 0; //回数をリセット
n= (old+2)%3; //old に勝つ手を選ぶ
return(n);
}
if (game_cnt%12<5) return(1);
if (game_cnt%12<6) return(2);
if (game_cnt%12<10) return(1);
return(2);
}
// 情報収集(you:人間側 my:コンピュータ側)
private void Info(int you, int my)
{
game_cnt++;
if (you==old)
{ y_cnt++; //y_cnt= you が続いた回数
return;
}
old= you; //old= you の手を記録
y_cnt= 1; //y_cnt をリセット
}
// グー・チョキ・パーをパラメータの確率で出す
public int WeightRand(int g, int c, int p)
{ int x = rand.Next(g+c+p);
if (x<g) return 0;
else if (x<g+c) return 1;
else return 2;
}
// 勝敗の判定と得点の計算
private void Judge(int you, int my)
{ string str= "";
int w;
w = ((you+3)-my)%3;
switch(w)
{ case 1:
str= "私の勝ちです ";
switch(my)
{ case 0: //グーで勝ち
m_c += 5;
break;
case 1: //チョキで勝ち
m_c += 2;
break;
case 2: //パーで勝ち
m_c += 15;
y_c -= 5;
break;
}
break;
case 2:
str= "あなたの勝ちです ";
switch(you)
{ case 0: //グーで勝ち
y_c += 5;
break;
case 1: //チョキで勝ち
y_c += 2;
break;
case 2: //パーで勝ち
y_c += 15;
m_c -= 5;
break;
}
break;
default:
str= "あいこです ";
switch(my)
{ case 0: //グー
y_c += 3;
m_c += 3;
break;
case 1: //チョキ
y_c += 1;
m_c += 1;
break;
}
break;
}
str= str + "あなたの得点:" + y_c.ToString() + " わたしの得点:" + m_c.ToString();
textBox1.Text = str;
}
}
class form03
{
public static void Main()
{
MyForm mf = new MyForm();
Application.Run(mf);
}
}
|