就跟大家伙儿聊聊我最近瞎折腾的一个小东西,我管它叫《机器人英雄之战》。也不是啥正经游戏,就是自个儿练习,鼓捣出来的一个小玩意儿。
一切的开始
话说回来,为啥会想着搞这么个东西?主要还是前段时间,我在网上瞎逛,看了一些机器人对战的视频,还有那种编程让机器人自己打架的比赛,一下子就觉得,这个有意思!咱虽然搞不了那么高端的,但弄个简单点的,自己控制机器人打打,应该还是可以试试的嘛
我没啥头绪。就想着,得有机器人,得能动,得能打。听起来简单,真上手了,才发现里面的道道还真不少。
东拼西凑的准备阶段
动手能力还行,但美术这块儿是真不行。第一步,我就开始在网上扒拉素材。找了些免费的机器人模型,有些看着还挺酷的,虽然糙了点,但咱也不是做商业大作,能用就行。
然后就是场景。一开始我想弄个复杂的城市战场,后来发现,模型一大,我这破电脑就有点带不动了。得,还是简单点,弄了个类似竞技场的平台,四周加点简单的障碍物,齐活儿。
接着是动作。机器人得能跑,能出拳,能放个技能啥的。我又开始找动画片段,有些是模型自带的,有些是我自己用软件瞎调的,反正就是让它能动起来,看着别太僵硬就行。
代码才是硬骨头
模型、场景、动作这些都好说,毕竟是“拿来主义”。真正让我头疼的,还是写代码控制这一切。
我用的开发工具,就不说具体名字了,免得有打广告的嫌疑。反正就是那么几个主流的。我先让机器人能跑起来,用键盘控制前后左右。这个还算顺利,网上教程也多,照着葫芦画瓢,很快就实现了。
然后是攻击。按下某个键,机器人就挥拳。这个也还但问题来了,怎么判断打没打中?我一开始想得简单,就设个碰撞检测,拳头碰到了对方,就算打中了。结果发现,经常出现“隔山打牛”或者明明碰到了却没反应的情况。
后来研究了下,才知道这里面还有什么攻击判定帧、受击盒子之类的东西。我,也搞不了那么精细,就大概在机器人前面放了个看不见的“触发器”,拳头挥出去的时候,如果对方的身体进入了这个触发器的范围,就算命中。
最麻烦的是AI。 我想着总得有个电脑对手。这AI可把我给难住了。我希望它能:
- 在我进入它一定范围的时候,能主动追过来。
- 离得近了,会攻击我。
- 血量少了,会知道躲一下(这个后来放弃了,太难了)。
就这个简单的追击和攻击,我都调试了好几天。一会儿是AI傻站着不动,一会儿是AI跟疯狗一样追着我打,根本没法玩。改来改去,用了很多“如果...那么...”的逻辑,勉强让AI看起来有那么点“智能”了。
加点“特效”
光打来打去也单调,我还想着加点技能。比如,一个机器人可以发射导弹,另一个可以放个护盾。导弹好做,就是一个飞行道具,碰到东西就爆炸,播个爆炸动画,扣点血。
护盾,就是一段时间内减伤。这个实现起来也还行,就是加个状态判断。
为了让打斗看起来热闹点,我还加了点打击特效,比如命中时冒点火花,机器人被打爆了就散架(就是换了个破损的模型)。
最终的“成果”
前前后后,断断续续搞了差不多大半个月,每天下班回来就琢磨一会儿。出来的这个《机器人英雄之战》,挺简陋的:
- 就两个可选的机器人,一个近战猛男,一个远程炮手。
- 一个简单的竞技场地图。
- 一个傻乎乎的AI对手。
- 输赢判断就是看谁血条先空。
操作也简单粗暴:方向键移动,J键普通攻击,K键技能。没了。
虽然简陋,也没啥深度,但好歹是我自己一步步弄出来的。从啥也不会,到能让两个铁疙瘩在屏幕上打起来,这个过程还是挺有成就感的。尤其是解决了某个BUG,或者实现了一个小功能的时候,那心情,别提多舒畅了。
这回实践,主要还是练练手,熟悉一下开发的流程。以后有时间,说不定还会继续完善它,或者再开个新坑,搞点别的有意思的小玩意儿。分享出来,也就是记录一下自己的折腾过程,希望能给同样喜欢瞎鼓捣的朋友们一点小小的启发。折腾无止境,生命在于创造嘛