玩家通過鍵盤輸入要落子的地點,電腦隨機產生一個沒有棋子的棋盤座標並落子,如果有一方可以做到三個子連着或對角線連着,則此方贏;如果雙方直到棋盤下滿都沒有任一方均做到,則爲平局。
#include <stdio.h> #include <time.h> #include <stdlib.h> #define LINE 3 #define LIST 3 void print(char arr[LINE][LIST]); void player(char arr[LINE][LIST]); int computer(char arr[LINE][LIST]); char check(char arr[LINE][LIST]); void init(char arr[LINE][LIST]); int main() { char arr[LINE][LIST]; char ch; init(arr); print(arr); do{ player(arr); ch = check(arr); if (ch != ' ') { break; } int inter = computer(arr); if (inter == 0) { printf("平局!\n"); system("pause"); return 0; } print(arr); ch = check(arr); } while (ch==' '); print(arr); if (ch == '*') { printf("玩家贏!\n"); system("pause"); return 0; } else if (ch == 'o') { printf("電腦贏!\n"); system("pause"); return 0; } else { printf("平局!\n"); } system("pause"); return 0; } void player(char arr[LINE][LIST]) /*玩家輸入*/ { int x = 0, y = 0; printf("請輸入您要落子的地點(x,y):> "); scanf_s("%d%d", &x, &y); if ((x <= 0 || x > 3) || (y <= 0 || y > 3)||arr[x-1][y-1] != ' ') { printf("請輸入正確的地點!\n"); player(arr); } arr[x - 1][y - 1] = '*'; } int computer(char arr[LINE][LIST]) /*電腦輸入*/ { int x = 0, y = 0, i = 0, j = 0; for (i = 0; i < LINE; i++) { for (j = 0; j < LIST; j++) { if (arr[i][j] == ' ') { goto flag; } } } return 0; flag: srand((unsigned int)time(NULL)); x = rand() % 3; y = rand() % 3; /*產生0~2之間的隨機數*/ if (arr[x][y] != ' ') { goto flag; } arr[x][y] = 'o'; return 1; } char check(char arr[LINE][LIST]) /*檢查函數*/ { for (int i = 0; i < LINE; i++) /*行贏*/ { if (arr[i][0] == arr[i][1] && arr[i][0] == arr[i][2]) return arr[i][1]; } for (int j = 0; j < LIST; j++) /*列贏*/ { if (arr[0][j] == arr[1][j] && arr[0][j] == arr[2][j]) return arr[0][j]; } if (arr[0][0] == arr[1][1] && arr[0][0] == arr[2][2]) /*斜贏*/ return arr[0][0]; if (arr[0][2] == arr[1][1] && arr[0][2] == arr[2][0]) return arr[0][2]; return ' '; } void print(char arr[LINE][LIST]) /*輸出棋盤*/ { for (int i = 0; i < LINE; i++) { printf(" %c | %c | %c \n", arr[i][0], arr[i][1], arr[i][2]); printf("---|---|---\n"); } } void init(char arr[LINE][LIST]) /*初始化*/ { for (int i = 0; i < LINE; i++) { for (int j = 0; j < LIST; j++) { arr[i][j] = ' '; } } }