20242114 2024-2025-2 《Python程序设计》实验四报告
20242114 2024-2025-2 《Python程序设计》实验四报告
课程:《Python程序设计》
班级: 2421
姓名: 王烨
学号:20242114
实验教师:王志强
实验日期:2025年5-6月
必修/选修: 公选课
1.实验内容
使用Python及Pygame库进行简单游戏开发,包括游戏窗口的创建、游戏对象的定义与操作、事件处理、碰撞检测等。
2. 实验过程及结果
(一)游戏窗口的创建
- 导入Pygame库及相关模块,初始化Pygame环境,为后续游戏运行做好准备。
- 根据
settings.py文件中设置的窗口宽度和高度,创建一个游戏窗口,并设置窗口标题为“gametest”。 - 创建时钟对象,用于控制游戏的帧率,保证游戏运行的流畅性。
(二)玩家对象的定义与初始化 - 在
player.py文件中,定义Player类,继承自MyGameObj类,实现玩家的基本属性和行为。 - 玩家对象包含位置坐标(x、y)、半径、颜色、速度、是否为本玩家(is_me)等属性,以及移动、技能释放、受攻击等行为方法。
- 在主程序中,先创建一个本玩家对象,位于窗口中心位置,颜色为白色,速度为3,然后随机生成5个非本玩家对象,颜色随机,速度同样为3,并将所有玩家对象添加到
players列表中。
(三)游戏主循环 - 进入游戏主循环,设置帧率为60帧/秒,通过
clock.tick_busy_loop(60)控制循环速度。 - 在循环中,不断检测各种事件,如窗口关闭事件(
QUIT),鼠标按键按下事件(MOUSEBUTTONDOWN),键盘按键按下事件(KEYDOWN)等。 - 根据不同事件类型,执行相应操作。例如,当鼠标左键按下且为本玩家时,根据当前技能状态(
cur_skill),执行火球技能或闪现技能;当鼠标右键按下时,本玩家移动到鼠标点击位置;当按下键盘键Q时,本玩家切换为火球技能,按下D键或F键时,切换为闪现技能。 - 每次循环,先将屏幕填充为黑色,然后遍历
MY_GAME_OBJECTS列表中的所有游戏对象,调用其update方法进行更新,最后更新屏幕显示。
(四)玩家行为实现 - 移动行为:在
Player类的move_to方法中,计算目标位置与当前位置的夹角,根据夹角和速度计算出x、y方向上的速度分量(vx、vy),并在update方法中,根据移动距离和速度,逐步更新玩家位置,直至到达目标位置。 - 技能释放行为:
• 火球技能:在Player类的shoot_fireball方法中,根据鼠标点击位置计算出火球的初始位置、速度方向、速度大小等参数,然后创建一个FireBall对象,将其添加到游戏对象列表中,由FireBall类的update方法控制火球的飞行轨迹和碰撞检测。
• 闪现技能:在Player类的flash方法中,直接将玩家位置设置为鼠标点击位置,实现瞬间移动效果。
.3受攻击行为:在Player类的is_attacked方法中,当玩家受到攻击时,根据攻击角度和伤害值,减少玩家半径,同时生成若干血迹效果(通过Blood类实现),若玩家半径小于一定值,则销毁该玩家对象。
(五)火球对象的实现 - 在
fireball.py文件中,定义FireBall类,同样继承自MyGameObj类,实现火球的基本属性和行为。 - 火球对象包含位置坐标(x、y)、半径、颜色、、速度发射玩家、x、y方向上的速度分量(vx、vy)、移动距离、伤害值等属性,以及更新位置、碰撞检测、攻击等行为方法。
- 在
update方法中,根据移动距离和速度,逐步更新火球位置,同时检测是否与玩家发生碰撞,若碰撞则调用attack方法,对被攻击玩家执行受攻击操作,并销毁自身。
(六)实验结果
成功实现了一个简单的单人游戏,游戏窗口大小为1500×750像素。玩家可以通过鼠标左键释放火球技能或闪现技能,通过鼠标右键控制移动,通过键盘Q键、D键或F键切换技能。火球能够按照指定方向飞行,并在碰撞到其他玩家时对其造成伤害,玩家受到攻击后会减少半径并产生血迹效果,当半径小于一定值时玩家死亡并从屏幕中消失。游戏运行流畅,各功能模块正常工作,基本达到了预期的设计目标。
![]()
3. 实验过程中遇到的问题和解决过程
- 问题1:在处理鼠标事件时,对事件类型的判断不够准确,导致部分功能无法正常触发
- 问题1解决方案:经过仔细查阅文档和调试代码,最终找到了问题所在,决定改用event.button属性来判断鼠标按键类型。
其他(感悟、思考等)
一开始感到迷茫恐惧,无从下手,但是慢慢查找资料,经过一点点地临摹思索,最后运行成功的喜悦是无与伦比的,世上无难事,只要肯登攀。
参考资料
[1]Pygame Documentation. https://www.pygame.org/docs/


浙公网安备 33010602011771号