周六,Terry Cavanagh在博客上宣布其弹跳冒险小游戏VVVVVV六个V,宣布值10周年生日之计公开其源代码。该游戏于2010年1月11日格林尼治标准时间凌晨3点首次发布。
六个V是一款经典和奇异风格结合的高难度动作过关游戏,利用复古的8位平台冒险游戏,在游戏中玩家扮演一个太空船船长,全船被困在怪异的空间之内,所有船员都被孤立无援的分开在不同的地方,作为船长,你要大胆的通过冒险来探索这个神奇的世界并且逃离这个地方,借助心灵传输的力量和对地心引力的控制来完成冒险。六个V不仅游戏名字很奇葩,大家可能熟悉其中文名弹弹跳跳闪避人,玩法也颇新颖奇葩,玩家够反重力跳跃、疾行颇具难度。当然我们主要感兴趣的是其公开的源码,今天虫虫就带大家一起学习一下。
源代码概览
VVVVVV源码托管在github上,具体地址为github:/TerryCavanagh/vvvvvv,公开两天后,积累的了约4K的星。
源码仓库包含两个版本:
桌面版(由Simon Roth于2011年移植到C++,后来由Ethan Lee进行了更新和维护。
移动版(基于Adobe AIR的Actionscript编写),基于原始v1.0 Flash版本游戏。
C++版本中有很多奇怪的东西,由于该游戏起初是用Flash ActionScript开发的,然后通过移植到C++的,由于早期编程比较随意,所以有一些将i,j和k之类的临时变量声明为每个类的成员。可能回会致难以跟踪错误。特别是在实体冲突中,几个函数将共享相同的i变量。
主要的游戏文本,则主要在Scripts.cpp和TerminalScripts.cpp类中。这些功能基本上将数据加载到一个非常简单的脚本解析器中,该脚本解析器控制过场逻辑。
大多数关键游戏代码都位于三个文件中:input.ccp,logic.cpp和错误命名的titlerender.cpp。游戏中的每个状态都包装在这三个文件中,分别位于"teleporterrender"和"towerlogic"之类的功能下。
所有实际关卡通过使地图编辑器生成的大量数组中硬编码。位于源代码的Spacestation2.cpp,Finalclass.cpp等中。
VVVVVV基本上没有临时对象,并且在首次初始化游戏时会用数百个空白条目填充其所有实体数组(及其大多数其他数据数组)。
除了过场分析器,游戏使用另一种控制游戏逻辑的方法:整体式状态机这样可以控制触发更复杂的过场动画的开始,传送器发送消息。可以在Game::updatestate中找到它。
所有状态都被编号,可以一直计数到4099(有间隔)。在开发游戏时,其中1000触发了闪亮的小饰品的收集,3,040触发了一个特定级别的完成,3,500触发了结局。
由于很多代码使用复制并粘贴策略,并改变值,所以代码可以读性不是很好,需要大家参与完善。
惊喜生日派对
最后我们祝贺VVVVVV十周年庆祝,并感谢Terry Cavanagh给开源世界的惊喜,希望每一个开源项目都是一粒种子,星星之火可以燎原,在此源码基础上能涌现一批更好玩的游戏。通过这些源码能培养出更多游戏开发者。
本文来自投稿,不代表本人立场,如若转载,请注明出处:http://www.sosokankan.com/article/2196504.html