目录
1.成品展示
1.1 菜单

1.2 退出

1.3 开始游戏

1.4 当排查位置无雷

1.5 排查位置有雷

1.6 坐标越界

1.7 赢得游戏

2. 提示:内外棋盘图

3. 扫雷代码及注释
3.1 头文件
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define ROW 9//设置棋盘的行数
#define COL 9//设置棋盘的列数
#define ROWS ROW + 2//内棋盘行数
#define COLS COL + 2//内棋盘列数
#define COUNT 10//雷的个数
//函数声明
void initboard(char arr[ROWS][COLS], int rows, int cols, char falg);
void display(char board[ROWS][COLS], int row, int col);
void putmine(char mine[ROWS][COLS], int row,int col, int count);
void findmine(char board[ROWS][COLS], char mine[ROWS][COLS], int rows, int cols, int row, int col);
3.2 游戏运行逻辑
#include "game.h"
void menu()//菜单
{
printf("***************************\n");
printf("********* 扫雷游戏 ********\n");
printf("********* 1.play ********\n");
printf("********* 0.exit ********\n");
printf("***************************\n");
printf("请选择:>");
}
void game()//游戏运行逻辑
{
printf("\n******扫雷********\n");
char board[ROWS][COLS] = { 0 };//初始化内棋盘
char mine[ROWS][COLS] = { 0 };//初始化内雷棋盘
initboard(board, ROWS, COLS, '*');//放置内棋盘
initboard(mine, ROWS, COLS, '0');//放置内雷棋盘
putmine(mine, ROW, COL,COUNT);//放置雷
display(mine, ROW, COL);//展示外棋盘
findmine(board, mine, ROWS, COLS, ROW, COL);//扫雷逻辑
display(mine, ROW, COL);//展示外雷棋盘
}
int main()
{
srand((unsigned int)time(NULL));//设计随机种子
int input = 0;
do
{
menu();//打印菜单
scanf("%d", &input);//接收玩家选择
switch (input)
{
case 1://开始
game();
break;
case 0://退出
printf("退出");
break;
default://无效输入
printf("输入错误,请重新输入\n");
break;
}
} while (input);
return 0;
}
3.3 功能实现
#include "game.h"
void minecount(char mine[ROWS][COLS],char board[ROWS][COLS],int x,int y)//统计雷的个数
{
char count = 0;
int i = 0;
for (i = x - 1; i <= x + 1; i++)
{
int j = 0;
for (j = y - 1; j <= y + 1; j++)
{
count += mine[i][j] - '0';
}
}
board[x][y] = count + '0';//显示输入坐标周围雷的个数
}
void initboard(char arr[ROWS][COLS], int rows, int cols, char falg)//放置符号
{
int i = 0;
for (i = 0; i < rows; i++)
{
int j = 0;
for (j = 0; j < cols; j++)
{
arr[i][j] = falg;
}
}
}
void display(char board[ROWS][COLS], int row, int col)//打印外棋盘
{
int i = 0;
for (i = 0; i < col; i++)//打印行下标
{
printf("%d ", i);
}
printf("\n");
for (i = 1; i < row; i++)
{
printf("%d ", i);//打印列下标
int j = 0;
for (j = 1; j < col; j++)
{
printf("%c ", board[i][j]);
}
printf("\n");
}
printf("\n");
}
void putmine(char mine[ROWS][COLS], int row, int col, int count)//设置雷
{
int x = 0;
int y = 0;
while (count)
{
x = rand() % row + 1;//设置随机值
y = rand() % col + 1;//设置随机值
if (mine[x][y] == '0')//当随机坐标处为0
{
mine[x][y] = '1';
count--;
}
}
}
void findmine(char board[ROWS][COLS], char mine[ROWS][COLS], int rows, int cols, int row, int col)
{
int win = 0;
int x = 0;
int y = 0;
win = row * col - COUNT;//计算外棋盘无雷区数,作为赢得游戏判定
while (win)
{
display(board, ROW, COL);//展示外棋盘
printf("请输入你要排查的坐标\n");
scanf("%d %d", &x, &y);
if ((0 > x || x > row) || (0 > y || y > col))//当坐标超出外棋盘
{
printf("输入错误,(x,y)是有范围的\n");
}
else//当坐标在内棋盘
{
if (board[x][y] != '*')//当排查外棋盘不为*
{
printf("该位置你已经排查过了,请重新输入\n");
}
else//为*
{
if (mine[x][y] == '1')//当排查内棋盘为1(雷)
{
printf("你被炸死了,游戏结束\n");
break;
}
else//不为1
{
minecount(mine,board,x,y);//统计周围雷的个数
win--;
}
}
}
}
if (win == 0)//赢得游戏
{
printf("恭喜你,扫雷成功\n");
}
}
4. 结束语
扫雷代码就到这里,如有错误和疑问请在评论区留言,感谢!!!
下一篇我将从零开始介绍扫雷游戏及代码实现。
8486

被折叠的 条评论
为什么被折叠?



