- 一 、前言
- 二、三子棋
- 2.1 大体构想过程
- 1.进入游戏
- 2.选择开始游戏
- 3.选择退出游戏
- 2.2具体代码实现
- 1.棋盘初始化函数
- 2.棋盘打印函数
- 3.棋盘检查函数
- 4.玩家下棋函数
- 5.电脑端下棋函数
- 6.判断输赢函数
- 三、有感
- 四、代码链接
本次的游戏基于二维数组,使用二维数组实现棋盘内棋子信息的存储。游戏界面如下:
游戏实现代码附在文末~
首先在测试文档中构想出大体框架:
int cho = 0; //记录用户的选择 do{ menu(); scanf("%d",&cho); switch (cho){ case 0:break; //退出游戏 case 1:game();break; //开始游戏 default:printf("wrong! please scanf again");break; } }while(cho);
首先打印游戏菜单,然后根据玩家的选择进入相应函数。
2.选择开始游戏选择开始游戏后的流程构想我是一步一步完善的:
- 首先想到要在游戏开始前为玩家打印一下棋盘,于是编写了pri_chess() 棋盘打印函数
- 后来在打印的时候发现需要对棋盘数组进行初始化,于是编写了init_chess() 棋盘初始化函数
- 打印完棋盘后就开始下棋啦,在这里设置的是玩家先手,所以首先编写了peo_do() 玩家下棋函数。随后编写了com_do() 电脑端下棋函数。
- 在下棋的过程中要判断棋盘是否下满了,所以编写了check_chess() 棋盘检查函数
- 最后,下棋的时候肯定要判断输赢啦,所以编写了win_chess() 判断输赢函数
直接break 结束函数运行。
2.2具体代码实现以上就是整个项目实现的流程了,下面看具体的函数实现叭~
1.棋盘初始化函数void init_chess(char arr[ROW][COL],char c,int row,int col) { //在这个函数中传入字符c,可以在调用时自己选择初始化数组内容 int i = 0,j = 0; for(i=0;i2.棋盘打印函数
void pri_chess(char arr[ROW][COL],int row,int col) { int i = 0,j = 0,k = 0; for(i=0;i3.棋盘检查函数
int check_chess(char arr[ROW][COL],int row,int col) {//检查是否下满 int i = 0,j = 0; for(i=0;i4.玩家下棋函数
void peo_do(char arr[ROW][COL],int row,int col) { int i = 0,j = 0; do{ printf("请输入落子行列->"); scanf("%d %d",&i,&j); if(i > row | j > col|arr[i-1][j-1] != ' ') printf("wrong!n"); }while(i > row | j > col); arr[i-1][j-1] = '*'; }5.电脑端下棋函数void com_do(char arr[ROW][COL],int row,int col) { int i = rand()%row; int j = rand()%col; while(arr[i][j] != ' ') { i = rand()%row; j = rand()%col; } arr[i][j] = '#'; }6.判断输赢函数int win_chess(char arr[ROW][COL],int row,int col) { int i = 0,j = 0; //判断每行是否相等 for(i=0;i三、有感0;i++,j--) { if(arr[i][j] != arr[i+1][j-1]) break; if(arr[i][j] != ' '&i==row-2) return (int)arr[i][j]; } return 0; }
今天尝试编写了三子棋(井字棋),后来又对其进行了扩展,实现了n子棋。
在这次练习中进一步了解了
- #define 用法的印象~
- 随机函数 srand() 的使用
- 二维数组的使用
该游戏的实现还存在以下不足:
四、代码链接
- 游戏界面简陋
- 电脑端下棋的算法粗糙,有待改进
码云仓库链接~
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)