三子棋,又稱井字棋的實現
阿新 • • 發佈:2019-01-10
編寫一個三子棋你需要知道的是需要哪些實現步驟:
首先,你需要有一個棋盤,這樣你就需要編寫一個初始化棋盤的函式,並能夠將棋盤打印出來;
棋盤麼,就像這種樣子:
___|___|___
___|___|___
| |
這個採用二維陣列就可以來實現了;
接著,你可以選擇實現pvp或者pve,這裡我實現的是pve,也就是和電腦下,這樣,你需要兩個函式,一個是給步驟,你自己下棋,另一個就是你需要電腦下棋,電腦你可以產生隨機值來實現。在這裡,你自己下棋的話需要輸入對應的格子的座標,比如1.1 2.2 3.3之類的;
另外,你需要判斷到底是誰贏了,又或者是平局。
大體思路就像這樣,接著,你需要思考的更加深入,如果該位置已經放入了棋子,那麼你需要重新輸入;棋盤已經滿了,你又不能再輸入了,那麼此刻你先要判斷到底有人贏了沒,沒有的話就是平局了。
#define _CRT_SECURE_NO_WARINGS 1 #include<stdio.h> #include<stdlib.h> #include<math.h> #include<time.h> #define ROWS 3//採用巨集讓棋盤大小便於修改 #define COLS 3 void init(char arr[ROWS][COLS])//棋盤初始化 { int i = 0; int j = 0; for (i = 0; i < ROWS; i++) { for (j = 0; j < COLS; j++) { arr[i][j] = ' '; } } } void print(char arr[ROWS][COLS])//列印棋盤 { int i = 0; for (i = 0; i < ROWS; i++) { printf(" %c | %c | %c \n", arr[i][0], arr[i][1], arr[i][2]); if (i != 2) { printf("---|---|---\n"); } } } void player(char arr[ROWS][COLS])//人下棋函式 { int m, n; flag: printf("請輸入你要走的位置:"); scanf_s("%d %d", &m, &n); if (arr[m - 1][n - 1] == ' ') { arr[m - 1][n - 1] = 'X'; } else { printf("該位置已有棋子,無效\n"); goto flag; } print(arr); } void computer(char arr[ROWS][COLS])//電腦下棋 { int line = 0; int column = 0; int count = 0; printf("電腦下棋!!\n"); while (1) { srand((unsigned)time(NULL)); line = rand() % ROWS; column = rand() % COLS; if (arr[line][column] == ' ') { arr[line][column] = 'O'; break; } } print(arr); } int full(char arr[ROWS][COLS])//判斷棋盤是否滿了 { int i = 0; int j = 0; for (i = 0; i < ROWS; i++) { for (j = 0; j < COLS; j++) { if (arr[i][j] == ' ') return 1; } } return 0; } int judge(char arr[ROWS][COLS])//判斷誰贏了,或者平局 { int i = 0; if ((arr[0][0] == arr[1][1]) && (arr[1][1] == arr[2][2])) { if (arr[1][1] == 'X') { return 1; } if (arr[1][1] == 'O') { return -1; } } if ((arr[0][2] == arr[1][1]) && (arr[1][1] == arr[2][0])) { if (arr[1][1] == 'X') { return 1; } if (arr[1][1] == 'O') { return -1; } } for (i = 0; i < ROWS; i++) { if ((arr[i][1] == arr[i][0]) && (arr[i][1] == arr[i][2])) { if (arr[i][1] == 'X') { return 1; } if (arr[i][1] == 'O') { return -1; } } } for (i = 0; i < COLS; i++) { if ((arr[0][i] == arr[1][i]) && (arr[1][i] == arr[2][i])) { if (arr[0][i] == 'X') { return 1; } if (arr[0][i] == 'O') { return -1; } } } return 0; } int main() { int m = 0; int n = 0; int count = 0; char arr[ROWS][COLS]; init(arr); print(arr); while (1) { if (count==0) { player(arr); count++; } else { computer(arr); count--; } if (full(arr) == 0) { printf("棋盤滿了\n"); if (judge(arr) == 1) { printf("玩家贏了\n"); break; } else if (judge(arr) == -1) { printf("電腦贏了\n"); break; } else { printf("平局\n"); break; } } if (full(arr) == 1) { if (judge(arr) == 1) { printf("玩家贏了\n"); break; } else if (judge(arr) == -1) { printf("電腦贏了\n"); break; } } } system("pause"); return 0; }