猫史档案馆


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

用户:Mellin_AmpMellin_Amp查看:2908 回复:59 评论:73 创建时间:2020-07-11T21:57:06


本系列由“慕斯酱小号的小号”制作 不定期更新

center_image

————我要成为编程猫的“Code Star!”

 

本帖内容与以下作品的代码一起食用更佳:

https://shequ.codemao.cn/work/20808527

 

============分割线===========

看,训练师

这是Windows自带游戏[扫雷]的游戏截图

center_image

大家也都知道,编程猫也有一些创作者(包括慕斯我)在编程猫造出了扫雷

本系列教程,旨在通过对扫雷游戏制作的教程以向训练师普及编程时常用的方法

 

俗话说得好“工欲善其事,必先利其器”

想要制作一个扫雷,就要先把“雷区”布置好从上面的图片我们可以看出 扫雷的“雷区”

是9*9(简单模式)的方格组成的,每个格子只有2个状态

“有雷”或者“没有雷”

怎么来记录这个数据呢?

这时候,我们就要请出今天的主角——二维数组了

center_image

二维数组

顾名思义,就是有两个“维度”的数组

如果说一个列表是[1,2,3,4,5]这样的线

那么二维数组就是

这样的一个“面”

二维数组是由多个相同的一维数组组成

一维数组的元素我们用“第*个”定位

同理,二维数组的元素就可以用(第*列,第*行)来定位

举个例子 我们拿出一个二维数组Map

center_image

(书写可能并不标准,仅仅是形象演示)

注:按照程序的语言 第一个的序号是0 但为了教学效果

我们让第一个元素也是1好了

那么这个Map[1][1]就表示第一行第一列的元素 也就是0

Map[1][2]就表示第一行第二列的元素 也就是1

如果我们把扫雷的地图抽象成这样的一个二维数组

设置0是没有雷 1是有雷

那么制造扫雷,看起来也就不那么难了

 

读到这里,有的小朋友就要发问了:

center_image

没错

编程猫并没有内置“二维数组”的功能

但是别忘了,“自己动手丰衣足食”是我们的优良传统

编程猫没有二维数组? 我们就用列表自己造一个!

 

这是一个列表Map

center_image

首先我们得保证列表和二维数组转换前后元素没有发生改变

“为什么不把二维数组逐行连接呢?”

我们可以先创建一个大列表

第一步 把第一行的东西塞进去

之后把第二行的内容放到第一行的后面 开头与第一行内容的结尾相连接

这样我们可以实现把二维数组的内容,堆到编程猫的列表里

center_image

然而事情并没有那么简单 由于这样放置

我们丢失了原二维数组的“行数”和“列数”

 

不妨新建两个变量来表示吧

有了想法,我们便可以动手实现了

我们第一步要做的,是实现二维数组的元素map[a][b](第a行第b列的元素)

怎么对应到一维数组

我们很容易发现 第a行第b列

也就是从左向右 从上到下数的第 长度*(a-1)+b个

center_image

如果我们的二维数组横向有16个元素(16列)

那么列表里对应的元素我们可以用上图来获取

接下来要制作从列表里把二维数组的行与列抽出来的操作

center_image

 


center_image这个基本作想必大家想一想就能明白

如果不明白可以自己画图来看一看

其中加的“如果”语句是为了防止在某些情况下发生的“第0项”而产生的报错

 

经过这些学习,我们学到了传说中【二维数组】的搭建和调用方法

学会二维数组,对我们的编程有很大帮助

拿它存储扫雷的地图想必是轻而易举

二维数组的应用可不限于此

如果大家有兴趣的话可以完成以下几个挑战

 

1.用二维数组 将班级同学的学号和座位位置相对应

2.做一个能够把二维数组中的所有元素相加的程序

3.二维数组都能做出来,来做一个三维数组吧(提示:三维数组是多个二维数组的叠加)

 

 

 

 

 

 


回复

上一页第 1 页 / 共 2 页下一页
Mellin_AmpMellin_Amp

内容比较水,各位轻点喷

点赞1


评论

还可以吧,我也会做,应该是给萌新的

我信息奥赛蒟蒻,普及省一都拿不到的那种屑(大佬轻喷)

草,oier啊


传闻中的三叶传闻中的三叶

沙发

点赞0


评论


Leo韩Leo韩

看不懂,完了

点赞0


评论

这都看不懂的屑leo,我还特意找了阿尔dio友情参演的说()

我也(bushi


韵律源点Arcaea韵律源点Arcaea

nb

点赞0


评论


韵律源点Arcaea韵律源点Arcaea

社区里好久没出现这么优质的教程了

点赞0


评论

不要尬吹,扫雷的干货凑起来也顶天是一期,我这就是为了当个什么社区星水的(屑慕斯)

精教程帖有一不能有二吗?屑慕斯(bushi)

我昨天熬夜写的宁能不能看看表(恼)


气泡鱼官方气泡鱼官方

点赞。

点赞1


评论

活捉气泡鱼


鹿魂鹿魂

看不懂,完了

点赞0


评论


时_代眼泪_卡西米尔骑士时_代眼泪_卡西米尔骑士

wow

点赞0


评论


SKQASKQA

我去我就不信四维数组能做的出emotion_doge

点赞0


评论

可以的啊!

狗头看到了吗

好的这就去打脸()

啥意思


温馨Bunny温馨Bunny

完全看不懂

点赞0


评论

知道了这就把它写成2000字的拆成两期()

。。


蓝颜祸水蓝颜祸水

额……电脑都自带了,还做他干嘛(个人理念:能省就省)

点赞0


评论

不思进取的屑()

完全看不懂()

人家都知道那么多芝士了你干脆退学吧(能省就省


橘子糖浆小号的小号的小号的小号的小号橘子糖浆小号的小号的小号的小号的小号

首页通知书!center_image

点赞1


评论

nb


传闻中的五音璃音传闻中的五音璃音

完了,中文渣

拜了…

点赞0


评论


杨佳潼杨佳潼

前排(热乎)

点赞0


评论


猫悟淡猫悟淡

az,热门第一?

点赞0


评论


陆奕博Max陆奕博Max

nb!

点赞0


评论


一枚云清一枚云清

首页通知书

点赞0


评论


屑辰屑辰

决心鱼↓

点赞0


评论

(确信)

还真是……


花金柔花金柔

好吧,我不懂[崩溃]

点赞0


评论


_Rise__Rise_

既然电脑都自带了,我要他干嘛emotion_doge

点赞0


评论


蕉饼蕉饼

<>

点赞0


评论


Little_ProgramLittle_Program

巨佬NB!

点赞0


评论


英俊小子英俊小子

emotion_思考emotion_思考emotion_思考emotion_雷电猴_疑问

点赞0


评论


Chengxuyee_已退Chengxuyee_已退

有一种方法不知可行不可行。就是……直接建几个角色然后让主角色检测碰到……

点赞0


评论

不行()


Chengxuyee_已退Chengxuyee_已退

哦对了我最近买了一本“量子力学”看

点赞0


评论

听别人讲量子力学的时候脑子都快炸了

没有记错的话,《量子力学》是大二及以后“理论力学”课程范围内的一本书,膜一下大佬

额(⊙o⊙)…

哦对了,问一下,你知不知道量子力学(这里没加书名号)里面的公式多不多啊?比如m=m0/根号(1-v*v/(c*c))那个动质量公式(虽然这不是量子力学)

如果要正式学习量子力学,宁需要把大学的《高等数学》起码学一学,还需要《普通物理》和《分析力学》的基础才行。如果单纯是“了解”级别的入门可以出门右转看科普视频去

已经了解过了。包括那句:“谁要是第一次听到量子力学不恼火,那他一定是没听懂”

我确实有点恼火。特别是这三个:量子叠加态(既死又活?!?)、量子纠缠【超距作用?!?(不存在的)】、电子轨道【超距作用?!?(不存在的)】

不,是一个三角函数都不知道是啥的人就不要学带公式的了

我就是想知道量子力学有没有很多公式,有很多公式的话我先学基础数学(这话有点问题,几乎三年级和以上的人都知道三角函数是什么,但是不知道三角函数的公式)

额,我会三角函数啊


可怜发不了评论了的张不二嘻可怜发不了评论了的张不二嘻

满怀期待地进来,一脸懵B地出去

点赞0


评论


白篮白篮

眼睛:看到了吧

大脑:好像是会了

手:我不会!!!emotion_doge

点赞0


评论


ZNS_RemytowerJimmyZNS_RemytowerJimmy

巨佬!

点赞0


评论

巨佬什么巨佬,NOIP我特别屑,我就是一学隔壁物理竞赛的()

你是真巨佬,你小号的小号比我赞还多!!

我小号的小号比大号还强()

我信你个鬼(√)

你别不信,慕斯小号的小号确实比慕斯的小号和慕斯大号赞要多……


离开的十五分之六老咸鱼离开的十五分之六老咸鱼

az加精还热了???!!!

点赞0


评论

我哪知道咋回事,原计划这系列一期就能完事,但是为了水就把它抻开到五个帖子,更可怕的是莫名其妙精了


DHS李钛钅黑DHS李钛钅黑

(⊙o⊙)…

点赞0


评论