由于在备考研究生所以代码的学习并没有时间一一记录,还是尽量记下一些关键结点,文章虽写,但也只是类似提纲一样的记录。
人要么活在突破自己的不适和不安中,要么活在找借口回避挑战的不满中,我选择前者。虽然大学浪费了四年,还是早早地回来,怀着悔恨的心情重新开始!
一个三子棋小游戏的模拟设计(对手是随机下的人机)
步骤
1.创建三个文件
test.c 测试游戏功能的实现
game.c 用以编写相关的函数
game.h 用以声明相关的函数
2.打印目录(游戏初始选择界面)
采用do while循环使得至少有一次选择
选择1则调用game函数开始游戏,选择0则退出(switch实现,input为选择值)
while执行条件为选择的输入值,这样的0/1选择与计算机内部执行假/真选择一致
3.实现game函数
3.1 游戏平台搭建
二维数组初始化(initboard)
将棋盘打印成九宫格状(用横竖分割线分割出九个格子)
3.2 实现玩家下棋功能
3.3 实现电脑下棋功能
3.4 判断输赢
game.h #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <stdlib.h> #include <time.h> #define ROW 3 #define COL 3 //初始化棋盘 放入空格 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); //所有可能的游戏情况及其返回值 //玩家赢 - * //电脑赢 - # //平局 - Q //游戏继续 - C //判断棋盘是否满了 char IsFull(char board[ROW][COL], int row, int col);
game.c #include "game.h" void InitBoard(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++) { board[i][j] = ' '; } } } void DisplayBoard(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++) { 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) { printf("玩家的回合:>\n"); int x = 0; int y = 0; 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("坐标被占用,请重新输入\n"); } } else { printf("无效坐标,请重新输入\n"); } } } void ComputerMove(char board[ROW][COL], int row, int col) { printf("电脑的回合\n"); while (1) { int x = rand() % row + 1; int y = rand() % col + 1; //判断坐标是否被占用 if (board[x][y] == ' ') { board[x][y] = '#'; break; } } } char IsFull(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++) { if (board[i][j] == ' ') { return 0; } } } return 1; } char IsWin(char board[ROW][COL], int row, int col) { int i = 0; //判断三行是否非空格 for (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 (i = 0; i < row; i++) { if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[1][i] != ' ') { return board[1][i]; } } //判断对角线 for (i = 0; i < row; i++) { if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[1][1] != ' ') { return board[1][1]; } if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[1][1] != ' ') { return board[1][1]; } } //棋盘下满没有输赢则平局 //满了 - 1;没满 - 0 int ret = IsFull(board, row, col); if (ret == 1) { return 'Q'; } //不满足上述任何情况则继续 return 'C'; }
test.c #include "game.h" void menu() { printf("*******************\n"); printf("*****1. play*******\n"); printf("*****0. exit*******\n"); printf("*******************\n"); } void game() { //搭建游戏平台 数组的创建 char board[ROW][COL]; //初始化棋盘 放入空格 InitBoard(board, ROW, COL); //展示棋盘(用横竖线分出九个格子) DisplayBoard(board, ROW, COL); //游戏进程及状态 char ret = 0; 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"); } //展示此次博弈 DisplayBoard(board, ROW, COL); } int main() { int input = 0; srand((unsigned int)time(NULL)); do { menu(); printf("请选择:>\n"); scanf("%d", &input); switch (input) { case 0: printf("正在退出游戏\n"); break; case 1: game(); break; default: printf("输入值无效,请重新输入\n"); break; } } while (input); return 0; }
欢迎指正!
图片来源:http://www.hp91.cn/ h5游戏