今天和大家分享用C语言简单实现三子棋游戏的思路和代码实现。
目录:
一.思想
二.代码实现
1.主函数模板
2.菜单函数
3.思考游戏逻辑
4.棋盘实现
5.玩家下棋
6.电脑下棋
7.判断输赢
8.组合模块
9.细节提及
一.首先讲讲大致思路,对于相对复杂一些的项目,通常采用拆分思想,先理出大方向的模块,再将细节拆分,最后组合。
二.接下来是代码实现和详细思路
1.主函数模板
int main()
{
int input;
do
{
menu();//菜单界面
printf("请选择:>");
scanf("%d", &input);
switch (input)//多项选择选用switch语句
{
case 1:
game();//进入游戏(游戏函数)
break;
case 0:
printf("退出游戏!");
break;
default:
printf("选择错误,请重新选择!");
break;
}
} while (input);
}
do-while语句十分适合这种类似的游戏板块,先执行一次,再进行判断。
2.菜单函数如下(简单打印)
3.思考游戏逻辑
三子棋又叫井字棋,如上图,我们需要在空格中填充棋子,根据已有的知识,我们可以用二维数组来实现空格及井字格的实现。
棋盘就位,接下来是下棋板块。由于是简单三子棋,我们就实现玩家与电脑对位。
玩家:选择位置下子
电脑:选择位置下子
最后判断输赢
大致逻辑如上。
4.棋盘实现
首先是棋盘的实现(或者说二维数组的初始化及展示),空格及井字打印。具体按照一行一行打印,需要注意的是ROW(行)和COL(列),在代码量较多时,使用define定义标识符常量(#define ROW 3),代码如下:
5.玩家下棋
下棋本质来说是对二维数组的赋值,
大方向没问题,接下来就是细节的实现,关键判断是否能下子,再进行赋值,以下为代码:
6.电脑下棋
对于电脑落子,我们选择简单的随机数生成实现--rand()等,可参考
https://cplusplus.com/,这个网站可以查看各类函数的具体解释,代码如下:
7.判断输赢
具体有玩家赢,电脑赢,平局。输赢的判断很简单,三子相连,一一判断即可,重点是平局的判定。
输赢判断,代码如下:
接下来是平局判断,关键是平局条件--下满棋子,代码如下:
8.组合模块
组合模块主要是游戏逻辑的实现,也就是怎样完成一局游戏,代码如下:
void game()
{
char ret = 0;
char board[ROW][COL];
//开始的时候,数组的内容应该是全部空格
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");
}
}
9.细节提及
关于函数返回值,我们对整体分析完后,发现函数返回值如“*”,“#”等都是刻意设计的,为了方便逻辑清晰和代码优化,我们平常处理时,也可以注意一下。