#include <stdio.h> #include "chess.h" int main() { char arr[ROW][COL]; char done = ‘ ‘; init(arr); do { display(arr); player_move(arr); done = check(arr); if (done != ‘ ‘) break; int ret = computer_move(arr); if (ret == 0) { break; } done = check(arr); } while (done == ‘ ‘); if (done == ‘X‘) { printf("玩家赢\n"); } else if (done == ‘0‘) { printf("电脑赢\n"); } system("pause"); return 0; } #ifndef __CHESS_H__ #define __CHESS_H__ #define ROW 3 #define COL 3 void init(char arr[][COL]); void display(char arr[][COL]); void player_move(char arr[][COL]); int computer_move(char arr[][COL]); char check(char arr[][COL]); #endif #include "chess.h" void init(char arr[][COL]) { int i = 0; int j = 0; for (i = 0; i < ROW; i++) { for (j = 0; j < COL; j++) { arr[i][j] = ‘ ‘; } } } void display(char arr[][COL]) { int i = 0; for (i = 0; i < ROW; i++) { printf(" %c | %c | %c \n", arr[i][0], arr[i][1], arr[i][2]); if (i != 2) printf("---|---|---\n"); } } void player_move(char arr[][COL]) { int x = 0, y = 0; printf("请输入坐标:(x y)>"); scanf("%d%d", &x, &y); x -= 1; y -= 1; while (arr[x][y] != ‘ ‘ || x <0 || x>2 || y <0 || y >2) { printf("坐标选择错误,请重新输入>"); scanf("%d%d", &x, &y); x -= 1; y -= 1; } arr[x][y] = ‘X‘; } int computer_move(char arr[][COL]) { int i = 0; int j = 0; for (i = 0; i < ROW; i++) { for (j = 0; j < COL; j++) { if (arr[i][j] == ‘ ‘) { break; } } if (arr[i][j] == ‘ ‘) break; } if (i*j <= 4) { arr[i][j] = ‘0‘; return 1; } else { printf("平局\n"); return 0; } return 1; } char check(char arr[][COL]) { int i = 0; for (i = 0; i < ROW; i++) { if (arr[i][0] == arr[i][1] && arr[i][1] == arr[i][2]) { return arr[i][0]; } } for (i = 0; i < COL; i++) { if (arr[0][i] == arr[1][i] && arr[1][i] == arr[2][i]) { return arr[0][i]; } } if (arr[0][0] == arr[1][1] && arr[1][1] == arr[2][2]) { return arr[0][0]; } if (arr[0][2] == arr[1][1] && arr[1][1] == arr[2][0]) { return arr[0][2]; } return ‘ ‘; }
原文:http://10706198.blog.51cto.com/10696198/1703766