最近准备去参与一个面试,所以在忙忙完实验室的工作后,抽了两天把游戏的内容充实一下,因为最开始就是要做造梦西游的“复刻”的,所以去掉了之前的“躲箭”的代码,相应的增加了与怪物之间的交互的内容。
主要增加了三个场景,我分别从这三个场景中比较重要的内容进行思维抽象:
一、近战怪物
1.AI寻路实现。
定义怪物的攻击范围后,有两种情况:
(1)当主角在近战怪物的攻击范围内,则怪物启动其类中的“攻击函数”,绘制攻击动作并进入僵直阶段。
(2)当主句在近战怪物的攻击范围之外,则怪物会依据主角方向关系向主角方向移动。
2.怪物攻击
当主角在怪物攻击动作的“落下”阶段时仍处在怪物的攻击范围内,则主角会相应掉血,掉血量取决于近战怪物攻击力。
二、远程投掷类怪物
1.场景切换
在讲解远程投掷类怪物之前,先描述一下场景切换的原理。
主要的思路就是巧用参考系,背景不动,参考图片动(这里的参考图片为带有云纹的楼梯),就可以构造出简单的场景移动效果。
这里的长楼梯的移动效果是利用两个占满屏幕的长楼梯,他们在屏幕上各显示一部分,在需要场景移动时统一向左移动,看起来长楼梯就像是“循环”了一样。
2.投掷类怪物
远程类怪物的投掷物要额外定义为sprites,具体用法可以参考pygame中给出的参考,这里不作详细描述。主要有以下几种情形需要处理:
1.当主角在投掷类怪物的攻击范围(这个范围远比近战怪物要大)内,怪物会投掷相应的道具,道具具有一定的水平和垂直方向加速度,以做出抛物线的效果。
2.当主角不在攻击范围内,则控制怪物往主角方向移动。
3.循环判断投掷的道具中,是否有与主角位置重合的道具,如果有,就相应地减少主角血量,具体数据取决于投掷类怪物攻击力。反之不做操作。
三、Boss
boss这里的话,没什么难度,只是boss的动作比较多,需要整理的内容也就相应的比较复杂。
1.boss有两种攻击方式,主角在boss攻击范围内时,轮流执行自己的攻击方式。
2.“向天”射箭的攻击方式,在创建这些“箭”的时候,会自动带上目标落点(即Boss在射箭时的主角所在位置),剩下的就是些加速度的处理了
四、游戏胜利/失败结果
1.胜利失败与否,会在游戏结束时,在右上角显示,其实就是个简单的图形绘制啦!
结语
至此,本地游戏的部分就写完了,下一步的计划是申请一个云服务器,然后试一试联机游戏能否实现。