今天继续分析flappy bird的源码。重温一下源码的目录结构。

在本系列第一篇中我们分析了game.js文件,也就是整个程序的架构。这一篇我们来看看option.js文件,这个文件的内容很简单,主要是配置一些游戏中各类元素的参数。

我们还是按照惯例先上源代码:


var flappy = (function (self) {
'use strict'; //设置
self.option = {
//重力加速度,屏幕像素和实际物理上的米有差别,所以存在换算
g: 400,
//跳跃的初速度,控制猪的弹跳力
v0: 400,
//柱子移动速度
vp: 2.5,
//频率,控制动画帧数,默认20ms
frequency: 20,
//关卡数
levels: 100,
//开头的空白距离
safeLift: 500, //地板高度(和图片有关)
floorHeight: 64, //猪的宽度
pigWidth: 33,
//猪的高度
pigHeight: 30,
//猪当前高度
pigY: 300,
//猪距离左边的距离,
pigLeft: 80, //柱子Html
pillarHtml: '<div class="top"></div><div class="bottom"></div>',
//柱子宽度
pillarWidth: 45,
//柱子上下间隔高度
pillarGapY: 108,
//柱子左右间隔宽度
pillarGapX: 250,
//上柱子的基础定位值(就是top值,和css写法有关)
pillarTop: -550,
//下柱子的基础定位值
pillarBottom: -500
}; return self;//这个执行完之后flappy就是一个含有option属性的对象了 })(flappy || {});

关于其中var flappy = (function(self){

//其他细节

})(flappy || {})的用法如果还是不太理解,可以再去看看本系列的第一篇。

看完这个源码我相信绝大多数同学都没有一点压力,唯一可能产生疑问的就是,为什么要这么做呢?我们为什么要单独的用一个文件来专门存放这些配置参数呢?

我们经常听到关于程序设计的一些专业术语如:低耦合、高内聚、可维护性、模块化等等,先抛开这些模糊的概念不谈,我们来说说现实生活中随处可见的一个概念——单一职责原则。

大扫除的时候,扫地的同学只负责扫地、擦玻璃的同学只负责擦玻璃、擦黑板的同学只负责擦黑板,大家各司其职互不牵涉。检查的时候发现地没有扫干净,那就肯定是扫地同学的责任,相应的玻璃没干净就找擦玻璃的同学来负责。一旦扫地的同学不仅负责扫地,同时还顺便帮忙擦擦玻璃的话,检查时如果发现玻璃没擦干净,这个时候想要知道谁负责的话就很很麻烦了,起码要把两个人叫来问个清楚,说不定他俩再互相推脱一下。在程序设计中我们把各司其职个安其分称之为单一职责原则,一旦出了任何问题,我们能很快的找到哪个模块该对问题负责。

了解了什么是单一职责原则,我们再来看看这个option.js文件,我们很容易的就会知道,这个option.js文件的职责就是配置游戏参数供其它模块使用,一旦需要调整参数,比如我要把猪变大一点,把柱子之间的距离加大一点同时把地板额高度设高一点,我只需要更改option.js文件就可以了,改完后他会立刻反应到每个引入他的文件中去。如果你把这些配置项分别写在各自的模块中,那么一旦需要调整,你可以想象你有多么痛苦。

这一节的内容很简单,但是需要读者自己加深理解,形成程序设计的思想并加以运用。

flappy pig小游戏源码分析(2)——解剖option的更多相关文章

  1. flappy pig小游戏源码分析(3)——解剖util

    这一节我们继续高歌猛进,如果对源码中有无论无何都理解不通的问题,欢迎和我交流,让我也学习一下,我的qq是372402487. 还是按照惯例看看我们的目录结构. 我们在前两节中已经分析了game.js, ...

  2. flappy pig小游戏源码分析(1)——主程序初探

    闲逛github发现一个javascript原生实现的小游戏,源码写的很清晰,适合想提高水平的同学观摩学习.读通源码后,我决定写一系列的博客来分析源码,从整体架构到具体实现细节来帮助一些想提高水平的朋 ...

  3. flappy pig小游戏源码分析(4)——核心pig模块(未完待续)

    热身之后,我们要动点真格的了,游戏叫flappy pig,我们的pig终于要出场了. 老规矩,看看目录结构,读者对着目录结构好好回想我们已经讲解的几个模块: 其中game.js是游戏主程序,optio ...

  4. xss小游戏源码分析

    配置 下载地址:https://files.cnblogs.com/files/Lmg66/xssgame-master.zip 使用:下载解压,放到www目录下(phpstudy),http服务下都 ...

  5. HTML5小游戏源码收藏

    html5魅族创意的贪食蛇游戏源码下载 html5网页版打砖块小游戏源码下载 html5 3D立体魔方小游戏源码下载 html5网页版飞机躲避游戏源码下载 html5三国人物连连看游戏源码下载 js ...

  6. Creator仿超级玛丽小游戏源码分享

    Creator仿超级玛丽小游戏源码分享 之前用Cocos Creator 做的一款仿超级玛丽的游戏,使用的版本为14.2 ,可以直接打包为APK,现在毕设已经完成,游戏分享出来,大家一起学习进步.特别 ...

  7. HashMap的小总结 + 源码分析

    一.HashMap的原理 所谓Map,就是关联数组,存的是键值对——key&value. 实现一个简单的Map,你也许会直接用两个LIst,一个存key,一个存value.然后做查询或者get ...

  8. h5小球走迷宫小游戏源码

    无意中找到的一个挺有意思的小游戏,关键是用h5写的,下面就分享给大家源码 还是先来看小游戏的截图 可以用键盘的三个键去控制它,然后通关 下面是源代码 <!doctype html> < ...

  9. C\C++ 1A2B小游戏源码

    学了一段时间,心血来潮写了一个1A2B小游戏,很多人应该玩过,是一个挺有意思的益智小游戏,之前用易语言写过,现在又用C++重写了一下. 编译运行无错,整体程序设计思路为:进入循环,初始化游戏,读入一个 ...

随机推荐

  1. css3实现非矩形图片效果

    经常在网站上看到有一些非矩形的图片展示.在以前可能我会毫不犹豫的直接放上张处理好的图片.但是这样的话确实有些不太友好.每每需要换图的时候,都要去开图像处理软件也是蛮拼的.自从有了css3的选装,妈妈就 ...

  2. 快速排序(quicksort)算法实现

    快速排序(quicksort)是分治法的典型例子,它的主要思想是将一个待排序的数组以数组的某一个元素X为轴,使这个轴的左侧元素都比X大,而右侧元素都比X小(从大到小排序).然后以这个X在变换后数组的位 ...

  3. c_str 以及atoi

    const char *c_str();c_str()函数返回一个指向正规C字符串的指针, 内容与本string串相同. 这是为了与c语言兼容,在c语言中没有string类型,故必须通过string类 ...

  4. 强大的CImage类

    这下有了CImage类,处理其他类型的图片不再寻找第三方类库了.加载到对话框背景的代码如下:  //从资源里载入背景JPEG图片 HRSRC hRsrc=::FindResource(AfxGetRe ...

  5. redis的key过期时间

    public void set(String key,String value,int liveTime){ this.set(key, value); this.getJedis().expire( ...

  6. 【转】win7如何设置共享目录,并且访问不需要输入用户名和密码。

    1.打开guest帐号,guest帐号默认情况下是不启用的 进入控制面板->用户帐户->管理其他帐户->激活Gust用户 2,右击共享目录,属性->共享->共享-> ...

  7. 你只是看起来很努力(只是做了一遍真题,草草的对了一遍答案,然后冲出自习室继续她学生会的事情了,骗自己更容易)good——想起了自己在六大时候的无奈

    (转)你只是看起来很努力一次上课,一个女孩子垂头丧气的跟我说,老师,我考了四次四级,还没过,究竟是为什么. 我说,你真题做了吗?单词背了吗?她拿出已经翻破了的真题,跟我说,你讲的所有的题目我连答案都记 ...

  8. MAC OS Nginx php-fpm相关

    Nginx 命令 sudo nginx // 启动Nginx #重新加载|重启|停止|退出 sudo nginx -s reload|reopen|stop|quit #上传文件限制更改: 进入ngi ...

  9. 转:C语言宏定义时#(井号)和##(双井号)的用法

    转自:http://www.cnblogs.com/welkinwalker/archive/2012/03/30/2424844.html#2678295 #在英语里面叫做 pound 在C语言的宏 ...

  10. *MySQL卸载之后无法重装,卡在Apply security settings:Error Nr.1045