[C#][WinForm] 井字遊戲
就是弄個井字遊戲,首先弄個介面,如下圖
顏色、框線等請自行設定,另外我是使用 button 來做井字遊戲 然後,程式碼部分都有註解好了,直接看應該就知道了。
Button[] btnTControls= new Button[9]; //放置井字遊戲按鍵
Boolean isGameOver = false; //有連線成功則結束
Boolean isO = true; //點選是 O 還是 X
//連線成功的組合
static private int[,] WinGroup = new int[8, 3]
{
{0,1,2},
{3,4,5},
{6,7,8},
{0,3,6},
{1,4,7},
{2,5,8},
{0,4,8},
{2,4,6}
};
public Form1()
{
InitializeComponent();
//井字遊戲的 9 個按鍵
btnTControls = new Button[9] { button3, button4, button5, button6, button7, button8, button9, button10, button11 };
initButtons();
}
//設定遊戲開始的按鍵文字、顏色、字型
private void initButtons()
{
isGameOver = false;
isO = true;
for (int i = 0; i < btnTControls.Length; i++)
{
btnTControls[i].Text = "";
btnTControls[i].BackColor = Color.LightBlue;
btnTControls[i].Font = new System.Drawing.Font("Arial", 30, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Pixel, ((System.Byte)1));
}
}
//開始遊戲
private void btnStart_Click(object sender, EventArgs e)
{
initButtons();
}
//關閉遊戲
private void btnClose_Click(object sender, EventArgs e)
{
this.Close();
}
private void buttons_Click(object sender, EventArgs e)
{
Button tmpButton = (Button)sender;
if (isGameOver)
{
MessageBox.Show("遊戲結束....請重新開始遊戲!", "遊戲結束", MessageBoxButtons.OK);
return;
}
if (tmpButton.Text != "")
{
MessageBox.Show("這個按鍵已經選擇了,請點選其他位置!","提示",MessageBoxButtons.OK);
return;
}
if (isO)
{
tmpButton.Text = "O";
tmpButton.BackColor = Color.LightGreen;
}
else
{
tmpButton.Text = "X";
tmpButton.BackColor = Color.LightYellow;
}
isO = !isO;
bool[] GameStatus = CheckWinGroup(btnTControls);
isGameOver = GameStatus[1];
//有人獲勝
if (GameStatus[0])
{
DialogResult dr = MessageBox.Show("遊戲結束....\r\n" + tmpButton.Text + " 獲勝\r\n是否重新開始遊戲", "遊戲結束", MessageBoxButtons.OKCancel);
if (dr == DialogResult.OK)
initButtons();
return;
}
//和局
if (GameStatus[1])
{
DialogResult dr = MessageBox.Show("遊戲結束....\r\n和局\r\n是否重新開始遊戲", "遊戲結束", MessageBoxButtons.OKCancel);
if (dr == DialogResult.OK)
initButtons();
}
}
//檢查是否OX連線成功
private bool[] CheckWinGroup(Button[] myControls)
{
//gameWinOver {是否有人獲勝, 是否遊戲結束(或是平局)}
bool[] gameWinOver = new bool[2] {false,false};
int btnIsUse = 1;
for (int i = 0; i < 8; i++)
{
int a = WinGroup[i, 0];
int b = WinGroup[i, 1];
int c = WinGroup[i, 2];
Button b1 = myControls[a];
Button b2 = myControls[b];
Button b3 = myControls[c];
//沒有連線就繼續
if (b1.Text == "" || b2.Text == "" || b3.Text == "")
continue;
//連線成功,遊戲結束
if (b1.Text == b2.Text && b2.Text == b3.Text)
{
b1.BackColor = b2.BackColor = b3.BackColor = Color.LightCoral;
b1.Font = b2.Font = b3.Font = new System.Drawing.Font("Times New Roman", 35, System.Drawing.FontStyle.Italic & System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Pixel,((System.Byte)1));
gameWinOver =new bool[2] {true , true};
break;
}
//九格填完,顯示結束
if (myControls[i].Text != "")
{
btnIsUse++;
if (btnIsUse == 9)
gameWinOver[1] = true;
}
}
return gameWinOver;
}
對於 GraphicsUnit 和 GdiCharSet 比較不熟悉的人,可以參考 MSDN 上的資訊,如下:
GraphicsUnit:連結
GdiCharSet:連結
執行畫面:
範例檔案 下載