跟上次的三子棋一样,我们需要game.c,game.h还有test.c。
game.c用来实现游戏功能
test.c是主体
game.h放入各种声明和宏定义
这是部分演示
二,菜单及其功能实现菜单很简单,输入1就是玩游戏,0就是退出游戏。因为考虑到玩家玩完一局还想玩一局,还有1,0这样的选择。我们使用while和Switch结合实现。
三,游戏实现 3.1数组创建及其初始化首先创建两个数组,mine数组存放布置的雷,第二个show数组用来展示给玩家。mine数组初始化为‘0’,雷为‘1’,show数组初始化为‘*’。因为我们需要的是9*9的扫雷游戏,但是我在数雷的个数时需要把坐标的周围都得数一遍,因此当坐标在临边的时候,如果数组为9*9的,扫描一周的话就会数组越界,因此需要把棋盘+2。方便雷的计数。而初始化就只需要用for循环就可以了。
3.2棋盘的实现
定义一个DISboard()函数用于打印棋盘。本质就是直接打印上面的show数组。但是因为要输入坐标来扫雷,因此在两边用于看坐标的数字,方便玩家输入。
3.3雷的布置
雷的设置实际就是对于随机数的使用。只要随机的那个坐标没有被设置雷,就设置。而因为坐标对的范围是1~9。所以需要在rand()%row和rand()%col上+1。如果不加一的话就是0~8。我们这个设置10个雷,用while循环来设置。
3.4找雷找雷是输入坐标。因此有两种情况,一种输入坐标合法,一个非法。非法有越界和坐标已经找过雷了。然后判断是不是雷,不是雷后需要统计周围8个位置一共有几个雷,然后显示出来。如果是雷就直接game over。当把雷排完就胜利。
int getMineCount(char mine[ROWS][COLS], int x, int y)
{
return mine[x - 1][y - 1] + mine[x][y-1] + mine[x + 1][y - 1] + mine[x-1][y] + mine[x+1][y] + mine[x - 1][y + 1] + mine[x][y+1] + mine[x + 1][y + 1] - 8 * '0';
}
void findmine(char show[ROWS][COLS], char mine[ROWS][COLS], int row, int col)
{
int win = 0;
int x, y;
while (win < row * col - EASY_COUNT)
{
printf("请输入坐标:>\n");
scanf("%d %d", &x, &y);
if (x >= 1 && x <= 9 && y >= 1 && y <= 9)
{
if (show[x][y] != '*')
{
printf("坐标已经被排查过了,请重新输入!\n");
}
else
{
if (mine[x][y] == '1')
{
printf("对不起你被炸死了!\n");
Disboard(mine, ROW, COL);
break;
}
else
{
win++;
int count = getMineCount(mine, x, y);
show[x][y] =count+'0';
Disboard(show, ROW, COL);
}
}
}
else
{
printf("坐标非法,请重新输入!\n");
break;
}
}
if (win == row * col - EASY_COUNT)
{
printf("恭喜你,你成功了!\n");
Disboard(mine, ROW, COL);
}
}
四,总结。
这就是扫雷代码,我的代码写的一般,并且解说也只是粗略的说一下大概。如果有哪错误,请谅解。感谢浏览。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)