实习的日子,最大的成果就是做了两个小游戏。一个是山寨版的雷电,一个是网络版疯狂的石头。
两个都是3人团队赶出来的作业,雷电用了1周,石头用了2周半。这一个多月很好的体会了敏捷开发,重构,团队合作。
由于是赶出来的东西,还有很多小Bug, 但怎么说也是个完整的程序了。
山寨雷电用的是破解出来的Starcraft 2的3D模型,用opengGL做了一个极简单的"引擎",仅做模型渲染用。敌人的出现次序通过配置文件指定,由于时间关系这里的配置方法太简陋,关卡的配置文件应该可以做得更好。自己添加了一些美术资源,比如爆炸碎片是队友用3DMax画的面片。爆炸用photoshop编辑过的。
战机发出的激光束实现了一个简单的骨骼动画,激光束是一条虚拟的"绳子"(即骨骼),图元在绳子的左右两边进行渲染。最初的设计用粒子效果,但是当战机左右移动时候,激光粒子就会散开,改用骨骼动画之后不会有这个情况,因为"绳子"一直跟随战机。
山寨疯狂的石头用纯python打造,有server和client端,server管理游戏大厅。client端用了pygame做底层库(实质是SDL库),CPU占用率有点高。
支持8个房间,一个游戏场景最多4个人网络对战,通过推不同效果的箱子攻击对方。用冰冻,爆炸等效果。通过做这个小游戏很好地理解了动作游戏的网络同步问题,期间还研究了一下盛大泡泡堂的通信方式。在有网络延时的环境下,如何处理玩家响应,逻辑同步,防止外挂三个方面平衡是个挑战。在本设计中,位置由客户端往服务端同步,而对于伤害,攻击,推箱等逻辑则需由服务器同一仲裁,客户端需等待服务器仲裁结果再作出反应。