test.c:
#include"game.h" void menu() { printf("***************************\n"); printf("*******1.play 0.exit*******\n"); printf("***************************\n"); } void game() { char arr[ROWS][COLS]; char win = 0; int sz = sizeof(arr) / sizeof(arr[0][0]); srand((unsigned int)time(NULL)); init_board(arr,sz); do { printf("五子棋:\n"); display_board(arr, ROWS, COLS); printf("电脑下:>\n"); computer_move(arr, ROWS, COLS); win = check_win(arr, ROWS, COLS); if ((win == '0') || (win == 'q')) { break; } 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 (win == ' '); 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 sz) { memset(arr[0],' ',sz); } void display_board(char arr[ROWS][COLS], int rows, int cols) { int i = 0; for (i = 0; i < cols; i++) { if (i == 0) { printf(" ___ ___ ___ ___ ___ \n"); } printf("| %c | %c | %c | %c | %c |\n", arr[i][0], arr[i][1], arr[i][2], arr[i][3], arr[i][4]); printf("|___|___|___|___|___|\n"); } } void computer_move(char arr[ROWS][COLS], int rows, int cols) { int row = 0; int col = 0; while (1) { row = rand() % 5; col = rand() % 5; if (arr[row][col] == ' ') { arr[row][col] = '0'; break; } } } void play_move(char arr[ROWS][COLS], int rows, int cols) { int row = 0; int col = 0; while (1) { 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("输入坐标有误,请重新输入:>\n"); } else { printf("输入坐标有误,请重新输入:>\n"); } } } char check_win(char arr[ROWS][COLS], int rows, int cols) { int i = 0; for (i = 0; i < COLS; i++) { if ((arr[i][0] == arr[i][1]) && (arr[i][1] == arr[i][2]) && (arr[i][2] == arr[i][3]) && (arr[i][3] == arr[i][4]) && (arr[i][0]) != ' ') { return arr[i][0]; } } for (i = 0; i < ROWS; i++) { if ((arr[0][i] == arr[1][i]) && (arr[1][i] == arr[2][i]) && (arr[2][i] == arr[3][i]) && (arr[3][i] == arr[4][i]) && (arr[0][i]) != ' ') { return arr[0][i]; } } if ((arr[0][0] == arr[1][1]) && (arr[1][1] == arr[2][2]) && (arr[2][2] == arr[3][3]) && (arr[3][3] == arr[4][4]) && (arr[2][2] != ' ')) { return arr[2][2]; } if ((arr[0][4] == arr[1][3]) && (arr[1][3] == arr[2][2]) && (arr[2][2] == arr[3][1]) && (arr[3][1] == arr[4][0]) && (arr[2][2] != ' ')) { return arr[2][2]; } for (i = 0; i < ROWS; i++) { int j = 0; for (j = 0; j < COLS; j++) { if (arr[i][j] == ' ') return arr[i][j]; } } return 'q'; }
game.h:
#ifndef __GAME_H__ #define __GAME_H__ #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<string.h> #include<stdlib.h> #include<time.h> #define ROWS 5 #define COLS 5 void init_board(char arr[ROWS][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__