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<COL-1) { printf("|"); } } printf("\n"); for (int j = 0; j < ROW&&i<ROW-1; j++) { printf("----"); } printf("\n"); } }
实现了棋盘的初始化,中间的空白就是我们初始化的棋子‘ ’编辑
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; } }