制作扫雷(简易版)

制作扫雷(简易版)这篇博客将为大家带来一个 c 语言写的小程序 扫雷

大家好,欢迎来到IT知识分享网。

这篇博客将为大家带来一个c语言写的小程序——扫雷。

用到的知识——数组,函数。

快来围观呀!

目录

1.网页版扫雷

1.1本篇扫雷与网页版扫雷的区别

2.自制扫雷

2.1新建文件

 ​编辑

2.2代码编写

2.2.1 整体思路

2.2.1  test.c

2.2.2  game.c

2.2.3  game.h

2.3 程序运行 

 


 

1.网页版扫雷

c60c6cd832194112b8758bbd23e78077.png

游戏规则 :

1.扫雷就是要把所有非地雷的格子揭开即胜利;踩到地雷格子就算失败

2.游戏主区域由很多个方格组成。使用鼠标左键随机点击一个方格,方格即被打开并显示出方格中的数字;方格中数字则表示其周围的8个方格隐藏了几颗雷;如果点开的格子为空白格,即其周围有0颗雷,则其周围格子自动打开;

3.1代表1的上下左右及斜角合计有一颗雷,依次轮推,2则有2颗,3则有3颗。在确实是炸弹的方格上点了旗子,就安全了,不是炸弹的被点了旗子,后面会被炸死的。问号就三不确定这里有没有炸弹,不会存在点错了被炸死的状况

1.1本篇扫雷与网页版扫雷的区别

游戏规则相同,但目前没法实现无雷地区展开一片(该步骤可以用递归实现) 

本篇扫雷通过依次排查无雷坐标进行实现

2.自制扫雷

2.1新建文件

 b16f233616764ce8bbda959e2bcded86.png

分别在源文件和头文件下创建game.c,test.c,和game.h

 test.c:用于构建扫雷的整体框架结构

game.h:用于存放扫雷中出现的函数的声明,以及所要用到的头文件(简单来说是main函数头上那一堆)

game.c:用于编写扫雷用到的函数定义

有了这些文件可以使程序看起来思路更加清晰,不理解没关系可以接着往下看

2.2代码编写

2.2.1 整体思路

主体: 输出菜单让用户选择——>根据选择判断是否进入游戏——>游戏运行——>游戏结束

游戏运行:

1.生成两个数组,分别代表用户界面的图和内部地雷图(0代表无雷,1代表有雷)

2.用户界面数组初始化为*,内部地雷数组初始化为0

3.用随机数在内部地雷数组中放置雷“1”

4.输出用户界面并让用户输入排查的坐标

5.判断坐标处是否为雷,是雷游戏结束(展示答案),不是雷计算并显示该坐标处的雷数

6.使用while循环,通过对操作次数进行计数判断游戏是否结束

2.2.1  test.c

#define _CRT_SECURE_NO_WARNINGS 1 #include"game.h" int main() { int a; while (1) { srand((unsigned int)time(NULL)); menu(); printf("请选择:"); scanf("%d", &a); switch (a) { case 1: printf("开始扫雷\n"); game(); break; case 0: printf("游戏结束了\n"); break; default: printf("输入错误,请重新输入\n"); break; } if (a) ; else break; } return 0; }

用while(1)死循环来使用户可进行多次游戏

2.2.2  game.c

#define _CRT_SECURE_NO_WARNINGS 1 #include"game.h" //输出菜单 void menu(void) { printf("*\n"); printf(" 1.play *\n"); printf(" 0.exit *\n"); printf("*\n"); } //初始化数组 void initi(char arr[ROWW][COLL], char ch) { int i, j; for (i = 0; i < ROWW; i++) { for (j = 0; j < COLL; j++) { arr[i][j] = ch; } } } //输出数组 void print(char arr[ROWW][COLL]) { int i, j; for (i = 0; i <= ROW; i++) { printf("%2d ", i); } printf("\n"); for (i = 1; i <= ROW; i++) { printf("%2d ", i); for (j = 1; j <= COL; j++) { printf("%2c ", arr[i][j]); } printf("\n"); } } //放置雷 void place(char arr[ROWW][COLL], int n) { int count = COUNT; while (count) { int x = rand() % ROW + 1; int y = rand() % COL + 1; if (arr[x][y] != '1') { arr[x][y] = '1'; count--; } } } //计算雷数 char Num(char arr[ROWW][COLL], int a, int b) { int i, j, sum = 0; char result = '0'; for (i = a - 1; i <= a + 1; i++) { for (j = b - 1; j <= b + 1; j++) { sum += arr[i][j] - 48; } } result += sum; return result; } //扫雷实现 void game(void) { int a, b; int freq = 0; char mine[ROWW][COLL], show[ROWW][COLL]; initi(mine, '0'); initi(show, '*');//初始化数组 place(mine, COUNT); while (freq < ROW * COL - COUNT)//判断排查次数是否到达无雷数 { printf("-------扫雷游戏-------\n"); print(show);//输出数组 printf("\n"); printf("请输入:"); scanf("%d%d", &a, &b); if (a >= 1 && a <= ROW && b >= 1 && b <= COL) { if (show[a][b] == '*') { if (mine[a][b] == '1') { printf("恭喜你,你被炸死了\n"); printf("-----以下展示答案-----\n"); print(mine); break; } else if (mine[a][b] == '0') { show[a][b] = Num(mine, a, b); freq++; } } else { printf("输入重复,请重新输入\n"); } } else { printf("越界输入,错误!\n"); } } if (freq == ROW * COL - COUNT) { printf("恭喜你,扫清所有雷!\n"); } } 

2.2.3  game.h

#pragma once #define ROW 9 #define COL 9 #define ROWW 11 #define COLL 11 #define COUNT 10 #include<stdio.h> #include<time.h> #include<stdlib.h> //输出菜单 void menu(void); //扫雷实现 void game(void); //初始化数组 void initi(char arr[ROWW][COLL], char ch); //输出数组 void print(char arr[ROWW][COLL]); //放置雷 void place(char arr[ROWW][COLL], int n); //雷数 char Num(char arr[ROWW][COLL], int a, int b); 

2.3 程序运行 

813773bfbf164279b457184de1d3b0aa.png

好了,以上就是简易版扫雷的全部内容,还不快点动手去试试~ 

 

 

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/119916.html

(0)
上一篇 2025-11-02 09:33
下一篇 2025-11-02 10:00

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信