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子棋对弈,但是不太好玩)
这里写的希望大家可以理解,如果有不懂或者有错误的地方,请大伙留言评论或者私信!!!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)