实验四 Python综合实践
课程:《Python程序设计》
班级:1843
姓名:章森洋
学号:20184307
实验教师:王志强
实验日期:2020年5月16日
必修/选修: 公选课
1.实验内容
此处填写实验的具体内容;
(一)实验内容
Python综合应用:利用pygame来进行一个游戏的编程
(二)实验要求
运用这学期所学的python所有知识来进行一个编程
(1)程序能运行,功能丰富。(需求提交源代码,并建议录制程序运行的视频)
(2)综合实践报告,要体现实验分析、设计、实现过程、结果等信息,格式规范,逻辑清晰,结构合理。
(3)在实践报告中,需要对全课进行总结,并写课程感想体会、意见和建议等。
2. 实验设计思路和结果
游戏思路的介绍
创建一个名为“家园保卫战”的简单游戏。游戏的样式和飞机大战差不多,需要用到的知识点有pygame各种库的应用,碰撞检查,一些图片、音乐的导入以及数学公式(反三角的应用)math库的应用
实现步骤
1.安装pygame。使用win+r打开管理器,输入cmd进行命令行控制。输入pip install pygame指令,进行下载pygame。下载完成后,在IDLE中导入pygame库,如果显示版本和网站,说明安装成功。
2.添加游戏资源
将所有需要用到的图片和音频放在与py文件用一个文件夹中,各种资源分组在其中的其他文件夹中,如下所示:
3.编写程序
① 首先我们需要导入库,因为在这个程序中,我们要用到pygame的一些方法,math的一些方法,还有随机数
② 初始化游戏窗口和定义变量。在这个游戏程序中会有很多对象存在,而我们在使用这些对象前面需要对它进行定义。首先需要创建一个游戏窗口,大小为640*480,紧接着有角色变量playerpos,keys是用我们给定时刻的键状态数组,还有时间,敌人,武器等一些的变量定义
③ 需要加载游戏的图像和音频,这里就用到pygame.image.load方法,将文件夹中图片和音频加载我们界面中
④ 为游戏添加背景。在resources文件文件中,草的图像是只有100100的分辨率的,无法满足游戏界面640480,这就意味着必须将草地平铺在屏幕区域上才能完全覆盖它。
for语句首先通过x循环。然后,在该for循环中,它遍历y,并在由for循环生成的x和y值处绘制草。接下来的两行只是在屏幕上绘制城堡。
⑤ 移动、旋转玩家。能通过键盘和鼠标上玩家能随意操控角色。
在第二个步骤已经建立了键状态数组,然后需要根据所按下的键更新键状态数组。通过添加event.key函数检测按键操作
首先检查一个键是否被按下或释放。然后检查被按下或释放的键,如果被按下或释放的键是正在使用的键之一,则相应地更新keys变量。
之前有定义playerpos变量是用来控制移动后的玩家角色的位置,这里我们按下哪个键,从对应的玩家x或y位置进行一个移动
除了对于WASD角色的移动,还需要进行角色的旋转。这里需要使用pygame.surface.rotate函数,角度的单位这里为弧度,用到的数学原理是就是反三角函数
⑥ 接下来需要生成游戏角色的攻击武器。这里需要两个变量来控制武器。第一个变量表示玩家的准确性,第二个数组跟踪所有箭头。精度变量是一个射击次数和命中次数的列表。最后需要来计算一个准确度百分比。同时,获取鼠标单击时鼠标位置并基于旋转的玩家位置和光标位置计算箭头旋转。这个旋转值存储在箭头数组中。
vely和velx值是用来计算三角的变量。10是箭头的速度。if语句只检查项目符号是否超出范围(屏幕的边界),如果超出范围,则删除箭头。第二个for语句循环遍历箭头,并以正确的旋转方式绘制箭头。
⑦ 我们要将敌人添加到程序中,敌人是用数组列表来存储,变量名叫badguys。通过计时器badtimer来控制敌人数量,如果badtimer为0,则增加一个敌人,并根据badtimer运行到目前为止的次数再次设置badtimer。for循环更新敌人的x位置,检查敌人是否在屏幕外,如果它在屏幕外,则删除。
⑧ 进行碰撞检查。循环遍历所有坏人,并且在每个循环中都必须遍历所有箭头,并检查它们是否碰撞。如果他们这样做,然后删除敌人,删除箭头,并增加一个正确率。
colliderect是pygame 的内置语句,用于判断两个矩形是否矩形是否相交
⑨ 最后一步就是设置我们的输赢条件。两个方案,如果时间时间到90秒,城堡没有被炸毁(血量条还在),则获胜,如果血量见底,则失败
其他(感悟、思考等)
全课程的总结感悟:
眨眼间一个学期就过去了,时间过得非常的快,我呢也学会了一门新的计算机语言——python。在大一的时候学c,那时候听我高中的其他同学说他们大学在学python,非常的方便。说实话,因为c涉及到计算机的内存地址和指针的问题,在一定程度上还是非常的繁琐的,在那时就对python充满了好奇和期待。到大二上的时候因为专业选修课学习了java。对比java和c我觉得两种语言差不多难度,java它的繁琐点在于利用构造器不断的调用,如果程序中要操作的变量一多的话,可能就容易出错。并且父类子类的运用也会设计涉及到this,super,特别容易弄错。这学期的python算是第三门语言了,有了前两个做基础学起来也不是那么费劲。对比而言,python无疑是最方便的。没有c的指针,语言上也比c更为简洁,同时也没有java这么多的调用。如果说要给一个python做一个一句话的评价的话,完全就是“简单英语的组成代码的语句”。
在学会python语言的同时,也学会了pycharm软件,还有码云push的方法。虽然这学期我们所学python只是一些皮毛,甚至说最后几节课的知识点,像爬虫,数据库,socket套接字用的都还不是非常的熟练,“师傅领进门,修行靠个人”,今后无论生活还是学习中,还要不断的去运用python,才能更好的掌握它。
意见和建议:这学期尽管上了整个学期的线上课,我的感觉却是和线下课没什么区别,整体的感觉还是很好的。如果说一定要提一些什么建议的话,我觉得如果能上课讲的语速能在慢一点可能会好一些,有几节课讲的太快,笔记也来不及做。