20181218 2019-2020-2 《Python程序设计》实验四报告
课程:《Python程序设计》
班级: 1812
姓名:
学号:20181218
实验教师:王志强
实验日期:2020年6月13日
必修/选修: 公选课
1.实验内容
使用pygame编程制作简单的塔防游戏。
2. 实验过程及结果
指导
首先制作一个思维导图,主要包括涉及的类,以及类的属性和方法。这并不是代码最终实现的版本,在编程时有所修改。
资产
游戏中使用的图片,部分来自于https://craftpix.net/中的免费资源,部分是我自己画的(比如游戏背景)
游戏中使用的背景音乐,来自于无版权音乐网站https://maoudamashii.jokersounds.com/
编程
游戏的代码实现学习自https://www.youtube.com/watch?v=iLHAKXQBOoA
原作者在12小时的直播中完成的代码,我完整观看了12个小时的录播,跟随原作者实现代码,也有一点自己的修改
代码的实现过程基本如下:
实现敌人的移动
实现攻击塔的攻击
实现支援塔的支援
实现敌人攻击、游戏失败
实现塔的拖动放置、升级
实现敌人的多轮攻势
实现游戏暂停、音乐暂停
实现游戏总菜单面板
代码中较核心的功能的具体实现将在 “3.实验过程中遇到的问题和解决过程”中给出
结果
游戏功能如下,具体运行测试将在视频中给出
游戏控制
点击“开始”按钮,游戏即开始
“音乐”按钮可以控制音乐的暂停和播放
“继续”和“暂停”按钮可以控制游戏的进行,敌人的每一波攻势结束后,游戏会自动暂停,点击按钮即可迎接下一波攻势
点击塔,移动光标至目标位置再次点击,即可放置塔
注意,不可以将塔放在已放置的塔之上
在游戏“暂停”时也可以放置塔
点击已放置的塔,可以进行升级,升级后塔的攻击力提高,外形也会改变
游戏资产
“月亮”是购买和升级塔所需的货币,消灭敌人会获得“月亮”
“心”是玩家的生命值,当敌人走到地图尽头,“心”的数量会减少,当“心”的数量减少至0时,游戏结束
“尖石塔”和“巨石塔”是可以攻击敌人的塔
“尖石塔”攻击范围较大,攻击力较小
“巨石塔”攻击范围较小,攻击力较大
“宝剑塔”和“波纹塔”是用于强化“尖石塔”和“巨石塔”的塔
“宝剑塔”可以提升范围内“尖石塔”和“巨石塔”的攻击力
“波纹塔”可以提升范围内“尖石塔”和“巨石塔”的攻击范围
小结
游戏难度梯度较不合理,但具备基本功能
码云链接
目录树如下:
├─enemies
│ └─__pycache__
├─game_assets
│ ├─enemies
│ │ ├─1
│ │ ├─2
│ │ └─4
│ └─towers
│ ├─stones
│ │ ├─1
│ │ ├─2
│ │ └─3
│ ├─stonetower
│ │ ├─1
│ │ ├─2
│ │ └─3
│ └─support_towers
├─main_menu
│ └─__pycache__
├─menu
│ └─__pycache__
├─towers
│ └─__pycache__
└─__pycache__
game_assets中存放的是游戏资产,其余文件夹存放的都是代码文件。
运行游戏需要运行 run.py
3. 实验过程中遇到的问题和解决过程
1.如何实现敌人的移动?
首先得到一个含许多坐标点的列表,坐标基本如下图
每一次移动,首先要得到两个点,即目前所在路径的起点(x1, y1)和终点(x2, y2)
得到这条路径的长度sqrt((x2-x1)**2+(y2-y2)**2)
然后确定一次移动的方向和距离,方向即(x2-x1, y2-y2)
至于一次移动的距离,在x轴方向,可以由上面的方向变量的x坐标除以当前路径长度的x坐标,再乘上移动速度
移动后,更新敌人实例的x和y