用户:
Mellin_Amp查看:73 回复:59 评论:73 创建时间:2020-07-11T21:57:06
本系列由“慕斯酱小号的小号”制作 不定期更新
————我要成为编程猫的“Code Star!”
本帖内容与以下作品的代码一起食用更佳:
https://shequ.codemao.cn/work/20808527
============分割线===========
看,训练师
这是Windows自带游戏[扫雷]的游戏截图
大家也都知道,编程猫也有一些创作者(包括慕斯我)在编程猫造出了扫雷
本系列教程,旨在通过对扫雷游戏制作的教程以向训练师普及编程时常用的方法
俗话说得好“工欲善其事,必先利其器”
想要制作一个扫雷,就要先把“雷区”布置好从上面的图片我们可以看出 扫雷的“雷区”
是9*9(简单模式)的方格组成的,每个格子只有2个状态
“有雷”或者“没有雷”
怎么来记录这个数据呢?
这时候,我们就要请出今天的主角——二维数组了
二维数组
顾名思义,就是有两个“维度”的数组
如果说一个列表是[1,2,3,4,5]这样的线
那么二维数组就是
这样的一个“面”
二维数组是由多个相同的一维数组组成
一维数组的元素我们用“第*个”定位
同理,二维数组的元素就可以用(第*列,第*行)来定位
举个例子 我们拿出一个二维数组Map
(书写可能并不标准,仅仅是形象演示)
注:按照程序的语言 第一个的序号是0 但为了教学效果
我们让第一个元素也是1好了
那么这个Map[1][1]就表示第一行第一列的元素 也就是0
Map[1][2]就表示第一行第二列的元素 也就是1
如果我们把扫雷的地图抽象成这样的一个二维数组
设置0是没有雷 1是有雷
那么制造扫雷,看起来也就不那么难了
读到这里,有的小朋友就要发问了:
没错
编程猫并没有内置“二维数组”的功能
但是别忘了,“自己动手丰衣足食”是我们的优良传统
编程猫没有二维数组? 我们就用列表自己造一个!
这是一个列表Map
首先我们得保证列表和二维数组转换前后元素没有发生改变
“为什么不把二维数组逐行连接呢?”
我们可以先创建一个大列表
第一步 把第一行的东西塞进去
之后把第二行的内容放到第一行的后面 开头与第一行内容的结尾相连接
这样我们可以实现把二维数组的内容,堆到编程猫的列表里
然而事情并没有那么简单 由于这样放置
我们丢失了原二维数组的“行数”和“列数”
不妨新建两个变量来表示吧
有了想法,我们便可以动手实现了
我们第一步要做的,是实现二维数组的元素map[a][b](第a行第b列的元素)
怎么对应到一维数组
我们很容易发现 第a行第b列
也就是从左向右 从上到下数的第 长度*(a-1)+b个
如果我们的二维数组横向有16个元素(16列)
那么列表里对应的元素我们可以用上图来获取
接下来要制作从列表里把二维数组的行与列抽出来的操作
这个基本作想必大家想一想就能明白
如果不明白可以自己画图来看一看
其中加的“如果”语句是为了防止在某些情况下发生的“第0项”而产生的报错
经过这些学习,我们学到了传说中【二维数组】的搭建和调用方法
学会二维数组,对我们的编程有很大帮助
拿它存储扫雷的地图想必是轻而易举
二维数组的应用可不限于此
如果大家有兴趣的话可以完成以下几个挑战
1.用二维数组 将班级同学的学号和座位位置相对应
2.做一个能够把二维数组中的所有元素相加的程序
3.二维数组都能做出来,来做一个三维数组吧(提示:三维数组是多个二维数组的叠加)