周六,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给开源世界的惊喜,希望每一个开源项目都是一粒种子,星星之火可以燎原,在此源码基础上能涌现一批更好玩的游戏。通过这些源码能培养出更多游戏开发者。
游戏中我们是朋友,聊天侃地,在这里我们可以无拘无束的发言,不会有任何人阻挠,还有大家最喜欢吐槽的小编,请把口水收集好,随时准备和小编一起吐槽!魔兽世界怀旧服势头正劲,暴雪极有可能在做这两件事,时机成熟... ...
大家好,欢迎来到由小鱼干开讲的《我功夫特牛新鲜事》,本期小鱼干将给大家带来比武大会秘籍选择、3天获得9286荣誉值等新鲜事,以及每期的精选小知识,话不多说,抓紧时间和小鱼干一起来看看吧!比武大会打到1... ...
每到年底,都会有众多的媒体票选活动,选出过去一年在各个领域表现最亮眼的游戏,以及找出综合评价最高的年度最佳游戏。而在近日,以分析游戏技术、优化为主的知名媒体Digital Foundry,也以最高标准... ...
新赛季第一天给大家带来一期跳远流猴子 大家好,我是取名鬼才小y。 开局就知道云中君要来反野,等队友打得差不多了再上,本来我要玩云中君,但是对面直接秒选,那不好意思,这局把你打到被举报。这边一技能敲一棍... ...
王者荣耀冬季冠军杯选拔赛第二日最后一战迎来KPL赛区两支战队的交锋,即eStarPro对阵TS,目前TS四战四胜,而eStar两胜一负,想要晋级此战必须拿下,同时eStar无心替换下Alan,那么双方... ...