// コンピュータとプレイする
using System;
using System.Drawing;
using System.Windows.Forms;
public class Pos
{ public int y=0; // Y 座標
public int x=0; // X 座標
}
public class MyForm : Form
{
int[,] m_t = new int[3, 3];
int[,] dat = new int[9, 2]; // 手の記録
int m_num; // dat のIDX
bool m_sente= true; // 先手フラグ
int x,y;
public MyForm()
{ Init();
BackColor = SystemColors.AppWorkspace;
Width = 250;
Height = 270;
Paint += new PaintEventHandler(MyHandler);
MouseDown += new MouseEventHandler(OnMyMouseDown);
}
// ウインドウの描画
private void MyHandler(object sender, PaintEventArgs e)
{ Graphics g = e.Graphics;
int ret;
g.DrawImage(new Bitmap("c:\\data\\test\\game3.gif"), new PointF(10F, 10F));
for (y = 0; y < 3; y++)
for (x = 0; x < 3; x++)
{ if (m_t[y, x]==1) g.DrawImage(new Bitmap("c:\\data\\test\\koma_b.gif"), new PointF(x * 61 + 28, y * 61 + 24));
if (m_t[y, x]==-1) g.DrawImage(new Bitmap("c:\\data\\test\\koma_w.gif"), new PointF(x * 61 + 28, y * 61 + 24));
}
ret= Fine(m_t);
if (ret==1) MessageBox.Show("黒の勝ち");
if (ret==-1) MessageBox.Show("白の勝ち");
}
// マウスのクリックでプレイ
private void OnMyMouseDown(object sender, MouseEventArgs e)
{ Pos p = new Pos();
int c= 0;
if (e.Button == MouseButtons.Right)
{ Init();
m_sente= !m_sente;
Invalidate();
return;
}
p.x = (e.X-28)/61;
p.y = (e.Y-24)/61;
if (m_num%2==0) // 先手番
{ if (!m_sente) // マシンが先手
{ p= Play(m_t); }
c = 1;
}
else // 後手番
{ if (m_sente) // マシンが後手
{ p= Play(m_t); }
c = -1;
}
if (m_t[p.y,p.x]!=0)
{ MessageBox.Show("Miss Play");
return;
}
m_t[p.y,p.x]= c;
dat[m_num,0]= p.y;
dat[m_num,1]= p.x;
m_num++;
Invalidate();
}
// 空いている箇所を選択
public Pos Play(int[,] t)
{ Pos p = new Pos();
for(p.y=0; p.y<3; p.y++)
for(p.x=0; p.x<3; p.x++)
{ if (t[p.y, p.x] == 0) return p;
}
return p;
}
// 終了判定
public int Fine(int[,] t)
{ int[] tw = new int[8];
int i;
for(i=0; i<8; i++) tw[i] = 0;
for(i=0; i<3; i++)
{ tw[0] += t[0,i];
tw[1] += t[1,i];
tw[2] += t[2,i];
tw[3] += t[i,0];
tw[4] += t[i,1];
tw[5] += t[i,2];
tw[6] += t[i,i];
tw[7] += t[i,2-i];
}
for(i=0; i<8; i++)
{ if (tw[i]==3) return 1;
if (tw[i]==-3) return -1;
}
return 0;
}
// ゲームの初期化
public void Init()
{ int x,y;
for(y=0; y<3; y++)
for(x=0; x<3; x++)
m_t[y,x] = 0;
m_num= 0;
}
}
class image01
{
public static void Main()
{
MyForm mf = new MyForm();
Application.Run(mf);
}
}
|