返回第四十五章 筑基(2 / 2)程序媛养成计划首页

到了现在这阶段,灰太狼移动的这部分逻辑算是大局已定。为了培养我和小弦子建立「自上而下」的编程思维,老爹从功能划分的角度将推箱子这个游戏重新解析了一遍。

所谓的「自上而下」的编程思维,就是说当我们要实现一个项目的时候,首先要做的并不是具体的代码应该怎么写,而是按照之前老爹讲的程序哲学三连问将程序分成几大模块,并分析出模块与模块之间的联系。

而所谓的联系,实际上就是数据的交互。

接下来就是将每个大模块又分成一个个小模块,这个时候的小模块就是功能相对独立函数了。

最后一步,这才是考虑具体某个函数的代码应该怎么写

于是这些功能独立的函数组合在一起形成了一个大的模块,而所有的模块组合在一起,就是一个完整的程序了。

这样做有几个好处,最大的好处就是将程序分成块儿了之后可以多人分工合作,当然前提在对程序分块儿的时候就要定义好对外的函数的接口,如函数的名字、参数列表以及返回值类型。

其次就是方便维护,如果要增加或者修改功能,就只需要修改某一部分,只要对外的函数接口不变,其他模块就不会受到影响。

由于我和小弦子初次接触这种理念,老爹事无巨细,一一为我们解释得清清楚楚。这么一个小游戏程序在老爹解剖之下被分为了三大模块:地图加载、人物移动、状态保存和过关判定。

地图加载又分为从文件中读取地图数据到地图二维数组和从根据二维数组加载图片元素。

人物移动分为地图二维数组中元素的变换和图片元素的变化显示。

状态保存是为了降低游戏难度,每次地图二维数组的元素发生了改变时,就将数据保存在本地文件中,当游戏玩家按了返回上一步按钮后,就从本地文件中读取数据,重新加载地图,从而达到「后悔」功能的效果。

不然的话一旦操作错了一步,就得重新开始关卡。原本推算过关方法就是一件令人心里烦躁的事情,如果还需要重头再来,很容易让玩家产生砸电脑的冲动。

过关判定还是和原来一样,没有什么变化。

除此之外,老爹还让我们把一些用的地方比较多,且值固定的数据定义成全局常量,比如说图片尺寸,这样以后如果图片的尺寸发生了改变,只需要修改一个地方就可以了。

老爹将所有的东西:各个模块的函数接口,模块下的各个小模块的函数定义,全局变量和常量都用一个文档记录得清清楚楚,然后分发给了我和小弦子。

「刚刚我几乎给你们演示了开发一个软件的全部过程,这份文档也算得上是设计概要了,现在就由你们俩合作,将这个程序给敲出来。

其中涉及到文件保存和读取的地方先定义一个什么都不做的函数放在那儿,等到我们明天学习了文件指针后再添加上去就好了。」

老爹布置完任务,随即宣布今天的课程结束。

今天的内容倒是不多,但是都很重要。主要讲了关键字static、external的用法,C语言内存分区,提取相似的代码封装成函数,和算法的第一次接触以及自上而下程序设计理念。

基本上都是一些摸不着的理论知识,并且只有通过一定量的代码累积才能够体会到这其中的好处。

但是这些知识却无处不在,影响着程序开发的方方面面。就拿自上而下的程序设计理念来说,如果一个程序的模块划分得好,不禁能够提高程序开发的效率,同时也方便日后的维护工作。

「写代码不是功能实现了就算是结束,其实写程序也算是一种艺术,在追求高效的同时也要追求优雅。代码说到底不过是一种文档,既然是文档,那自然是给人看的,所以注释是必不可少的!一个好的代码文档,里面的注释可能会占到整个篇幅的50%以上。

当代码写出来之初,世界上只有两个知道是什么意思,一个是程序员自己,另外一个是上帝。如果没有注释的话,在半个月后世界上就只有一个人知道是什么意思了,知道是谁么?」

老爹笑着问道。