一 . 游戏开发框架
- 建立游戏菜单
- 建立扫雷的棋盘
- 初始化棋盘
- 布置雷
- 排雷(判断是否踩雷)
- 游戏结束
二 . 游戏开发及细节详解
1.建立游戏菜单
首先,我们需要创建一个项目,添加一个头文件和两个源文件
test.c------------------------用于游戏的主体框架设计和扫雷游戏的逻辑测试
game.h----------------------用于相应函数的声明
game.c----------------------用于游戏函数的实现
游戏菜单的打印实现,上期分享的三子棋游戏已经声明过了,直接套用上次的代码就好了,代码块如下:
voidmenu() { printf("-------------------------\n"); printf("---------1.paly----------\n"); printf("---------0.exit----------\n"); printf("-------------------------\n"); } voidgame() { printf("开始游戏\n"); } intmain() { intinput=0; do { menu(); printf("请选择:"); scanf("%d", &input); switch (input) { case1: game(); break; case0: printf("退出游戏:\n"); break; default: printf("选择错误,重新选择:\n"); break; } } while (input); return0; }
实现如下:
到这里,准备工作的游戏菜单打印部分就完成了。
2.建立扫雷的棋盘
关于游戏的规则这里就不多介绍了,参考下面的链接:https://jingyan.baidu.com/article/7f766daf9231e84101e1d03d.html、
关于棋盘的打印,我们需要二维数组来定义,但是为了防止数组越界问题,我们适当扩大数组的大小,在定义棋盘的时候有雷的地方用 ‘ 1 ’表示,没有雷的地方用 ‘ 0 ’表示;
接下来要考虑扫雷的细节问题:
创建一个mine数组和一个show数组:
game.h
test.c
//设计2个数组存放信息charmine[ROWS][COLS] = { 0 }; charshow[ROWS][COLS] = { 0 };
两个数组已经创建好了,接下来我们要初始化棋盘并打印棋盘
3.初始化棋盘
mine数组初始化用 ‘ 0 ’表示
show数组初始化用 ‘ * ’表示
test.c
voidgame() { //设计2个数组存放信息charmine[ROWS][COLS] = { 0 }; charshow[ROWS][COLS] = { 0 }; //初始化棋盘init_board(mine, ROWS, COLS,'0'); init_board(show, ROWS, COLS,'*'); //打印棋盘display_board(mine, ROW, COL); display_board(show, ROW, COL); }
game.c
voidinit_board(charboard[ROWS][COLS], introws, intcols, charset) { inti=0; intj=0; for (i=0; i<rows; i++) { for (j=0; j<cols; j++) { board[i][j] =set; } } } voiddisplay_board(charboard[ROWS][COLS], introw, intcol) { inti=0; intj=0; for (i=1; i<=row; i++) { for (j=1; j<=col; j++) { printf("%c ", board[i][j]); } printf("\n"); } }
game.h
//初期化棋盘voidinit_board(charboard[ROWS][COLS], introws, intcols,charset); //打印棋盘voiddisplay_board(charboard[ROWS][COLS], introw, intcol);
棋盘的打印如下:
由上图可以看到,打印的棋盘对玩家不太友好,我们可以在棋盘上面加上行列标号,以便于玩家在进行游戏的时候输入坐标,只需改变game.c的代码即可:
voiddisplay_board(charboard[ROWS][COLS], introw, intcol) { inti=0; intj=0; for (j=0; j<=col; j++) { printf("%d ", j);//打印列号 } printf("\n"); for (i=1; i<=row; i++) { printf("%d ", i);//打印行号for (j=1; j<=col; j++) { printf("%c ", board[i][j]); } printf("\n"); } }
实现如下: