C语言三字棋小游戏
C語言三字棋小游戲
開始做之前先想好寫程序的大致流程:
注意這里的數組大小可以定義為宏
方便更改
如果我們寫成3和3這種那么如果我們想要改棋盤大小那么就非常麻煩
如果直接定義為宏 那么直接可以在定義宏里面修改數值即可 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #define MAX_ROW 3 #define MAX_COL 3 void init(char arr[MAX_ROW][MAX_COL]) {for (int row = 0; row < MAX_ROW; row++) {for (int col = 0; col < MAX_COL; col++) {arr[row][col] = ' ';}} }void printchess(char arr[MAX_ROW][MAX_COL]) {printf("+---+---+---+\n");for (int row = 0; row < MAX_ROW; row++) {printf("|");for (int col = 0; col < MAX_COL; col++) {printf(" %c |", arr[row][col]);}printf("\n+---+---+---+\n");}}void playerMove(char arr[MAX_ROW][MAX_COL]) {while (1) {printf("玩家請進行落子\n");int row = 0;int col = 0;scanf("%d %d", &row, &col);if (row >= MAX_ROW || row < 0 || col >= MAX_COL || col < 0) {printf("您輸入的坐標有誤請重新輸入\n");continue;}if (arr[row][col] != ' ') {printf("您輸入的位置有子了請重新輸入!\n");continue;}arr[row][col] = 'x';break;} } int 整形;void computerMove(char arr[MAX_ROW][MAX_COL]) {while (1) {int row = rand() % MAX_ROW;int col = rand() % MAX_COL;if (arr[row][col] != ' ') {continue;}arr[row][col] = 'o';break;} } // 此處規定返回1 表示棋盤滿了 返回0表示棋盤未滿 int isFull(char arr[MAX_ROW][MAX_COL]) {for (int row = 0; row < MAX_ROW; row++) {for (int col = 0; col < MAX_COL; col++) {// 遍歷棋盤, 看看有沒有空格. 有空格就是沒滿if (arr[row][col] ==' ' ) {return 0;}}}return 1;//全部遍歷完了都沒用空格表示滿了 } // 規定返回'x'表示為玩家獲勝 'o'表示為電腦獲勝 'q'表示雙方和局 ' '表示棋還沒有下完繼續 char isWin(char arr[MAX_ROW][MAX_COL]) {for (int row = 0; row < MAX_ROW; row++) {if (arr[row][0] != ' '&&arr[row][0] == arr[row][2]&& arr[row][0] == arr[row][1]) {return arr[row][0];}}for (int col = 0; col < MAX_COL; col++) {if (arr[0][col] != ' '&&arr[0][col] == arr[2][col]&& arr[1][col] == arr[0][col]) {return arr[0][col];}}if (arr[0][0] != ' '&&arr[0][0] == arr[1][1]&& arr[0][0] == arr[2][2]) {return arr[0][0];}if (arr[0][2] != ' '&& arr[0][2] == arr[1][1]&& arr[0][2] == arr[2][0]) {return arr[0][2];}// 判斷完所有的對角線和行和列之后就要判斷是否為和棋if (isFull(arr)) {return 'q';}return ' '; } int main() {// 1.創造一個3x3的二維數組char arr[MAX_ROW][MAX_COL];// 2. 打印一個棋盤init(arr);char winner = ' ';while (1) {printchess(arr);// 規定 'x'表示玩家落子 'o'表示電腦隨機落子 ' '表示還沒有落子的地方// 3.玩家進行落子 讓玩家輸入一組(row,col)進行落子playerMove(arr);// 4.判斷是否獲勝 winner = isWin(arr);if (winner != ' ') {// 就代表游戲結束了break;}// 5.電腦隨機進行落子并用'o'表示computerMove(arr);// 6.判斷是否獲勝char winner = isWin(arr);if (winner != ' ') {// 就代表游戲結束了break;}}if (winner == 'x') {printf("恭喜你贏了\n");}else if (winner == 'o') {printf("不會吧bro連人工智障的打不贏\n");}else {printf("你竟然和人工智障和棋了...\n");}system("pause");return 0; }
總結
- 上一篇: C语言如何使用函数交换两个变量的值
- 下一篇: windows经典地雷小游戏(C语言实现