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

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

课程:《Python程序设计》
班级: 1822
姓名: mellivora
学号:20182213
实验教师:王志强
实验日期:2020年6月1日
必修/选修: 公选课

1.实验内容

Python综合应用:爬虫、数据处理、可视化、机器学习、神经网络、游戏、网络安全等。

  1. 简易版冰球小游戏
  2. 简易版植物大战僵尸

2. 实验过程及结果

本次综合应用里,由于开始就对python的游戏开发较为感兴趣,于是对pygame进行了系统的学习,初始完成的效果是简单的冰球小游戏,效果如图所示:

冰球小游戏

代码如图:

植物大战僵尸

进行了一段时间的学习之后考虑完成一个我很感兴趣的游戏植物大战僵尸,对该游戏的设计完成进行了学习。
游戏要求完成的功能大致是僵尸不断前进直到遇到植物吃掉植物,如果没有植物一路前进到小路尽头则游戏结束,脑子被僵尸吃了,然后有攻击性的植物
可以对僵尸进行攻击,攻击到一定程度则僵尸死亡,然后有一类植物用以生成阳光,也就是金币进行植物的种植。
1.首先我们初始化我们需要的元素,首先将背景图片放入显示方框内,同时显示定义地图类,在每一块土地上设置变量can_grow,来判断是否长有植物,如果有植物则要求不能继续放置新的植物对其进行覆盖。
2.对元素进行分类定义,首先我们定义植物类和僵尸类,将其初始生命值都设置为100,方便后续进行攻击操作判断是否死亡,然后定义生成阳光的植物类。
3.此处选择了两种生成阳光的植物分别是向日葵和阳光菇,向日葵设置的是一朵50金,每25秒产生5金,而阳光菇则更为便宜25金一朵,每7秒生成1金。
4.另外一种植物是攻击类的豌豆,设置每25秒射击一颗豌豆子弹,每颗子弹速度设置为15,一次伤害50,设置判断类,如果子弹与僵尸相撞击,即坐标相同,则判断僵尸被子弹击中掉血,击中后子弹消失,僵尸hp随伤害减少,当僵尸hp小于等于零时,僵尸死亡,即在画面中消失,同时如果僵尸碰撞上植物,则视为僵尸开始吃植物,不断持续对植物造成伤害直到植物被吃完消失或者是僵尸死亡为止。
5.同时,一旦植物死亡小时以后,土地的can_grow随即发生改变,设置为可以重新种植植物的参数。
6.对僵尸进行设置,hp设置为800,同时将所有新种植的植物放入植物这个序列中,进行遍历,一旦僵尸碰到的时该序列中的某个元素,即代表僵尸可以吃掉该植物。

实验代码如图:








实验运行结果截图:

3. 实验过程中遇到的问题和解决过程

  • 问题1:如何让子弹击中僵尸掉血
  • 问题1解决方案:将僵尸设置hp将子弹设置damage在子弹击中僵尸时设置函数使僵尸的血量减少,最后当其血量为0时结束攻击,僵尸消失。
  • 问题2:如何利用鼠标放置不同的植物
  • 问题2解决方案:每个鼠标动作对应不同的键值,例如左键是1,上滑是4等,利用不用语句判断就可以放置不同的植物。

码云链接

https://gitee.com/python_programming/python_2020_programming/commit/853a3cdcc1c2507e9ceb03070b159a523dc0ad73

其他(感悟、思考等)

起初是因为对于python浓烈的好奇才报了这门科目,觉得它特别实用,各种方面,什么可以做,从用来方便的办公啊,再到做新奇美丽的动画效果,再到方便便捷的爬虫,和最近大热的人工智能领域到处都是python的身影,我也对用python来进行2D游戏的编写非常感兴趣,于是对python进行了一段时间系统化的学习,不得不说python实在是一门非常方便的语言,自动识别省去了繁琐累赘的定义,也无需用分号进行区分,以极短的代码就可以完成丰富的小程序,令我十分欢喜,同时他的实用性也很强,方便了我们文件的处理和表格的制作等,这门课的学习也加深了我对密码学和计算机网络的学习和认识,一举多得,在学习了他的爬虫技术和GUI图形界面的制作以后可以制作出简单的界面也令我十分惊喜,希望以后能够继续学习python,再利用python实现一些我喜欢的东西,更好的利用它丰富我的学习和应用。

建议:

希望这门课以后能够再多一点实践,老师可以在云班课设置一些有趣的小实例,例如简单的游戏,爬虫等,设定时间,到时间后就公布代码,促进同学们的学习,激发大家的兴趣,加分的小彩蛋到时间以后也可以公布代码,没写出来的同学可以学习借鉴,写出来的同学可以学习更多的方法有利于学习研究。

参考资料

《python可以这样学》

《Python编程:从入门到实践》

原文地址:https://www.cnblogs.com/Mellivorac/p/13128376.html