
扫雷程序思想讲解
在我大二的时候就编写了一个扫雷程序,现在也有很多
源程序下载,我不知道他们的算法是怎么样的,但我想我的
算法应是最清晰和简单的。碧陵下面就来讲解我的扫雷程序思想。
首先我们在雷区上随机地放上雷,没有雷的地方被点击
后就会显示一个数字表示它周围有几个雷,这是怎么实现的
呢?我们可以把整个雷区看成一个二维数组a[i,j],如雷区:
11 12 13 14 15 16 17 18
21 22 23 24 25 26 27 28
31 32 33 34 35 36 37 38
41 42 43 44 45 46 47 48
51 52 53 54 55 56 57 58
我要知道a[34]周围有几个雷,就只有去检测
a[23],a[24],a[25]
a[33], a[35]
a[43],a[44],a[45]
这8个雷区是否放上了雷,仔细观察它们成在数学关系。
抽象出来就是:a[i,j]的雷的个数就是由
a[i-1,j-1],a[i-1,j],a[i-1,j+1]
a[ i ,j-1], a[ i ,j+1]
a[i+1,j-1],a[i+1,j],a[i+1,j+1]
(如果超出边界再加以判断)
这样的8个雷区决定的。
扫雷程序还会自动展开已确定没有雷的雷区。如果悔兆戚
a[3,4]周围雷数为1,a[2,3]已被标示为地雷,那么
a[24],a[25],a[33],a[35],a[43],a[44],a[45]
将被展开,一直波及到不可确定的雷区。这也是实现的
关键。我们可以把数组的猜毕元素设定为一个类对象,它们
所属的类
因此普通版本WINDOS扫雷程序是将布雷和扫雷结合的
c++:
#include<iostream>#include<fstream>
#include <ctime>
using namespace std
void layout(int n) {
char**cs = (char**) malloc(sizeof(char*) * n)
srand((unsigned) time(0))
for (int i = 0 i < n ++i) {
cs[i]=(char*) malloc(sizeof(char) * n)
for (int j = 0 j < n ++j) {
int r0 = rand() % 100
int r1 = rand() % 100
if (r1 >= r0 && r1>70) { //雷
cs[i][j] = '*'
} else {
cs[i][j] = ' '
}
}
}
//计算雷的个数
for (int i 册腊= 0 i < n ++i) {
for (int j = 0 j < n ++j) {
if (cs[i][j] == '*')
cout <<" "<< cs[i][j]
else {
int count = 0
for (int k = i - 1 k <= i + 缓腔1 k++) {
for (int 州哪滑l = j - 1 l <= j + 1 l++) {
if (k >= 0 && l >= 0 && k < n && l < n
&& cs[k][l] == '*'){
count++
}
}
}
cs[i][j]=(char)('0'+count)
cout <<" "<< cs[i][j]
}
}
cout << endl
}
}
int main() {
int n = 4
cout << "请输入行数:"
cin >> n
layout(n)
}
电脑自带的游戏扫雷程序在Windows“游戏”目录下,是可以查看的,具体查看步骤如下启宏橘:
1、以Win7系统为例,点击系统左下角开始菜单;
2、在打开的页面中,点击页面右侧“游戏”目录;
3、在打开窗口页面中,找到“扫雷”游戏程序,双击该扫雷程序文件;
4、接下来,即可打开扫雷游戏主页面,可以进行游戏了;
5、还可以在开始菜单中,找到“所有悄团程序”目录,选择“游戏-扫雷”程序也可以打开游戏界面。绝迹
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)