此次作业是使用pygame模块自主设计一款2D游戏。
此次制作的游戏灵感来源于jumpKing,这是一款出售于steam的高技术游戏。
我们选择了他们的操作方式: 需A、D键来控制人物的移动,以及空格键使人物跳跃,并且空格键蓄力时间越长跳的越高
下面开始介绍一下,我们此次游戏的制作过程吧。
一,设计游戏的基本逻辑和界面。
这是在草稿本上面,画的一些基础的界面和事件的触发判定等等。
完整的游戏设计并没有在里面完全展示。
二,游戏中的class设计
1,player类
在Player类中,我们给了基础的自身属性:
rect为人物出现的初始位置,我们将人物的初始位置放置于随机出现的第一个平台的中间上方,所以需要创建人物时来导入,方便绘制人物的初始位置。
faceR属性判断人物的运动方向,1代表向右运动,2代表向左运动。
speed属性为人物在x轴上的运动速度。
gravity属性为人物在y轴上的降落速度。
live属性为判断人物是否存活。
Drop函数来控制人物降落。
Move函数控制人物的y轴移动,需要输入time,这个time是玩家按住空格键的时间,以此来控制人物y轴移动的长短。
2,Land类
这个class中,我们给了land类的基本属性:
image属性是用来存储land的图片,
rect属性设定了land的Rect属性,通过后面随机函数产生不同的left值,来控制land出现的不同位置。
rect.topleft接收外界给的init_pos值,即land的left值。
gravity属性为land在y轴上的降落速度。
Move函数即控制land类的降落。
三,程序的基本代码
下面是按照pygame的基础设置,来给定画面的宽和高,和接下来会用到的一些属性值。应该会在下面具体用到时再详细讲述。
下面的是我们载入的一些图片和音效。
接下来,就是需要不断更新的信息。
简单设置了游戏的帧率,背景什么的。
这里是显示力度条,根据time来显示长度,后面我们会对time进行重置。
这里通过自己设定的land_frequency来控制平台产生的速度。
这里使用判断来确保只运行一次代码。防止对后来的player产生奇怪的控制。
我们会在后面将每次产生的land存入一个group中,方便在这里不停的绘制,使用land的Move函数。
并在这里判断人物和land是否存在碰撞,并设置“jk_”开头布尔类,这些在后面来控制程序进行。
并且当平台低于一定高度时,我们会将那部分land从group中消去。
在player的live属性为True时,我们接受键盘的值,
如果是空格的话,改变player的相关属性。
time加0.5,绘制力度条,
当time达到20时,time将不会增加。
如果同时有左键或右键输入,我们将改变player的faceR属性,来控制人物的x轴运动方向。
我们需要对人物进行一些纠正,以防止人物图像超出画面的边界。
同时,当人物的rect.y超出了750就会显示游戏结束的图片。还有player的live属性为FALSE这样,就不会继续接受玩家的键盘指令了。
在最后我们统一更新人物绘制和当玩家键入不同按键时,人物的不同动作(包括正常站立,下蹲,向左看,向右看)
四,结言
本次是我们首次使用pygame来自行进行游戏开发。
这里,我们删去了在平台上按左、右键和A、D键来控制人物移动的操作,仅用左、右键和A、D键来控制人物移动的方式。
同时我们也没有制作出大量的地形来丰富游戏的丰富性和趣味性,仅仅使用了不断降落的平台来代替固定的地形。
还有缺点是奇怪的运动轨迹、人物可以从下穿破平台、人物会浮空(这个应该和pygame的判定有些关系吧)
如果还有下次的话,希望我们可以改变这些缺陷吧。也希望能尝试一下页游等!