tic tac toe【三连棋】

三连棋-控制台源码

  1   2 
  3 char[,] nums;
  4 int player;
  5 
  6 Console.BackgroundColor= ConsoleColor.Blue;
  7 do
  8 {
  9     // 初始化棋盘和玩家
 10     InitializeGame(); 
 11     do
 12     {
 13         Console.Clear();
 14         Display(); 
 15         Console.Write($"{player}号玩家输入:"); 
 16         try
 17         {
 18             string str = Console.ReadLine();
 19             int num = int.Parse(str);
 20             CheckNum(num); // 检查数字
 21             ChangeNum(player, num); // 更新棋盘
 22 
 23             char symbol = player == 1 ? '0' : 'X';
 24 
 25             // 判断输赢
 26             if (CheckWin(nums, symbol))
 27             {
 28                 Console.Clear();
 29                 Display();
 30                 Console.WriteLine($"{player}号玩家获胜!");
 31                 break;
 32             }
 33 
 34             // 判断平局
 35             if (CheckDraw(nums))
 36             {
 37                 Console.Clear();
 38                 Display();
 39                 Console.WriteLine("游戏平局!");
 40                 break;
 41             }
 42 
 43             // 切换玩家
 44             player = (player == 1) ? 2 : 1;
 45         }
 46         catch (Exception e)
 47         {
 48             Console.WriteLine(e.Message);
 49             Console.WriteLine("按任意键重新输入...");
 50             Console.ReadKey();
 51         }
 52     } while (true);
 53 
 54     // 游戏结束,询问是否重新开始
 55     Console.WriteLine("是否重新开始游戏?(Y/N)");
 56     string restart = Console.ReadLine().Trim().ToUpper();
 57     if (restart != "Y")
 58     {
 59         Console.WriteLine("游戏结束,再见!");
 60         break;
 61     }
 62 } while (true);
 63 
 64 // 初始化游戏状态
 65 void InitializeGame()
 66 {
 67     nums = new char[3, 3]
 68     {
 69         {'1','2','3' },
 70         {'4','5','6' },
 71         {'7','8','9' }
 72     };
 73     player = 1; // 设置初始玩家编号
 74 }
 75 
 76 void ChangeNum(int player, int num)
 77 {
 78     char symbol = player == 1 ? '0' : 'X';
 79     switch (num)
 80     {
 81         case 1: nums[0, 0] = symbol; break;
 82         case 2: nums[0, 1] = symbol; break;
 83         case 3: nums[0, 2] = symbol; break;
 84         case 4: nums[1, 0] = symbol; break;
 85         case 5: nums[1, 1] = symbol; break;
 86         case 6: nums[1, 2] = symbol; break;
 87         case 7: nums[2, 0] = symbol; break;
 88         case 8: nums[2, 1] = symbol; break;
 89         case 9: nums[2, 2] = symbol; break;
 90         default: throw new Exception("无效输入");
 91     }
 92 }
 93 
 94 void CheckNum(int num)
 95 {
 96     if (num < 1 || num > 9)
 97         throw new Exception("输入数字错误,请输入(1-9)");
 98 
 99     int row = (num - 1) / 3;
100     int col = (num - 1) % 3;
101 
102     if (nums[row, col] == 'X' || nums[row, col] == '0')
103         throw new Exception($"数字{num}已使用");
104 }
105 
106 bool CheckWin(char[,] board, char symbol)
107 {
108     for (int i = 0; i < 3; i++)
109     {
110         if (board[i, 0] == symbol && board[i, 1] == symbol && board[i, 2] == symbol)
111             return true;
112     }
113 
114     for (int i = 0; i < 3; i++)
115     {
116         if (board[0, i] == symbol && board[1, i] == symbol && board[2, i] == symbol)
117             return true;
118     }
119 
120     if (board[0, 0] == symbol && board[1, 1] == symbol && board[2, 2] == symbol)
121         return true;
122 
123     if (board[0, 2] == symbol && board[1, 1] == symbol && board[2, 0] == symbol)
124         return true;
125 
126     return false;
127 }
128 
129 bool CheckDraw(char[,] board)
130 {
131     foreach (var cell in board)
132     {
133         if (cell != 'X' && cell != '0')
134             return false;
135     }
136     return true;
137 }
138 
139 void Display()
140 {
141     Console.WriteLine($" {nums[0, 0]} | {nums[0, 1]} | {nums[0, 2]} ");
142     Console.WriteLine("___|___|___");
143     Console.WriteLine($" {nums[1, 0]} | {nums[1, 1]} | {nums[1, 2]} ");
144     Console.WriteLine("___|___|___");
145     Console.WriteLine($" {nums[2, 0]} | {nums[2, 1]} | {nums[2, 2]} ");
146 }

 

posted @ 2024-12-03 13:16  后跳  阅读(42)  评论(0)    收藏  举报