C语言第十课----------------扫雷----------数组的经典练手题
作者前言
🎂 ✨✨✨✨✨✨🍧🍧🍧🍧🍧🍧🍧🎂
🎂 作者介绍: 🎂🎂
🎂 🎉🎉🎉🎉🎉🎉🎉 🎂
🎂作者id:老秦包你会, 🎂
简单介绍:🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂
喜欢学习C语言和python等编程语言,是一位爱分享的博主,有兴趣的小可爱可以来互讨 🎂🎂🎂🎂🎂🎂🎂🎂
🎂🎂🎂🎂🎂🎂🎂🎂
🎂 一个爱分享的小博主 欢迎小可爱们前来借鉴🎂_______________________________________________________
______________________________________________________________________
目录
扫雷
分析
代码
——————————————————————————————————————
扫雷
如上图,玩扫雷的原理就是避开雷找出所有的雷就胜利,废话不多说,我们直接开始扫雷分析
分析
俗话说的好,玩游戏第一步进入游戏,我们就写出一个游戏菜单出来,让玩家选择
-
void meun()
-
{
-
printf("********* 扫雷 ********\n");
-
printf("************************************\n");
-
printf("********* 0.exit ********\n");
-
printf("********* 1.paly ********\n");
-
printf("************************************\n");
-
-
-
}
下面我们要写一个框架,选择玩或者不玩,
-
int input;
-
srand((unsigned)time(NULL));
-
do
-
{
-
meun();
-
printf("进入扫雷界面,请选择>");
-
scanf("%d", &input);
-
switch (input)
-
{
-
case 0:
-
printf("退出游戏\n");
-
break;
-
case 1:
-
printf("开始游戏\n");
-
game();
-
break;
-
default :
-
printf("输入不符合规定,请重新输入\n");
-
break;
-
-
}
下面我们就要开始写扫雷的内容了,首先扫雷我们要给出扫雷的游戏画面,在这个过程中我们可以创建两个数组,一个用于计算,一个用于显示
左边是计算,右边是显示 然后我们就要设计一下输出的界面,要玩家有好的体验
-
void initialization(char mine[ROWS][COLS], int rows, int cols, char str)
-
{
-
int i = 0;
-
for (i = 0; i < rows; i )
-
{
-
int j = 0;
-
for (j = 0; j < cols; j )
-
{
-
-
mine[i][j] = str;
-
}
-
}
-
-
-
}
-
void Carving(char mine[ROWS][COLS], int row, int col)
-
{
-
-
int i = 0;
-
for (i = 0; i <= row; i )
-
{
-
printf("%d ", i);
-
}
-
printf("\n");
-
printf("--------------------\n");
-
for (i = 1; i <= row; i )
-
{
-
printf("%d|", i);
-
int j = 0;
-
for (j = 1; j <= col; j )
-
{
-
-
printf("%c ", mine[i][j]);
-
}
-
printf("\n");
-
}
-
}
然后我们就要布置雷了,雷的设计要随机可以使用rand(),记得设计出源点srand((unsigned)time(NULL))
代码如下:
-
void Production(char mine[ROWS][COLS], int row, int col)
-
{
-
int count = Count;
-
while (count)
-
{
-
int x = ((rand() % (row)) 1);
-
int y = ((rand() % (col)) 1);
-
-
if (mine[x][y] == '0')
-
{
-
mine[x][y] = '1';
-
count--;
-
}
-
}
-
}
下面我们就要模拟玩家扫雷了,玩家扫雷要输入坐标, 然后判断是否踩到雷或者已经排查过了,如果没有就要统计周边雷的个数,然后反馈给显示数组,最后判断是否排除完全部雷了,
-
void paly_mine(char mine[ROWS][COLS], char show_mine[ROWS][COLS], int row, int col)
-
{
-
int count = 0;
-
int x = 0;
-
int y = 0;
-
while (1)
-
{
-
printf("请玩家输入坐标:>");
-
scanf("%d %d", &x, &y);
-
if (x >= 1 && x <= 9 && y >= 1 && y <= 9)
-
{
-
if (mine[x][y] == '0')
-
{
-
mine[x][y] = ' ';
-
count ;
-
//统计周边的雷数
-
int sum = 0;
-
int i = x - 1;
-
for (i = x - 1; i <= x 1; i )
-
{
-
int j = y - 1;
-
for (j = y - 1; j <= y 1; j )
-
{
-
if (i != x && j != y)
-
sum = sum (mine[i][j] - '0');
-
}
-
}
-
show_mine[x][y] = '0' sum;
-
printf("扫雷情况:\n");
-
Carving(show_mine, ROW, COL);
-
printf("\n");
-
if (count == (row * col) - Count)
-
{
-
printf("你胜利了\n");
-
goto aa;
-
-
-
}
-
}
-
else if (mine[x][y] == '1')
-
{
-
printf("你被炸死了,游戏结束\n");
-
break;
-
}
-
-
}
-
else
-
{
-
printf("请重新输入,你输入的不符合规定\n");
-
}
-
}
-
aa:
-
;
-
-
}
下面是全部代码:
扫雷.c
-
-
void meun()
-
{
-
printf("********* 扫雷 ********\n");
-
printf("************************************\n");
-
printf("********* 0.exit ********\n");
-
printf("********* 1.paly ********\n");
-
printf("************************************\n");
-
-
-
}
-
int main()
-
{
-
int input;
-
srand((unsigned)time(NULL));
-
do
-
{
-
meun();
-
printf("进入扫雷界面,请选择>");
-
scanf("%d", &input);
-
switch (input)
-
{
-
case 0:
-
printf("退出游戏\n");
-
break;
-
case 1:
-
printf("开始游戏\n");
-
game();
-
break;
-
default :
-
printf("输入不符合规定,请重新输入\n");
-
break;
-
-
}
-
-
-
} while (input);
-
-
-
-
-
-
return 0;
-
}
扫雷函数.c
-
-
void game()
-
{
-
char mine[ROWS][COLS];
-
char show_mine[ROWS][COLS];
-
//数组初始化
-
initialization(mine, ROWS, COLS, '0');
-
initialization(show_mine, ROWS, COLS, '*');
-
-
//布置雷
-
Production(mine, ROW, COL);
-
-
//雕刻扫雷棋盘
-
Carving(mine, ROW, COL);
-
printf("\n");
-
Carving(show_mine, ROW, COL);
-
-
//玩家扫雷
-
paly_mine(mine, show_mine, ROW, COL);
-
/*printf("%p", &mine);
-
printf("%p", &show_mine);*/
-
-
}
-
-
void initialization(char mine[ROWS][COLS], int rows, int cols, char str)
-
{
-
int i = 0;
-
for (i = 0; i < rows; i )
-
{
-
int j = 0;
-
for (j = 0; j < cols; j )
-
{
-
-
mine[i][j] = str;
-
}
-
}
-
-
-
}
-
-
void Carving(char mine[ROWS][COLS], int row, int col)
-
{
-
-
int i = 0;
-
for (i = 0; i <= row; i )
-
{
-
printf("%d ", i);
-
}
-
printf("\n");
-
printf("--------------------\n");
-
for (i = 1; i <= row; i )
-
{
-
printf("%d|", i);
-
int j = 0;
-
for (j = 1; j <= col; j )
-
{
-
-
printf("%c ", mine[i][j]);
-
}
-
printf("\n");
-
}
-
}
-
//布置雷
-
void Production(char mine[ROWS][COLS], int row, int col)
-
{
-
int count = Count;
-
while (count)
-
{
-
int x = ((rand() % (row)) 1);
-
int y = ((rand() % (col)) 1);
-
-
if (mine[x][y] == '0')
-
{
-
mine[x][y] = '1';
-
count--;
-
}
-
}
-
}
-
-
//玩家扫雷
-
void paly_mine(char mine[ROWS][COLS], char show_mine[ROWS][COLS], int row, int col)
-
{
-
int count = 0;
-
int x = 0;
-
int y = 0;
-
while (1)
-
{
-
printf("请玩家输入坐标:>");
-
scanf("%d %d", &x, &y);
-
if (x >= 1 && x <= 9 && y >= 1 && y <= 9)
-
{
-
if (mine[x][y] == '0')
-
{
-
mine[x][y] = ' ';
-
count ;
-
//统计周边的雷数
-
int sum = 0;
-
int i = x - 1;
-
for (i = x - 1; i <= x 1; i )
-
{
-
int j = y - 1;
-
for (j = y - 1; j <= y 1; j )
-
{
-
if (i != x && j != y)
-
sum = sum (mine[i][j] - '0');
-
}
-
}
-
show_mine[x][y] = '0' sum;
-
printf("扫雷情况:\n");
-
Carving(show_mine, ROW, COL);
-
printf("\n");
-
if (count == (row * col) - Count)
-
{
-
printf("你胜利了\n");
-
goto aa;
-
-
-
}
-
}
-
else if (mine[x][y] == '1')
-
{
-
printf("你被炸死了,游戏结束\n");
-
break;
-
}
-
-
}
-
else
-
{
-
printf("请重新输入,你输入的不符合规定\n");
-
}
-
}
-
aa:
-
;
-
-
}
扫雷.h
-
-
-
-
-
-
-
-
-
-
//
-
void game(void);
-
//初始化
-
void initialization(char mine[ROWS][COLS], int row, int col, char str);
-
//打印棋盘
-
void Carving(char mine[ROWS][COLS], int row, int col);
-
//布置雷
-
void Production(char mine[ROWS][COLS], int row, int col);
-
//玩家扫雷
-
vo
总结:
扫雷代码就在这里了,这个代码还可以进一步改进,但是由于时间原因,其他功能没写,有不懂的小可啊可以私聊我
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhggfkig
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13