既然背景图片加载好了,狼已经套住了,那么接下来自然应该让灰太狼最喜欢的肥羊们上场,可是肥羊们应该放在哪儿呢?总不能挨着挨着放啊。
这个时候我有点狐狸捉刺猬——无从下手的感觉,所以只能够向老爹求助了。
老爹笑而不语,默默打开浏览器,在搜索引擎里边输入「推箱子」三个字,潇洒干脆地敲击了回车键。
「看到没,推箱子游戏总共有5中元素:角色、箱子、目标、障碍物和背景,并且这其中蕴含了一些玄机,如果随便乱放很可能导致箱子根本就没有办法全部移动到目标上面。」
老爹打开了一张经典推箱子游戏的地图,详细和我说起了上面的门道。
「现在咱们的背景是青青草原,角色是灰太狼,箱子自然就是可爱的小羊们了,至于目标嘛,就是这些黑锅,灰太狼最终的目标是把所有的羊都送进锅里煮着吃,至于障碍物嘛,就是这些树咯。」
老爹一边讲解,一边将昨天冒着坐牢风险爬下来的素材展示给我看。不管是灰太狼还是小羊们,以及黑锅和树都被老爹处理成了相同的宽和高。
「灰太狼这货也是,其他狼都吃生羊肉,它非得吃涮羊肉,多少次小羊们都是在涮羊肉的过程中逃跑了。」
我摇了摇头感叹了一句。
「不让羊跑了那不就没戏了么?接下来还怎么演?」
老爹无奈地笑了笑。
「有道理!」
我深以为然地点了点头。
「好了,你现在来数数,如果把灰太狼、小羊们、黑锅和树都当成一个格子的话,这个地图上有多少个格子?」
「啊!真要数啊,看上去有七八十个吧。」
我苦着脸说道。
「你看哈,这个地图其实是一个14行15列的表格,只不过这个表格中有些地方是空着的,有的是障碍物、箱子、目标和主角,如果我们一个一个的来加载,确定它们的位置,这是一个多么大的工程量?」
「那怎么办啊?要是按照老爹你这么说的话,那得等到何年何月才能完成啊?」
听完老爹的话,我满脸愁容。原本以为实现这么一个游戏应该不难的,哪曾想是困难重重,看来老爹经常说万事开头难,中间难,结尾更难果然是真的。
不过我转念一想,不对,老爹既然这么说肯定有什么解决方法。
「老爹,你直接说怎么解决吧,别卖关子了。」
我小心试探道。
「你个鬼丫头,居然这么快就反应过来了。好吧,那我就跟你说说怎么解决这个问题。
首先,我们得把窗体的工作区分成15x14个格子,这样窗体就和地图对应其起来了,这一步倒是简单,只需要设置窗体工作区的宽度和高度就可以了。
灰太狼、小羊们、黑锅和树都是正方形的图片,并且变长是50像素,那么窗体工作区的宽度和高度分别是15x50和14x50,也就是750x600像素。
当然了,这个格子是不存在的,只是我们人为划分的。」
老爹为了让我更容易理解,充分利用了画图工具,图文并茂地向我解析这其中的道理。
「为了方便描述和分析,我们先用一个8x8的表格,然后对灰太狼、小羊们、黑锅和树进行一个转换,假设用数字0代表空白表格,1代表灰太狼,2代表羊,3代表树,4代表黑锅的话,那么整个地图就变成了这样:
0 0 3 3 3 0 0 0
0 0 3 4 3 0 0 0
0 0 3 0 3 3 3 3
3 3 3 2 0 2 4 3
3 4 0 2 1 3 3 3
3 3 3 3 2 3 0 0
0 0 0 3 4 3 0 0
0 0 0 3 3 0 0 0
现在1也就是灰太狼所在的格子在从零开始数第4行,第4列中,那么它在窗体工作区的位置是多少?」
老爹将灰太狼的图片贴在了他在画图工具上绘制的表格中,所以很容易就看出来表格的行数、列数和位置的关系。
「灰太狼位置x=列号x图片宽度,y=行号x图片高度,所以x=4x50=200,y=4x200=100。」
我脱口而出道,这种级别的乘法题,都不用经过大脑。
「没错,这样一来只要知道灰太狼、小羊们、黑锅和树在表格中的行数和列数,就能够爱确定它们在窗体中显示的位置了!」
「哦!」
我恍然大悟道。
「所以现在需要用一种方式把上面的表格和数字表示出来,然后让计算机挨着去判断表格里面的数字是多少,如果是0,说明是空白,什么都不做。如果是1就加载灰太狼的图片,并且计算它的位置显示在窗体中,如果是2就加载羊,3加载树,4加载锅。
最终问题锁定在如果表示表格以及挨着判断表格里的内容,这样就引出了我们今天的内容——数组。」
老爹拧开水杯喝了一口温水润喉,毕竟为了引出这个内容绕了这么大的弯子。
「数组?What this?」
「顾名思义,就是一组数。」
老爹笑了笑。
「额……」
我有点无言以对,这说了不是跟没说一样嘛。
「好吧,数组其实就是一个魔法袋子。设想一下,假设你喜欢吃的薯片被你妈吃光了,这个时候你拉着老爹去超市买薯片。」
「什么?我的薯片又被你老婆偷偷吃光了?这个馋嘴猫,比我嘴都馋!」
听到这个不幸的消息,我瞬间火气直往头上窜。
「不要激动,假设,只是假设而已!」
看着我双眼都要喷出火的样子,老爹立刻将我按在了椅子上。
「好吧,既然是假设,那就没事了,你继续讲……」
「……好吧,因为你不想天天去超市买薯片,于是你一次性往购物车里放了10包薯片,这才推着购物车去收银处付钱。
这个时候收银的小姐姐看到你买了这么多薯片,但是因为购物车不准推出超市,于是小姐姐问你要不要袋子。
为了方便省事,你当然要袋子咯,于是十包薯片就装在袋子里提回家了。
而数组的作用就和这个袋子一样,只是里面装的不是薯片了,而是一堆数据。在C语言中,我们创建一个数组需要声明它的数据类型以及长度。如果把int型的数据比作一包薯片,那么在C语言中应该这么表示:
int arr[10];
arr就是那个袋子的名字,int表示袋子里面放的是什么,[10]表示口袋里最多只能放10个int元素。
但是C语言中的袋子比现实中的袋子更神奇,它会给袋子里的每个元素,相当于现实袋子里的一包薯片进行编号,我们可以通过编号拿到指定的元素,这就是它神奇的地方。」