如何编写一个扫雷速度最快的自动扫雷程序

如何编写一个扫雷速度最快的自动扫雷程序,第1张

#include

#include

#include

using namespace std

int map[12][12] // 为避免边界的特殊处理,故将二维数组四周边界扩展1

int derection[3] = { 0, 1, -1 } //方向数组

int calculate ( int x, int y )

{

int counter = 0

for ( int i = 0i <3i++ )

for ( int j = 0j <3j++ )

if ( map[ x+derection[i]][ y+derection[j] ] == 9 )

counter++// 统计以(x,y)为中心的四周的雷数目

return counter

}

void game ( int x, int y )

{

if ( calculate ( x, y ) == 0 )

{

map[x][y] = 0

for ( int i = 0i <3i++ )

{ // 模拟游戏过判梁程,若点到一个空白,则系统自动向外扩展

for ( int j = 0j <3j++ )

if ( x+derection[i] <= 9 &&y+derection[j] <= 9 &&x+derection[i] >= 1 &&y+derection[j] >= 1

&&!( derection[i] == 0 &&derection[j] == 0 ) && map[x+derection[i]][y+derection[j]] == -1 )

game( x+derection[i], y+derection[j] )// 条件比较多,一是银闹不可以让两个方向坐标同时为0,否则

递归调用本身!

} //二是递归不能出界.三是要保证不返回调用。

}

else

map[x][y] = calculate(x,y)

}

void print ()

{

for ( int i = 1i <10i++ )

{

for ( int j = 1j <10j++ )

{

if ( map[i][j] == -1 || map[i][j] == 9 )

cout <<"#"

else

cout <>x >>y )

{

if ( map[x][y] == 9 )

{

cout <<"GAME OVER" <>ch

cout <<"\n\n"

} while ( ch == 'Y'掘搏运 )

return 0

}

普通版本WINDOS扫雷程序是将布雷和扫雷结合

扫雷程序思想讲解

在我大二的时候就编写了一个扫雷程序,现在也有很多

源程序下载,我不知道他们的算法是怎么样的,但我想我的

算法应是最清晰和简单的。碧陵下面就来讲解我的扫雷程序思想。

首先我们在雷区上随机地放上雷,没有雷的地方被点击

后就会显示一个数字表示它周围有几个雷,这是怎么实现的

呢?我们可以把整个雷区看成一个二维数组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扫雷程序是将布雷和扫雷结合的


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8258793.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-14
下一篇 2023-04-14

发表评论

登录后才能评论

评论列表(0条)

保存