c語言實現三子棋
阿新 • • 發佈:2018-12-21
- 分析 玩法分析:將正方形對角線連起來,相對兩邊依次擺上三個雙方棋子,只要將自己的三個棋子走成一條線,對方就算輸了。
- 思路
遊戲流程:遊戲初始化
- 棋盤初始化
- 棋盤由二位陣列模擬,且初始化陣列
- 棋盤列印
- 玩家下棋
- 判斷下棋座標是否越界
- 判斷下棋座標是否已經有子
- 如果滿足上方條件則在此座標插入棋子,否則重新輸入
- 電腦下棋
- 生成隨機座標數 注意需先隨機種子
- 判斷下棋座標是否有子
- 如果滿足上方條件則在此座標插入棋子,否則重新隨機座標
- 判斷勝者 1.判斷每一行,如果每一行的棋子都為一個玩家,且其棋子不為空,則這個玩家勝出 2.判斷每一列,如果每一列的棋子都為一個玩家,且其棋子不為空,則這個玩家勝出 3.判斷對角線,如果對角線的棋子都為一個玩家,且其棋子不為空,則這個玩家勝出 4.如果棋盤下滿了,則為和棋
- 棋盤初始化
- 實現
- 定義常量,以及二維陣列
#define ROW 3 #define COL 3 char chessboard[ROW][COL];
- 陣列初始化
void Init() { for (int row = 0; row < ROW; row++) { for (int col = 0; col < COL; col++) { chessboard[row][col] = ' '; //初始化每個元素都為空格 } } }
- 列印棋盤
void Print() { for (int i = 0; i < ROW; i++) { printf("| %c | %c | %c |\n"
- 玩家下棋
void PlayerMove() { int x, y; while (true) { printf("請輸入你下棋的座標!\n"); scanf("%d %d", &x, &y); if (x > ROW - 1 && x < 0 && y > COL - 1 && y < 0) { printf
- 電腦下棋
void AiMove() { srand((unsigned int)time(0)); //隨機種子 while (true) { int x = rand() % 3; int y = rand() % 3; if (chessboard[x][y] == ' ') { chessboard[x][y] = 'X'; break; } else { continue; } } }
- 棋盤滿了判斷
int isFull() { for (int row = 0; row < ROW; row++) { for (int col = 0; col < COL; col++) { if (chessboard[row][col] == ' ') { return 0; } } } return 1; }
- 判斷勝者
char CheckWinner() { // 行 for (int row = 0; row < ROW; row++) { if (chessboard[row][0] == chessboard[row][1] && chessboard[row][1] == chessboard[row][2] && chessboard[row][0] != ' ') { return chessboard[row][0]; } } // 列 for (int col = 0; col < COL; col++) { if (chessboard[0][col] == chessboard[1][col] && chessboard[1][col] == chessboard[2][col] && chessboard[0][col] != ' ') { return chessboard[0][col]; } } // 對角線 if (chessboard[0][0] == chessboard[1][1] && chessboard[1][1] == chessboard[2][2] && chessboard[0][0] != ' ') { return chessboard[0][0]; } else if (chessboard[0][2] == chessboard[1][1] && chessboard[1][1] == chessboard[2][0] && chessboard[0][0] != ' ') { return chessboard[0][2]; } else if (isFull()) { return 'p'; } } 8. 遊戲初始化 ``` void gameInit() { char winner; Init(); Print(); while (true) { PlayerMove(); winner = CheckWinner(); AiMove(); Print(); winner = CheckWinner(); if (winner == 'O') { printf("恭喜你!\n"); break; } else if (winner == 'X') { printf("恭喜電腦!\n"); break; } else if (winner == 'p') { printf("勢均力敵的對手!"); break; } continue; } }
- 定義常量,以及二維陣列
寫在最後
最近推出了公眾號 coding趣談,一位在讀學生的技術提升之路,為您提供一系列我在學習路上的筆記,經驗,以及感悟。往與君共勉,共同進步! 歡迎大家來關注哦!