C语言扫雷函数成绩,扫雷(C语言)

本文详细介绍了扫雷游戏的规则和代码实现过程。首先,游戏规则包括9x9的棋盘,10颗雷,玩家需要通过点击来逐步揭示非雷区域,并显示周围雷的数量。当所有非雷区域被揭示且未触雷时,玩家获胜。其次,代码分析部分展示了游戏菜单、初始化、打印、设置雷以及计算周围雷数的函数。最后,给出了游戏的完整流程和结束条件。
摘要由CSDN通过智能技术生成

一,游戏规则

1.输入9*9的格的坐标(*显示其坐标未被选择过)(共有10颗雷)

6d5b4edaad8595810d8a2a46f30dc3c6.png

2.如果是雷,游戏结束

3.如果不是,将显示所点击的位置相邻八个位置有几颗雷

f6418ae00d0c496d97e92f235adcd3ba.png

4.若除了雷位未选后,玩家胜利

例:(有80颗雷)

-------------------------------

-------------------------------

----1.play 0.exit--------

-------------------------------

-------------------------------

请输入(0/1):3

输入错误,请重新输入

-------------------------------

-------------------------------

----1.play 0.exit--------

-------------------------------

-------------------------------

请输入(0/1):1

扫雷游戏开始

0 1 2 3 4 5 6 7 8 9

1 * * * * * * * * *

2 * * * * * * * * *

3 * * * * * * * * *

4 * * * * * * * * *

5 * * * * * * * * *

6 * * * * * * * * *

7 * * * * * * * * *

8 * * * * * * * * *

9 * * * * * * * * *

//有雷的为1

0 1 2 3 4 5 6 7 8 9

1 1 1 1 1 1 1 1 1 1

2 1 1 1 1 1 1 1 1 1

3 1 1 1 1 1 1 1 1 1

4 1 1 1 1 1 1 1 1 1

5 1 1 1 1 1 1 1 1 1

6 1 1 1 1 1 1 1 1 1

7 1 1 1 1 1 1 1 1 1

8 1 1 1 1 1 1 1 1 1

9 1 1 1 1 1 1 1 1 0

请输入坐标(行 列):9 9

0 1 2 3 4 5 6 7 8 9

1 1 1 1 1 1 1 1 1 1

2 1 1 1 1 1 1 1 1 1

3 1 1 1 1 1 1 1 1 1

4 1 1 1 1 1 1 1 1 1

5 1 1 1 1 1 1 1 1 1

6 1 1 1 1 1 1 1 1 1

7 1 1 1 1 1 1 1 1 1

8 1 1 1 1 1 1 1 1 1

9 1 1 1 1 1 1 1 1 0

恭喜你游戏成功

-------------------------------

-------------------------------

----1.play 0.exit--------

-------------------------------

-------------------------------

请输入(0/1):1

扫雷游戏开始

0 1 2 3 4 5 6 7 8 9

1 * * * * * * * * *

2 * * * * * * * * *

3 * * * * * * * * *

4 * * * * * * * * *

5 * * * * * * * * *

6 * * * * * * * * *

7 * * * * * * * * *

8 * * * * * * * * *

9 * * * * * * * * *

0 1 2 3 4 5 6 7 8 9

1 1 1 1 1 1 1 1 1 1

2 1 1 1 1 1 1 1 1 1

3 1 1 1 1 1 1 0 1 1

4 1 1 1 1 1 1 1 1 1

5 1 1 1 1 1 1 1 1 1

6 1 1 1 1 1 1 1 1 1

7 1 1 1 1 1 1 1 1 1

8 1 1 1 1 1 1 1 1 1

9 1 1 1 1 1 1 1 1 1

请输入坐标(行 列):8 7

很遗憾,你被炸死了,游戏结束

0 1 2 3 4 5 6 7 8 9

1 1 1 1 1 1 1 1 1 1

2 1 1 1 1 1 1 1 1 1

3 1 1 1 1 1 1 0 1 1

4 1 1 1 1 1 1 1 1 1

5 1 1 1 1 1 1 1 1 1

6 1 1 1 1 1 1 1 1 1

7 1 1 1 1 1 1 1 1 1

8 1 1 1 1 1 1 1 1 1

9 1 1 1 1 1 1 1 1 1

-------------------------------

-------------------------------

----1.play 0.exit--------

-------------------------------

-------------------------------

请输入(0/1):0

退出游戏

二,游戏代码分析

1.设置游戏菜单,让玩家选择

输入1,游戏开始

输入0,游戏结束

输入其他值,提示输入错误,重新输入

void mnue()

{

printf("-------------------------------\n");

printf("-------------------------------\n");

printf("----1.play 0.exit--------\n");

printf("-------------------------------\n");

printf("-------------------------------\n");

}

void test()

{

int input = 0;

srand((unsigned int)time(NULL));

do

{

mnue();

printf("请输入(0/1):");

scanf("%d", &input);

switch (input)

{

case 1:

printf("游戏开始\n");

game();

break;

case 0:

printf("退出游戏\n");

break;

default:

printf("输入错误,请重新输入\n");

break;

}

} while (input);

}

int main()

{

test();

return 0;

}

游戏效果:

30b2b3b664233792b73038a0492fe89b.png

2.由于输入坐标后,如果没踩雷,要显示周围八个位置共有几颗雷,为了防止数组的溢出选用11*11的棋盘

9e098d7c67831d21f05790a81c47e9e2.png

将字符‘0’放入不是雷的位置中

将字符‘1’放入是雷的位置中

所以将创造两个数组

1.一个数组将存储雷的信息

2.另一个数组排查出的雷的信息

121f02eedab1b441cab0862a22c9744d.png

一个数组初始化为‘0’

cd0322a927d8404de94357bb83aada5c.png

一个数组初始化为‘*’

529ebf125f4ec676518df70a0598c9e9.png

函数的初始化

注意:设置一个变量用来接收初始化的结果,可以使不同的二维数组初始化为不同的值

void InitBoard(char board[ROWS][COLS], int row, int col, char set)

{

int i = 0;

for (i = 0; i < row; i++)

{

int j = 0;

for (j = 0; j < col; j++)

{

board[i][j] = set;

}

}

}

6e65ceed873e71353ba696d84c10cc33.png

3.函数的打印函数

注意打印的是9*9的棋盘

为了便于阅读,将坐标也打印了出来

void DisplayBoard(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");

}

}

4.随机布置10个雷

将有10个雷要布置

1d581d508140da252b0c3d28cac84692.png

将雷设为字符‘1’

b0445bd7f4a687fac463cea64053bc2c.png

一个数%9那么这个数在0到8之间

若再加一那么这个数将在1-9之间

void SetMine(char board[ROWS][COLS], int row, int col)

{

int x = 0;

int y = 0;

int count = EASY_COUNT;

while (count)

{

x = rand() % row + 1;//1-8+1//1-9

y = rand() % col + 1;//1-8+1//1-9

if (board[x][y] == '0')

{

board[x][y] = '1';

count--;

}

}

}

2504b0b5ac066abbe9e7115b0e54cf0f.png

5.扫雷

947010754f1a638a9d5c0cb339668eaf.png

字符3与字符0差数字3

计算周围8个(炸弹)数组元素为1的方法:

将8个字符元素相加-8个字符0得到的就是字符1的个数

因为返回值是int,所以需要加上字符0,转化为char

//'3'-'0'=3

//'4'-'0'=4

int get_mine_count(char mine[ROWS][COLS], int x, int y)

{

return mine[x - 1][y - 1] +

mine[x - 1][y] +

mine[x - 1][y + 1] +

mine[x][y - 1] +

mine[x][y + 1] +

mine[x + 1][y - 1] +

mine[x - 1][y] +

mine[x - 1][y + 1] - 8 * '0';

}

void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col)

{

printf("请输入坐标(行 列):");

int x = 0;

int y = 0;

scanf("%d%d", &x, &y);

int win = 0;//从0开始计数

while (win

{

//坐标合法

if (x > 1 && x <= row && y > 1 && y <= col)

{

if (mine[x][y] == '1')//踩雷

{

printf("很遗憾,你被炸死了,游戏结束\n");

DisplayBoard(mine, ROW, COL);

break;

}

else//计算周围八个位置的雷数

{

int count = get_mine_count(mine, x, y);

show[x][y] = count+'0';//存的是字符,返回值是int

DisplayBoard(mine, ROW, COL);

win++;

}

}

//坐标非法

else

printf("输入错误坐标,请重新输入:\n");

}

//两个情况

//1.break;

//2. win == col * row - EASY_COUNT

if (win == col * row - EASY_COUNT)

printf("恭喜你游戏成功\n");

}

三,用文件实现

f25bbb8ca3afaa39954695965669a29e.png

test.c源文件中的内容

调用函数时记得要引头文件(函数的声明一般放在相应的头文件中)

c096e6f7d38ece376933f753b8c0594b.png

菜单函数

40bd56b43664a112606b47da28e94c9e.png

游戏的流程控制

6d5aa0f103ad7ea2207083f2c2bbb47e.png

游戏的流程

7e2ac871a8b9846aed3a81cf90dae6fd.png

game.h头文件的内容

1.行,列

2.雷的个数

3.所用到的头文件

4.函数的声明

8e23a01fb9d26b2cbd00fefc5e544b55.png

game.c源文件中的内容

调用函数时记得要引头文件(函数的声明一般放在相应的头文件中)

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

函数的初始化

3dbc0ad2c4e88aa01a61cab725975c15.png

棋盘的打印

05b483197642cf0e3986ec029efa5057.png

雷设置的位置

b429f2c62a7d5d4d2311f45f2d1b74b6.png

周围8个位置中雷数的总和

681a41d34034f287522f559c98e2f299.png

扫雷流程

4d31bf57357a5dafcf071da579105b0a.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值