边学边做边玩:我的类魂斗罗Java小游戏与Java学习(1)
用 JavaSwing 开发经典横版射击游戏:从 0 到 1 实现简易 Contra-like 游戏-CSDN博客
很高兴看到我练手的小游戏能收到这么多学习者的欢迎,我将在此篇分享我的开发日志。
一·脱胎
我学习的案例是飞机大战,经典经典项目。但是鉴于飞机大战,坦克大战这种,已经被大家写烂了,现在你都能找到用MySQL写的离谱版本,或者3D版的坦克大战。但是横板游戏好像没看到有几个人做,我便想主动探索下这个领域。当然,我没有用任何游戏引擎。我是来学Java和普适性代码思想的,不是单纯来想做游戏的。
一个经典复刻让我有了注意。
二·起手
最开始的,当然是贴个背景。我找不到那么长的好图片,直接把一张图片扩展成三张,然后让它随着人物的移动反方向移动来展示人物的移动。
这张很有非洲风情的日落草原成了答案。
然后是贴人物,贴敌人。主角我直接用了原作的矢量图,敌人。。。换个色就行了。
我采用BackgroundPanel和PersonPanel两个底板来装底部图片和其他元素,实现谁也不撞谁各玩各的。
对于本人的人物,我使用了Person类(其实这块有点打包不严,毕竟Enemy类是改写的Person类)。
人物当然有x,y,生命,动作状态,移动速度与方向等等。
ContraLListener.java就被用于进行监听,左右,跳,各种攻击啥的。具体的实现可以去看源代码。
对于资源在哪里可以找到,我推荐一网站(翻墙会更快)。
Download Free Vectors, Clipart Graphics, Vector Art & Design Templates
三·动作
Bullet是一个子弹类,我把它画在了PersonPanel,方便撞击。
伤害调用人物的受伤代码。
两个人物又有不同的攻击方式,比如,枪托向上,雷斯飞肘,西德琳的激光(能全看懂这几个的你的成分也和我一样复杂...)
分别在受伤那个地方填入不同的值就好了。
注意你在做伤害的时候是想让人物“泡在激光里”按帧计算伤害还是在打到的唯一一下判断伤害,否则你将在一下的攻击力泡几十帧...
四·线程
ThreadContraL类是线程控制类,主要负责往里面扔各种东西。。。
比如move啊,伤害判定啊,敌人行为啊,你甚至不用看顺序...
五·敌人AI
这部分直接一个巨大的Random比大小+ifelse...
把雷斯飞肘和跳跃激光调小一点就好了吗。
六·声音
使用javazoom库,导入了声音的调控,实现了播放bgm和打击音效。