test.c:
#include"game.h" void menu() { printf("**********************\n"); printf("****1.play 0.exit****\n"); printf("**********************\n"); } void game() { char win = 0; srand((unsigned int)time(NULL)); char arr[ROWS][COLS]; int sz = sizeof(arr) / sizeof(arr[0][0]); init_board(arr,ROWS,COLS,sz); do { display_board(arr, ROWS, COLS); printf("电脑下:>\n"); computer_move(arr, ROWS, COLS); win = check_win(arr, ROWS, COLS); if ((win == '0') || (win == 'q')) { break; } //system("CLS"); display_board(arr, ROWS, COLS); printf("玩家下:>"); play_move(arr, ROWS, COLS); win = check_win(arr, ROWS, COLS); if ((win == 'x') || (win == 'q')) { break; } system("CLS"); } while (1); system("CLS"); display_board(arr, ROWS, COLS); if (win == '0') { printf("电脑赢!\n"); } else if (win == 'x') { printf("玩家赢!\n"); } else { printf("平局!\n"); } } void test() { int input = 0; do { menu(); printf("请选择:>"); scanf("%d",&input); switch (input) { case 1: game(); break; case 0: break; default: printf("输入有误,请重新选择!\n"); break; } } while (input); } int main() { test(); return 0; } game.c: #include"game.h" void init_board(char arr[ROWS][COLS], int rows, int cols, int sz) { memset(arr,' ',sz); } void display_board(char arr[ROWS][COLS], int rows, int 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 != rows - 1) { printf("---|---|---\n"); } } } void computer_move(char arr[ROWS][COLS], int rows, int cols) { while (1) { int tmp1 = rand() % 3; int tmp2 = rand() % 3; if (arr[tmp1][tmp2] == ' ') { arr[tmp1][tmp2] = '0'; break; } } } void play_move(char arr[ROWS][COLS], int rows, int cols) { int row = 0; int col = 0; do { scanf("%d%d", &row, &col); if (((row>0) && (row <= rows)) && ((col>0) && (col <= cols))) { if (arr[row - 1][col - 1] == ' ') { arr[row - 1][col - 1] = 'x'; break; } else printf("输入标有误,请重新输入!:>"); } else { printf("输入标有误,请重新输入!:>"); } } while (1); } char check_win(char arr[ROWS][COLS], int rows, int cols) { int i = 0; for (i = 0; i < rows; i++) { if ((arr[i][0] == arr[i][1]) && (arr[i][1] == arr[i][2]) && (arr[i][0] != ' ')) return arr[i][0]; } for (i = 0; i < cols; i++) { if ((arr[0][i] == arr[1][i]) && (arr[1][i] == arr[2][i]) && (arr[0][i] != ' ')) return arr[0][i]; } if ((arr[0][0] == arr[1][1]) && (arr[1][1] == arr[2][2]) && (arr[1][1] != ' ')) return arr[1][1]; if ((arr[0][2] == arr[1][1]) && (arr[1][1] == arr[2][0]) && (arr[1][1] != ' ')) return arr[1][1]; for (i = 0; i < rows; i++) { int j = 0; for (j = 0; j < cols; j++) { if (arr[i][j] == ' ') return ' '; } } return 'q'; } game.h: #ifndef __GAME_H__ #define __GAME_H__ #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<time.h> #include<string.h> #define ROWS 3//排 #define COLS 3//列 void init_board(char arr[ROWS][COLS], int rows, int cols, int sz); void display_board(char arr[ROWS][COLS], int rows, int cols); void computer_move(char arr[ROWS][COLS], int rows, int cols); void play_move(char arr[ROWS][COLS], int rows, int cols); char check_win(char arr[ROWS][COLS], int rows, int cols); #endif //__GAME_H__