课程:《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,才能更好的掌握它。

意见和建议:这学期尽管上了整个学期的线上课,我的感觉却是和线下课没什么区别,整体的感觉还是很好的。如果说一定要提一些什么建议的话,我觉得如果能上课讲的语速能在慢一点可能会好一些,有几节课讲的太快,笔记也来不及做。

码云链接:https://gitee.com/zhang_sen_yang/python_zuoye_2020

实验四 Python综合实践的更多相关文章

  1. 20201123 《python程序设计》实验四报告

    20201123 2020-2021-2 <python程序设计>实验三报告 课程:<Python程序设计>班级:2011姓名:晏鹏捷学号:20201123实验教师:王志强实验 ...

  2. 20184302 2019-2020-2 《Python程序设计》实验四报告

    20184302 2019-2020-2 <Python程序设计>实验四报告 课程:<Python程序设计> 班级: 1843 姓名: 李新锐 学号:184302 实验教师:王 ...

  3. 20212115朱时鸿 《python程序设计》实验四报告

    课程:<Python程序设计>班级: 2121姓名: 朱时鸿学号:20212115实验教师:王志强实验日期:2022年5月28日必修/选修: 公选课 1.实验内容 Python综合应用:爬 ...

  4. Appium+python自动化(四十二)-Appium自动化测试框架综合实践- 寿终正寝完结篇(超详解)

    1.简介 按照上一篇的计划,今天给小伙伴们分享执行测试用例,生成测试报告,以及自动化平台.今天这篇分享讲解完.Appium自动化测试框架就要告一段落了. 2.执行测试用例&报告生成 测试报告, ...

  5. Appium+python自动化(四十一)-Appium自动化测试框架综合实践 - 即将落下帷幕(超详解)

    1.简介 今天我们紧接着上一篇继续分享Appium自动化测试框架综合实践 - 代码实现.到今天为止,大功即将告成:框架所需要的代码实现都基本完成. 2.data数据封装 2.1使用背景 在实际项目过程 ...

  6. Appium+python自动化(四十)-Appium自动化测试框架综合实践 - 代码实现(超详解)

    1.简介 今天我们紧接着上一篇继续分享Appium自动化测试框架综合实践 - 代码实现.由于时间的关系,宏哥这里用代码给小伙伴演示两个模块:注册和登录. 2.业务模块封装 因为现在各种APP的层出不群 ...

  7. 20192204 2019-2020-2 《Python程序设计》实验四报告

    20192204 2019-2020-2 <Python程序设计>实验四报告 课程:<Python程序设计> 班级: 1922 姓名: 李龙威 学号:20192204 实验教师 ...

  8. Appium+python自动化(三十八) - Appium自动化测试框架综合实践 - 框架简介-助你冲击高薪,迎娶白富美(超详解)

    简介 好久没有更新博客了,博友们是不是有点等不及了.不好意思啊,中秋节过后太忙了,这篇是好不容易抽点零碎时间写的.从这一篇开始小伙伴或者童鞋们,就跟随宏哥的脚步,一步步的从无到有,从0到1的搭建一个完 ...

  9. Appium+python自动化(三十九)-Appium自动化测试框架综合实践 - 代码实现(超详解)

    简介 经过一段时间的准备,完善的差不多了,继续分享有关Appium自动化测试框架综合实践.想必小伙伴们有点等不及了吧! driver配置封装 kyb_caps.yaml 配置表 参考代码 platfo ...

随机推荐

  1. HTTPS Proxy all in one

    HTTPS Proxy all in one HTTP Proxy Charles Proxy https://www.charlesproxy.com/ Proxy SwitchyOmega 轻松快 ...

  2. CSS transition & shorthand property order

    CSS transition & shorthand property order shorthand property https://developer.mozilla.org/en-US ...

  3. CSS3 Animation & linear-gradient & css3 var & @keyframes

    CSS3 Animation & linear-gradient & css3 var & @keyframes https://www.zhangxinxu.com/word ...

  4. js & sort array object

    js & sort array object sort array object in js https://flaviocopes.com/how-to-sort-array-of-obje ...

  5. React Native & CodePush & App Center

    React Native & CodePush & App Center https://docs.microsoft.com/en-us/appcenter/distribution ...

  6. window.locationbar

    window.locationbar demo https://cdn.xgqfrms.xyz/#/operate-tool/select-seat-system/select-detail?temp ...

  7. zrender & svg

    zrender & svg window.prompt double click https://codepen.io/xgqfrms/pen/jOEGNvw // https://cdn.x ...

  8. webassembly & google

    webassembly & google https://developers.google.com/web/updates/2018/08/wasm-av1 https://develope ...

  9. JDK源码阅读-Reference

    本文转载自JDK源码阅读-Reference 导语 Java最初只有普通的强引用,只有对象存在引用,则对象就不会被回收,即使内存不足,也是如此,JVM会爆出OOME,也不会去回收存在引用的对象. 如果 ...

  10. 你见过老外的 Java 面试题吗 (上)?

    前言 最近无聊的在逛某 tube 网站,本来想看看大家是怎么吐槽川普的,结果无意间点进了一个老外面试 Java 的视频,对于常年面试被吊打的我瑟瑟发抖,于是决定进去一探究竟. 毕竟不是专业的后台开发, ...