/// 112 年工科賽第 3 題 /// 簡單的 3 乘 3 井字棋程式 /// 漆家豪 於海青資訊科 2024/2/8 using System; namespace TicTacToe //井字棋 { class Program { static string[] checkerBoard = Enumerable.Repeat("口", 9).ToArray(); static bool playerTurn = true; static void clearBoard()//清除棋盤 { for (int i = 0; i < checkerBoard.Length; i++) { checkerBoard[i] = "口"; } } static void printBoard() { Console.WriteLine(string.Concat(checkerBoard.Skip(6).Take(3))); Console.WriteLine(string.Concat(checkerBoard.Skip(3).Take(3))); Console.WriteLine(string.Concat(checkerBoard.Take(3))); } static void playerMove()//玩家下棋 { Console.Write("請輸入 1~9 (按 0 鍵結束):"); int move = int.Parse(Console.ReadLine()); if (move == 0) { Environment.Exit(0); } if (checkerBoard[move - 1] == "口")//可以填入 { checkerBoard[move - 1] = "O"; } else { Console.WriteLine("下的位置已有棋子"); playerMove(); } } static void computerMove()//電腦隨機下棋 { Random rand = new Random(); int move; do { move = rand.Next(1, 10); } while (checkerBoard[move - 1] != "口"); checkerBoard[move - 1] = "X"; Console.WriteLine($"電腦下在位置 {move}"); } static bool checkWin(string symbol)//檢查棋盤是否獲勝 { return (checkerBoard[0] == symbol && checkerBoard[1] == symbol && checkerBoard[2] == symbol) || (checkerBoard[3] == symbol && checkerBoard[4] == symbol && checkerBoard[5] == symbol) || (checkerBoard[6] == symbol && checkerBoard[7] == symbol && checkerBoard[8] == symbol) || (checkerBoard[0] == symbol && checkerBoard[3] == symbol && checkerBoard[6] == symbol) || (checkerBoard[1] == symbol && checkerBoard[4] == symbol && checkerBoard[7] == symbol) || (checkerBoard[2] == symbol && checkerBoard[5] == symbol && checkerBoard[8] == symbol) || (checkerBoard[0] == symbol && checkerBoard[4] == symbol && checkerBoard[8] == symbol) || (checkerBoard[2] == symbol && checkerBoard[4] == symbol && checkerBoard[6] == symbol); } static bool isCheckerBoardFull()//是否下滿了 { foreach (string c in checkerBoard) { if (c == "口") { return false; } } return true; } static void Main(string[] args) { printBoard(); while (true) { if (playerTurn) { playerMove(); } else { computerMove(); } printBoard(); if (checkWin("O")) { Console.WriteLine("你○方獲勝 再來一盤"); clearBoard(); playerTurn = false; printBoard(); } else if (checkWin("X")) { Console.WriteLine("電腦 X 方獲勝 再來一盤!"); clearBoard(); playerTurn = true; printBoard(); } else if (isCheckerBoardFull()) { Console.WriteLine("雙方平手 再來一盤!"); clearBoard(); printBoard(); } playerTurn = !playerTurn; } } } }