猫史档案馆


【从扫雷开始的kitten进阶教程】数组的灵活应用之显示数字

用户:Mellin_AmpMellin_Amp查看:31 回复:29 评论:31 创建时间:2020-07-21T22:03:10


从扫雷开始的kitten进阶教程II

 

“我有一个梦想....就是要成为编程猫的code star!”

 

center_image

 

在阅读完了上一篇帖子之后:

 

(传送门)

 【从扫雷开始的kitten进阶教程】巧建地图————二维数组的构建与应用

https://shequ.codemao.cn/wiki/forum/320472

 

有了神器(二维数组思想)的帮助,训练师阿短决心自己尝试制作扫雷

经过114514个日夜的冥思苦想,阿短终于自己悟出了布雷的方法

center_image

用喜闻乐见的随机数 每次都在1到256号随机一个格子(16*16的棋盘 格子编号是1-256)

 

想必有耐心看完第一篇帖子的训练师都知道

阿短肯定是又错了!

虽然的确能够实现随机布雷的效果,但各位也一定看到了

随机数随机数,要是随机出了重复的数,岂不是会让总的雷数减少?

比如运气很背,每次都随机出了1,结果这40次都往1号格子上按个雷

最终结果就非常尴尬了

为了避免出现同一个位置布雷两次的情况,屑慕斯就对此做出了一点点的改进如下

 


center_image在抽取随机数的时候,如果随机到布过雷的位置

就让它再抽一次换一个位置,一直换到空地为止!

(因为雷数总小于格子数,所以不会有喵循环产生)

以上,便是“布雷”(过于简单)

 

有的小朋友就要问了:

center_image

 

那么接下来要做的,就是去“标数字”啦

我们不妨让0代表空地 1代表周围有一个雷……以此类推

标数字要从头到尾一个个标,所以先拿一个变量a

采用循环结构,对第a个格子进行分析,分析完了再令a增加1

这样就实现对每个格子数字的标注

众所周知,标数字有如下规则:

第一: 有雷的格子不能标数

center_image

第二:每个格子周围的数字数等于其周围8个格子的雷数(如图中央绿色的2)center_image

 

 

那么这就很简单了吧

我们只需要把它一圈的格子,全都看一遍

是雷的就记录,不是雷就不管

对于某一格子 先创建变量sum=0 对周围一圈逐个判断如果遇到雷就使sum增加1

 

如何在抽象的数组里找到“上下左右”对应格子的编号呢?

我们拿出一个格子

center_image

想必各位高手们得出这一关系轻而易举(小学数学)

那么用编程猫的积木实现也就是这样的:

只要对它周围一圈的积木判断,是雷就将sum增加1

center_image

主要的想法我们已经实现了,接下来就是完善一些细节

center_image

看看这个被红色圈起来的格子,它周围有一个雷

但是难点来了,这个格子在边界处,它右面没有格子

这样的话我们的判定必须要排除这样的情况

比如如果想要看它正右方的格子有没有雷

前提是它正右方得“有格子”

结合上一节课的getx与gety函数我们可以知道

右面有格子:x≠16

左面有格子:x≠1

上面有格子:y≠1

下面有格子:y≠16


center_image注:对于左上方之类的“复合”方向,只需要同时满足两个条件即可

 

 

上图这是对于它正右方有没有雷的判断

如果它不是最后一列,而且它右面有雷

就对这个格子周围雷数也就是变量sum增加1

我们以此类推(经过漫长的体力劳动)对周围的八个格子重复八次

就可以得出了这个!

center_image

是不是非常的amazing()

没错 只需要这些判断就能达成目标

就这样,我们就可以轻松地做出扫雷喜闻乐见的布雷和计算雷周围格子的数字了!

 

好了本期的教程就结束了(水完了)

很抱歉第一期讲述的内容不太清晰

这一次作者尝试采用更多代码配图和思路讲解

希望能得到更优的效果

 

还是老规矩,在结束时布置几个任务,供各位训练师练习

  1. 如何改进布雷系统,使其运行速度更快?
  2. 能否将图6的代码精简,用一个循环就能完成?

 


回复

上一页1 页 / 共 1下一页
QBZ_QBZ_

沙发

点赞0


评论


YDSmnxYDSmnx

给爷上去

点赞0


评论


Mellin_AmpMellin_Amp

点赞0


评论


勤奋的雾雨魔理沙daze勤奋的雾雨魔理沙daze

好帖子,一看作者就是大佬,顶一下emotion_doge

点赞0


评论


蒋双诠蒋双诠

喵!

点赞0


评论


InkyRainInkyRain

你又来了,顶帖()

点赞0


评论


Mellin_AmpMellin_Amp

紧急声明下:

屑慕斯由于脑袋日常抽风,在下面的图中将数字9规定为雷

望周知

点赞0


评论


韵律源点Arcaea韵律源点Arcaea

上去

点赞0


评论


InkyRainInkyRain

也许换一个角度,让雷来选择它的位置emotion_微笑

center_imagecenter_imagecenter_image

点赞3


评论


MolongMolong

center_image

点赞0


评论


一枚云清一枚云清

首页通知书

点赞0


评论


Beck_seaBeck_sea

完了我又学废了

点赞0


评论


SSS超级星SSS超级星

前排

点赞0


评论


InkyRainInkyRain

又是置顶??受宠若惊emotion_可爱(看完别撤)

点赞0


评论


Little_ProgramLittle_Program

喵d

点赞0


评论


爵士OIer爵士OIer

3G太快了!

点赞0


评论


爵士OIer爵士OIer

实际上一维数组就行了,只要限定行和列。详见:https://shequ.cod喵/community/321960

点赞0


评论


**********************

wryyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy

点赞0


评论


黑色冬根黑色冬根

望着大佬的帖子有些看不懂。

点赞0


评论


Mellin_AmpMellin_Amp

小朋友,你学废了吗emotion_doge

点赞1


评论


阿璇_阿璇_

dd

算了我这个垃圾终究是学废了emotion_doge

点赞0


评论


樱井梦樱井梦

见jo进,然后......我废了 

点赞0


评论


_Rise__Rise_

我学废了

点赞0


评论


Chengxuyee_已退Chengxuyee_已退

大佬就是大佬,宇宙沙盘都能做出来,官方也不上个首页

点赞0


评论


little_hanhanlittle_hanhan

作者我经过12h(没有骗你!)的苦思冥想终于懂了!快乐!!!

点赞0


评论


Chengxuyee_已退Chengxuyee_已退

慕斯大佬,您滴图片碎了……

点赞0


评论


Asheep233Asheep233

dd

点赞0


评论


硅_约瑟夫硅_约瑟夫

dd

点赞0


评论


非常淘气的达达蟹MtD3非常淘气的达达蟹MtD3

如果遇到这种情况,阁下该如何应对?center_image

点赞0


评论