C语言要想学好还是要多学多练多实践,在接下来我也会不断更新这一类小白游戏!
《三子棋》这里是小300行的代码,可以培养代码思想
代码我放在Gitee:1_21/三子棋 · 404NOt/homework - 码云 - 开源中国 (gitee.com)
Github:homework/1_21/三子棋 at main · N404NOt/homework (github.com)
下面我将给各位学者一步步分析代码(本人使用的是vs2019如有需要私信我)
这是本项目的运行结果!
首先:
我们遵从高内聚低耦合的理念,创建代码实现文件和运行文件及头文件,这样也方便理解代码运行逻辑
---------------------------------------------------
项目内容:
1.界面实现
2.棋盘的初始化;
3.棋子移动(玩家,电脑)(循环)
4.判断游戏结果(循环)
5.完善以及运行
----------------------------------------------------
1.界面实现:
效果:
先不要看初始化的值,这里最好把界面写个menu()函数出去,这样更简洁;我们剩下要做的就是往里面填补东西了,这相当于前台。
2.棋盘的初始化
遵循高内聚低耦合我把函数写在game.h中,在game.c(cpp)中实现
void InitBoard(char chess[][COL])
{
for (int i = 0; i < ROW; i++)
{
for (int j = 0; j < COL; j++)
{
chess[i][j] = ' ';
}
}
}
用InitBoard函数初始化我们每一个棋子为‘ ’,方便我们棋盘的展示以及输入。
紧接着就是棋盘的框架展示了,game.h中写这个函数,同样在game.c中实现
void DisplayBoard(char chess[ROW][COL])
{
for (int i = 0; i < ROW; i++)
{
for (int j = 0; j < COL; j++)
{
printf(" %c ", chess[i][j]);
if (i < COL&&j
3.这就是我们的关键一步了,棋子的移动废话不多说先上代码
void Playermove(char chess[ROW][COL],int row,int col)
{flag:
scanf("%d %d", &row, &col);
if (row > 0 && row <= ROW && col > 0 && col <= COL)
{
if (chess[row-1][col-1] == ' ')
{
chess[row-1][col-1] = 'x';
}
else
{
printf("输入错误,请重新输入:");
goto flag;
}
}
else
{
printf("输入错误,请重新输入:");
goto flag;
}
printf("\n");
}
void Computermove(char chess[ROW][COL])
{
printf("\n");
srand((unsigned int)time(NULL));
flag2:
int row = rand() % ROW + 1;
int col = rand() % COL + 1;
if (chess[row-1][col-1] == ' ')
{
chess[row - 1][col - 1] = 'o';
}
else
{
goto flag2;
}
}
在这里我分成了玩家移动以及电脑移动,在设计时你要知道你面向的不是程序员玩这个游戏而是玩家,所以他们不知道是从0,1,2,3排列的,所以你就需要在他们输入的棋子坐标上减一,来进行下一步操作,而且我们下棋子要在‘ ’处下,而不能下重复,或者越界,所以我是这么处理的
电脑下棋逻辑一样。
4.判断输赢,这里我是绕糊涂了,需要仔细思考,比如我在对角判断那就卡了半小时(谁还不是个小白了)
char udge(char chess[ROW][COL])
{
//胜利行
int password = 0;
for (int row = 0; row < ROW; row++)
{
password = 0;
for (int col = 1; col
在对角一定要多思考
在主函数中对应写入
do
{
DisplayBoard(chess);
printf("请输入你要下的坐标>");
Playermove(chess,row,col);
judge=udge(chess);
if (judge == 'x')
{
printf("<<<玩家胜利>>>");
printf("\n");
DisplayBoard(chess);
system("pause");
break;
}
if (judge == 'H')
{
printf("<<<和局>>>");
printf("\n");
DisplayBoard(chess);
system("pause");
break;
}
printf("\n");
printf("电脑操作>");
Computermove(chess);
judge = udge(chess);
if (judge == 'o')
{
printf("<<<电脑胜利>>>");
printf("\n");
DisplayBoard(chess);
system("pause");
break;
}
if (judge == 'H')
{
printf("<<<和局>>>");
printf("\n");
DisplayBoard(chess);
system("pause");
break;
}
} while (ct);
下面我们要做的就是剪线头的事情了,剪完运行;(这里把全局变量值改变理论上可以进行N子棋对弈,但是不太好玩)
这里写的希望大家可以理解,如果有不懂或者有错误的地方,请大伙留言评论或者私信!!!