本文共 4404 字,大约阅读时间需要 14 分钟。
思维导图
大纲声明
头文件放函数的声明。.c文件放函数的实现。咱们的.c文件放main函数。游戏状态判断 用的字符,可以自定义。玩家的子儿用 *。电脑的子儿用 #。游戏继续 用 C。平局用 Q。 棋盘
主函数
int main() { test(); return 0;} 主函数调用的 test 函数
void test() { int input = 0; srand((unsigned int)time(NULL)); // 从程序开始就生成随机数 do { menu(); printf("请选择:"); scanf("%d", &input); switch (input) { case 1: game(); break; case 0: printf("退出游戏\n"); break; default: printf("选择错误,请重新选择!\n"); break; } } while (input);} 菜单函数
void menu() { printf("$$$$$$$$$$$$$$$$$$$$$$$$$$$\n"); printf("---- 1.play 0.exit---\n"); printf("$$$$$$$$$$$$$$$$$$$$$$$$$$$\n");} 游戏 Game 函数
void game() { char ret = 'C'; char board[ROW][COL] = {0}; Initboard(board, ROW, COL); Displayboard(board, ROW, COL); while (1) { Playermove(board, ROW, COL); Displayboard(board, ROW, COL); ret = iswin(board, ROW, COL); if (ret != 'C') { break; } computermove(board, ROW, COL); Displayboard(board, ROW, COL); ret = iswin(board, ROW, COL); if (ret != 'C') { break; } } if (ret == '*') { printf("玩家赢\n"); } else if (ret == '#') { printf("电脑赢\n"); } else { printf("平局\n"); }} 游戏 Game.h 头文件
#define _CRT_SECURE_NO_WARNINGS 1#define ROW 3 // 方便更换更大的棋盘#define COL 3#include#include #include // 函数的声明void Initboard(char board[ROW][COL], int row, int col);void Displayboard(char board[ROW][COL], int row, int col);void Playermove(char board[ROW][COL], int row, int col);void computermove(char board[ROW][COL], int row, int col);char iswin(char board[ROW][COL], int row, int col);
游戏 Game.c 各种函数的实现
初始化棋盘
void Initboard(char board[ROW][COL], int row, int col) { int i = 0; int j = 0; for (i = 0; i < row; i++) { for (j = 0; j < col; j++) { board[i][j] = ' '; } }} 打印棋盘
void Displayboard(char board[ROW][COL], int row, int col) { int i = 0; for (i = 0; i < row; i++) { // 打印棋盘的一行 int j = 0; for (j = 0; j < col; j++) { printf(" %c ", board[i][j]); if (j < col - 1) { printf("|"); } } printf("\n"); // 打印分割行 if (i < row - 1) { for (j = 0; j < col; j++) { printf("---"); if (j < col - 1) { printf("|"); } } printf("\n"); } }} 玩家走
void Playermove(char board[ROW][COL], int row, int col) { int x = 0; int y = 0; printf("玩家走:"); while (1) { printf("请输入要下的坐标"); scanf("%d%d", &x, &y); // 检查坐标是否合法 if (x >= 1 && x < row && y >= 1 && y < col) { if (board[x-1][y-1] == ' ') { board[x-1][y-1] = '*'; break; } else { printf("该坐标被占用"); } } else { printf("坐标输入非法,请重新输入!\n"); } }} 电脑走
void computermove(char board[ROW][COL], int row, int col) { int x = 0; int y = 0; printf("电脑走:\n"); while (1) { x = rand() % row; y = rand() % col; if (board[x][y] == ' ') { board[x][y] = '#'; break; } }} 游戏状态判断
char iswin(char board[ROW][COL], int row, int col) { // 检查行 for (int i = 0; i < row; i++) { if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][1] != ' ') { return board[i][1]; } } // 检查列 for (int i = 0; i < col; i++) { if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[1][i] != ' ') { return board[1][i]; } } // 检查对角线 if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[1][1] != ' ') { return board[1][1]; } if (board[2][0] == board[1][1] && board[1][1] == board[0][2] && board[1][1] != ' ') { return board[1][1]; } // 检查平局 if (isfull(board, row, col) == 1) { return 'Q'; } return 'C';}// 棋盘是否满int isfull(char board[ROW][COL], int row, int col) { for (int i = 0; i < row; i++) { for (int j = 0; j < col; j++) { if (board[i][j] == ' ') { return 0; } } } return 1;} 游戏画面
转载地址:http://kol.baihongyu.com/