3. 簡單的 3 乘 3 井字棋程式
# 只有當找到 winner 才可以提前 break,避免判斷到三個 "口" 連線。
int[,] board = new int[3, 3]; // 1: me
void print()
{
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
Console.Write(board[i, j] == 0 ? "口" : board[i, j] == 1 ? "O" : "X");
}
Console.WriteLine();
}
}
bool checkWin()
{
int winner = 0;
for (int i = 0; i < 3; i++)
{
if (board[0, i] == board[1, i] && board[1, i] == board[2, i])
{
winner = board[0, i];
if (winner != 0) break; // !! 只有當找到winner才可以提前break,避免判斷到三個口連線。
}
if (board[i, 0] == board[i, 1] && board[i, 1] == board[i, 2])
{
winner = board[i, 0];
if (winner != 0) break; // !! 只有當找到winner才可以提前break,避免判斷到三個口連線。
}
}
if (board[0, 0] == board[1, 1] && board[1, 1] == board[2, 2])
{
winner = board[0, 0];
}
if (board[2, 0] == board[1, 1] && board[1, 1] == board[0, 2])
{
winner = board[2, 0];
}
if (winner != 0)
{
print();
string s = winner == 1 ? "你O方" : "電腦X方";
Console.WriteLine($"{s}勝利 再來一盤\n");
board = new int[3, 3];
return true;
}
else
{
bool empty = false;
for (int i = 0; i < 9; i++)
{
if (board[i / 3, i % 3] == 0)
{
empty = true;
break;
}
}
if (!empty)
{
print();
Console.WriteLine("雙方平手 再來一盤\n");
board = new int[3, 3];
return true;
}
}
return false;
}
Console.WriteLine("你為O、電腦為X\n位置對應數字鍵盤\n");
while (true)
{
print();
Console.Write("輸入1~9(按0鍵結束):");
int key = int.Parse(Console.ReadLine()) - 1;
if (key == -1)
break;
if (board[2 - key / 3, key % 3] != 0)
{
Console.WriteLine("下的位置已有旗子");
continue;
}
board[2 - key / 3, key % 3] = 1;
if (checkWin()) continue;
int k = new Random().Next(9);
while (board[2 - k / 3, k % 3] != 0)
k = new Random().Next(9);
board[2 - k / 3, k % 3] = -1;
if (checkWin()) continue;
}Last updated