猫史档案馆


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

用户:Mellin_AmpMellin_Amp查看:73 回复: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


评论


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

沙发

点赞0


评论


Leo韩Leo韩

看不懂,完了

点赞0


评论


韵律源点Arcaea韵律源点Arcaea

nb

点赞0


评论


韵律源点Arcaea韵律源点Arcaea

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

点赞0


评论


气泡鱼官方气泡鱼官方

点赞。

点赞1


评论


鹿魂鹿魂

看不懂,完了

点赞0


评论


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

wow

点赞0


评论


SKQASKQA

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

点赞0


评论


温馨Bunny温馨Bunny

完全看不懂

点赞0


评论


蓝颜祸水蓝颜祸水

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

点赞0


评论


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

首页通知书!center_image

点赞1


评论


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

完了,中文渣

拜了…

点赞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


评论


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

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

点赞0


评论


白篮白篮

眼睛:看到了吧

大脑:好像是会了

手:我不会!!!emotion_doge

点赞0


评论


ZNS_RemytowerJimmyZNS_RemytowerJimmy

巨佬!

点赞0


评论


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

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

点赞0


评论


DHS李钛钅黑DHS李钛钅黑

(⊙o⊙)…

点赞0


评论