- 一 、前言
- 二、三子棋
- 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;i
2.棋盘打印函数
void pri_chess(char arr[ROW][COL],int row,int col)
{
int i = 0,j = 0,k = 0;
for(i=0;i
3.棋盘检查函数
int check_chess(char arr[ROW][COL],int row,int col)
{//检查是否下满
int i = 0,j = 0;
for(i=0;i
4.玩家下棋函数
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;i0;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() 的使用
- 二维数组的使用
该游戏的实现还存在以下不足:
- 游戏界面简陋
- 电脑端下棋的算法粗糙,有待改进
四、代码链接
码云仓库链接~



