扫​雷​核​心​算​法

ž          定义

在该案例中我们要实现类似于windows扫雷游戏程序的核心功能,我们将扫雷游戏的核心功能分为以下4个模块:

1,             随机布雷模块

在该模块中,我们要为扫雷游戏随机的布置地雷,扫雷游戏的布雷面板可以用二维int数组表示,若某位置为地雷,则该位置用数字-1表示,若该位置不是地雷,则暂时用数字0表示。我们要编写程序完成在该二维数组中随机布雷的操作,程序读入三个参数:布雷面板的行数(r),列数(c),布置的地雷数(n),且要满足要求0<n<r×c×0.75(布置地雷的密度最大为75%)。程序运行后将n个地雷随机的布置在r×c的二维数组中,产生如下的二维数组:

0

0

0

-1

0

0

-1

0

-1

0

0

-1

0

0

0

-1

-1

0

-1

0

0

-1

0

-1

-1

0

0

0

-1

0

0

-1

0

0

0

-1

 

2,             计算每个位置周围的地雷数

以上一模块产生的随机地雷分布的二维数组为数据来源,计算该二维数组中不是地雷的位置周围的8个位置总共有多少个地雷,将这一数字存储在该位置,产生如下二维数组:

1

2

2

-1

2

1

-1

2

-1

4

4

-1

2

3

3

-1

-1

3

-1

2

2

-1

5

-1

-1

3

2

2

-1

3

2

-1

1

1

2

-1

 

3,             输出布雷面板:

我们要编写程序完成布雷面板的控制台输出,为了区分布雷面板中哪些位置是已经被用户排开的,哪些位置是未被排开的,我们对以上二维数组的数据定义作如下约定:

若该位置保存的数字是n,则n满足如下条件:

1)  若0<=n<=8,则表示该位置不是地雷,其周围位置的地雷数就是n,且该位置未被用户排开。

2)  若10<=n<=18,则表示该位置不是地雷,其周围位置的地雷数就是n%10,且该位置已经被用户排开。

3)  若n==-1,则表示该位置是地雷,并且未被用户标记。

4,             用户排雷程序模块

完成以上两个模块后,用户可以完成排雷的操作,我们要编写一个程序来支持用户通过控制台来排除地雷,用户可以在控制台输入坐标位置,来表示排除该位置是地雷。当用户输入坐标位置后,程序需要执行如下操作:

1)  若该坐标位置是地雷(值为-1),则,程序结束,用户排雷失败。

2)  若该坐标位置存储的数字是大于0小于等于8的整数(该位置不是地雷,该位置周围地雷数等于该数字,该位置未被用户排开),则将该位置排开(并将该位置的数字+10,表示该位置已经排开),然后重新输出一遍布雷面板。

3)  若该坐标位置存储的数字是大于等于10小于等于18的整数(该位置不是地雷,该位置已经被排开),则输出错误信息,请用户重新输入。

4)  若该坐标位置存储的数字等0(该位置不是地雷,该位置周围的8个位置也没有地雷,该位置还未被用户排开),则找该位置的周围8个位置,将其排开,排开时递归的执行排雷程序模块的操作。

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值