扫码阅读
手机扫码阅读

基地保留节目--塔防游戏

119 2024-02-28

版权声明:本文由神州数码云基地团队整理撰写,若转载请注明出处。

7月的某一天晚上9点,2021年刚毕业的尹煊博在公司里紧锁着眉梢,一边敲击着键盘一边自言自语的囔囔着:“为啥我的兵就出不来呢?”这天应该是他入职还没满一个月,而他正和其他小伙伴一起负责塔防游戏第四个版本的开发工作。目测现在他正在囔囔的问题,应该已经不知道是他开始塔防游戏后遇到的第几百个问题了。

塔防游戏开发是神州数码武汉云基地针对应届毕业生培训开发的一个代码开发培训项目,也是每一届学生必须经历的培训项目,每一个新版本需要在上一个版本上进行改进。所以每次项目启动会上都会发出绝望的灵魂疑问----这个游戏我们刚毕业的学生怎么做的出来,但是每次项目总结的时候大家又会收获满满的大谈特谈。这是一个怎么样的项目?让学生们如此又爱又恨呢?

先来听听往届学生对项目的感想:

尹煊博

2021年5月份基地实习,2021年7月成为正式员工,负责塔防第四期开发工作。

今年刚进公司没多久,给我们分配了一个做塔防游戏的任务,其中的各种辛酸往事就不提了,还是让我分享一下我们做塔防游戏的经过吧。

首先领导提出了一个需求,要玩家对战。听到这个需求大家都懵了,塔防如何才能对战?在我们眼里,这个需求就和“五彩斑斓的黑”一样。但是需求出来了,光吐槽没有用,我们得解决问题呀,开了几次会之后,我们得出了几种方案。第一种,最朴素的方式,两个玩家分别进行游戏,最后看谁的得分高。第二种,一个玩家扮演怪,一个玩家扮演塔,进行怪和塔的对战。

第一种太过简单,pass~,第二种经过讨论,发现太难平衡,pass~,于是有了最终采纳的方案,这是我参考以前玩的一个RPG想出来的:怪物不再拥有起点和终点,而是在一个闭环里绕圈,两个玩家在两个场地上各自游戏,都扮演防御塔。这时候就有朋友要问了,那你这各玩各的哪来的对战一说呢?这里整个游戏的重点就来了,怪初始在两边场上都只有一只,在己方场上杀死一只怪,会在对方场上增加两只怪,这样两个场地就交互起来了,相当于是对手场上的怪是自己派过去的,多么巧妙地设计啊,一下就解决了对战过程中如何刷怪地问题。并且杀一只生成两只,能让两边的怪随着游戏的进行不断增多。最后就是胜负地判断了,理所当然的,哪边怪少,就说明哪边厉害,他就获得胜利。

游戏里一部分代码参考了上一版的设计思路,修改了一些上一版不好的地方,并修复了一些bug。在上一版的基础上,我们增加了这些东西:

1,更改整个游戏模式,把传统的塔防改为了2人对战模式

2,我们部署了服务器,来进行玩家登录,玩家匹配,游戏中的数据交互,这些功能我们是使用websocket来实现通信的

3,上一版的防御塔是一声令下所有防御塔同时攻击,我们给每一个防御塔分配自己的攻击间隔,并且加上了防御塔打怪的逻辑,比如优先打血少的怪

4,增加了聊天功能,两个玩家对战的时候可以实时聊天

5,增加了技能,消耗金钱可以使用技能

6,增加了怪物图片的预加载

7,垃圾回收

目前基本功能实现了,还有很多增加的地方,比如把1v1增加到2v2,多一个队友能让游戏有更多的不确定性,我觉得游戏就是要每一盘都不一样才好玩。我还在游戏中埋了一个小彩蛋,提示一下,和聊天框有关哦,来猜一猜彩蛋是什么吧。

开发的过程辛苦而又充实,有时候会遇到令人沮丧的bug,绞尽脑汁就是想不出来问题出在哪里,但是解决掉bug之后的感觉,真的很爽。我现在还记得那个月黑风高的夜晚,怪怎么都出不来,我反复查看代码都不知道是为什么,而且大夏天的还有蚊子,我的心急如焚的同时还在往蚊子咬的包上掐十字。最后我在控制台输出变量,逐个排错,把错误锁定到了前端画布上,结果调整了一下画布的属性,成了!错误原因竟然是画布的大小太小了,怪画到画布的外面去了。困扰了我半天的错误,竟这么简单。我心里好像出了一口恶气一样(内心os:”你个bug看我办不办你就完了”)。小伙伴们也花了很大的心思,美术风格上进行了主题的设计,还有数值策划,功能分析,前前后后开了好多个大大小小的会议。

这个培训项目非常令人难忘,如果学校里也能采用类似的寓教于乐的教学方式,我相信我应该会更厉害~,另外提一句,游戏里的一些内容都是我们小伙伴自己画的,这届学生暗藏高人啊!


雪魁

2021年春进入基地实习,2021年7月成为正式员工,负责塔防第三期开发工作。

春末实习,通过一张offer,我来到了神州数码的武汉云基地。在这里,我见到了一群同样懵懂但很有活力的同伴们。我们迅速转变身份,努力的想融入公司的节奏中。第一个项目是实习生塔防游戏第三版的开发。我们知道这是第一个启蒙项目,是我们走出校园的第一个关卡,我们不敢懈怠。

很幸运,带我们完成任务的老师是超级厉害的坤少。坤少的讲解很详细,但是我们八个小伙伴当中只有一半的人是计算机专业,对于另外的四个数学专业的小伙伴,无疑是听天书一样。代码第一遍通读下来,我们全都听的昏昏沉沉。

首先,很多专有名词,不知道什么意思。然后,JavaScript的技术栈,几乎没人学过。接着,游戏运行原理难以理解。最后,版本控制到底是个啥?

带着无数的疑问我们开始了第一轮为期一周的开发工作。根据坤少的建议,我们按照自身方向划分出不同职务。开始了我们的技术扫盲工作。

身为游戏引擎和策划的我,根据大家的头脑风暴,抛开技术水平,开始设想这个游戏要怎样设计才更好玩。最后我们对上一个版本制定出以下需要改进的地方:

1, 金额不够,不会弹出提示。

2, 塔的样子都一个风格,不足以看出来威力大小。应该加上不同样式的子弹。

3, 塔的攻速都是一样的,贵的塔和一般的塔,面对走位怪 都无可奈何。

4, 塔的攻击方式,太单一,只能发射颗粒。应该加上某些的aoe伤害,或者减速效果。

5, 需要塔可以升级,并且升级以后,会变得不一样。视觉效果更厉害。需要介绍属性。

6, 小怪的大小应该调整,要让人一眼看出这个小怪是 高等级的 还是低等级的。小怪的行走方式需要动起来。

7, 获取金钱的方式 应该加多。单纯的靠打怪 挣钱就一直很缺钱。哪怕是游戏高手 也很缺钱!

8, 音乐,这一点不加上会很单调。

9, 结尾处应该放置一个象征性的 保护对象。或者一个门,不应该直接跑出图画外。

10, 可以增加功能,就是技能。比如说放技能 会一瞬间发射一堆子弹。或者 加大 aoe 效果的范围和强度。

11, 改变整体风格,为塔防游戏设计一个背景。

12, 需要更多的地图。

在三天左右的基础知识扫盲以后,我们开始研读起来了代码。前端和UI开始设计整体格调。随着期间不停的向前辈们请教,我们在第一个周期里,终于明白了游戏的运作原理。其核心无非就是JavaScript的定时器方法。全篇的实现,都是周期性的执行各个板块的函数,才让游戏动了起来。

在第二个周期里,我们开始按照上面的需求草图,进行分头开发。不懂的就去找百度。每天都开会。我像个蚂蚱一样,反复横跳于塔,怪,子弹,地图等核心板块之间。最后不负众望的完成了第一个闭环。虽然当时感觉很累,回想起来,又特别美好。现在那些小伙伴都变成了我职场生活中最宝贵的财富。

接下来,最大的挑战是那一堆各种莫名其妙的bug。最后的几天里,我们从早到晚的忙,感觉上班的时间过得特别快。每次的修好一个bug,都会让我们成就感爆棚。然后在那个周末,我们在这个陌生的城市,就行了第一次聚餐,虽然才相处不到两周时光,却让人感觉都是老朋友一样。

离距离交付还有两天时候,页面卡顿的bug还是找不到原因。这时候坤少都不抱希望了。让我们准备交付的代码和材料。可是总感觉一卡一卡的游戏,还能叫游戏吗?我们就挨个输出变量,一点点的找原因。最后发现,在游戏状态判断函数里面,每一次初始化,都会重新调用一组定时器。结果定时器被越开越多。实际上,我们只需要一组就满足了。结果几十上百个定时器互相作用,导致游戏卡成ppt了。最后我们在交付的前一晚,通宵干掉了这个bug,完成了交付。

这是我们的第一个项目,对我们来说它意义非凡。可能我们这八个小伙伴,在未来会去到不同的岗位发光发热,但是我们都不会忘记这第一个让我们拼劲十足的塔防项目。


2020年冬进入基地实习,2021年7月成为正式员工,负责塔防第二期开发工作。

塔防游戏是我进入神州数码云基地的第一个团队协同开发任务,这个项目让我第一次接触到这种团队开发的模式。并且这一期的塔防游戏是一个从0到1的过程,那么其中也遇见过各种各样的困难。解决开发中问题的同时,也在开拓自己的知识面,提高自己的软件开发能力。

在开发过程中,遇见了不少难点。首先从开发语言来说,整个项目使用JavaScript进行开发。对于使用JS进行游戏开发,基础知识还是较为匮乏,常常走弯路。好在我们及时查漏补缺,对新学的知识进行归档记录。将每个人学到的新知识进行一个归档总结。开发效率逐渐提高。

其次从开发过程的角度来看,主要的重难点集中在游戏功能的各个开发模块中。其中小兵移动、建造防御塔、子弹发射、选塔等等。列出这些需求的时候,脑子都是一团乱麻,不知道从何下手。此时带领我们的学长坤少给了我们一个建议。让我们多开会讨论,细分细分再细分功能点。从此之后,我们团队就陷入了各种讨论需求的会议中。有什么问题一个人解决不了的,直接会议室走起。效果还是很显著的,没有像无头苍蝇一样找不到方向。开始一行代码一行代码的写。由于大家的JS基础都比较薄弱,直接演变成一三五写BUG,二四六改BUG,最后直接自闭了。为了解决无知的问题,每天百度都要打开上百次,只能一个功能点一个功能点的磨。最终所有功能点形成一个闭环的时候,大家都感觉像获得了新生。

最后,到达测试环节,又进行了一个漫长又痛苦的找BUG和改BUG的阶段。“为什么你的代码运行没问题,我的有问题“,这是我们最常说的一句话。这个阶段非常的令人崩溃。只能一行代码一行代码的测试,最终再去解决问题。来看看我们一部分BUG。

通过此次开发任务,更明白了写代码之前的工作准备也是很重要的。项目开始之初保证足够的项目文档:需求,功能点,任务时间甘特图等等。更需要有一个明确的里程碑目标。根据项目人员能力和特长,任务分配需要详细的落实。代码提交规范、新知识的归档记录等等细节也要做好统筹规划。

最后我想说,这真是一个让人又爱有恨的项目。


江坤

2020年毕业,目前是基地数据团队TiDB4PG的主要开发人员之一,有兴趣的同学可以关注一下我们的项目:github.com/DigitalChina...

我应该算是这个项目的第一个开发人员,谈及其历史是一言难尽。最早老板交代项目的时候,我人就傻了,我们团队还做游戏的?做为一个资深的死肥宅,玩过游戏无数,曾多少次梦想能够打造一款属于自己的游戏,竟然要在今天实现了?我的脑海中瞬间涌出无数的游戏情节,人物模型,构造,玩法,是RPG还是FPS,还是moba等等等等,甚至连充值系统都思考好了。然而最终看到要求的时候呆住了,要求很简单,就一个简单的html塔防游戏大概三四天时间让我做完,虽说与梦想差距有亿点点大,但是对游戏热爱的我依然充满激情开始了这个项目。

Html基础并不好的我,想要在短短几天内完成这个小任务还是有点难度的,中间遇到的问题也是非常多,例如小怪的寻路算法,塔的攻击模式,画布的层次如何设计,如何保证动画流畅性和稳定性,还有游戏性等等。在做游戏的过程中,也是非常感谢基地的其他同事,很明显大家对做游戏都挺感兴趣的,在我制作过程中不断的过来提出各种建议(需求),让一个原本就不简单的任务变得更是艰难,当然在提出建议(需求)的同时也是给出了很多解决方案,这让整个项目也是能平稳的前进,最后按时完成。

其实在整个塔防项目的过程中,感受最多的是这个项目并没有考验我代码开发能力有多强,而是解决问题的能力,面对种种突如其来的问题时,以我的经验是很难直接解决的,所以我需要有各种办法去解决这些问题,可以找同事,可以百度,可以删功能甚至可以直接解决发现问题的人等等,但是怎么去快速解决这些问题最终达到一个满意的效果,这是需要磨练的。

后面来了一批又一批新的实习生,塔防也开始了第二期,第三期等,那么我也作为了一个小组长去带领他们了解项目并继续开发这个项目,因为我是做这个项目过来的,所以他们会遇到哪些问题,我是清楚的,同时有一个区别是后面的塔防都是一组一组来做的,不再是像我一样单枪匹马,所以也会遇到一些新的问题,比如任务分工,代码管理和进度同步等等。

在这一块上,我也是会尽量的牵引大家,帮助大家去正视这些问题,分析这些问题,最后解决问题,那么在这个过程中,简单总结比较重要的两点:1. 文档。2. 定期会议。这两者都是在团队协作过程中非常重要的,充分的过程文档和定期的同步会议,能让大家沟通的更为顺畅,能够更快的分析问题所在并及时解决问题。

最后看到塔防项目能有一批又一批优秀的学生来开发,来填充,感觉是很奇妙的,虽然不是自己亲手一步一步的完善这个游戏,但仍然感觉到这个游戏正向着自己一开始的那个梦不断的走去,期待它的成长。

金佳

作为这个培训项目的负责人,设计的初衷就是让学生在最短的时间内,了解项目开发的整个生命周期,从需求整理开始,原型设计,UI设计,任务拆解,进度跟踪,代码开发,版本管理,回归测试,上线发布等等对了解掌握开发流程里的各个环节工作内容。由于是团队协作,学生们在项目过程中还会真实体会到团队开发过程中的各类问题,最常见的问题就是,“我的代码怎么又被你覆盖了~!“,这一类问题虽然在高级程序看来是条件反射般不过脑操作,但是对于学生来说确实需要一个有针对性的技能训练过程。

说到最后,也是我们今天的目的,就是把这个项目开源到github上,让学生从入职的第一天起就开始学会拥抱开源世界~~!

项目地址:

github.com/DigitalChina...

内网地址:

towerdefense-towerdefense.dev.wh.digitalchina.com...

原文链接: http://mp.weixin.qq.com/s?__biz=Mzg5MzUyOTgwMQ==&mid=2247487001&idx=1&sn=f48045053900a155aa462cde20f36602&chksm=c02c35bff75bbca9990ed2e5d0dcd5b77978596918ed3c92f81e5e25d734b72e3c9fc58883bf#rd