20234105 2024-2025-4 《Python程序设计》实验四报告

Posted on 2025-06-02 20:50  史宇凡  阅读(32)  评论(0)    收藏  举报

20234105 2024-2025-4 《Python程序设计》实验四报告

课程:《Python程序设计》
班级: 2341
姓名: 史宇凡
学号:20234105
实验教师:王志强
实验日期:2025年5月13日
必修/选修: 公选课

1. 实验内容

Python综合应用:爬虫、数据处理、可视化、机器学习、神经网络、游戏、网络安全等。
(1)编写从社交网络爬取数据,实现可视化舆情监控或者情感分析。
(2)利用公开数据集,开展图像分类、恶意软件检测等
(3)利用Python库,基于OCR技术实现自动化提取图片中数据,并填入excel中。
(4)爬取天气数据,实现自动化微信提醒
(5)利用爬虫,实现自动化下载网站视频、文件等。
(6)编写小游戏:坦克大战、贪吃蛇、扫雷等等
注:在Windows/Linux系统上使用VIM、PDB、IDLE、Pycharm等工具编程实现。

2. 实验过程

(1)构思游戏规则,设计逻辑框架
决定做一款“小恐龙躲避游戏”,玩法为按空格键操纵小恐龙跳跃以躲避障碍物以获取加分,如果小恐龙碰到障碍物则游戏结束,再次按空格键可重新开始游戏。
(2)根据设想构建游戏
a. 配置实验环境
在实验正式开始前,先确保Pycharm和Pygame的开发环境均已配备完毕,做好充足准备工作。下图为安装Pygame的过程截图


b. 初始化游戏环境
导入模块:使用pygame创建游戏,random生成随机元素,sys用于退出游戏
初始化Pygame:启动pygame引擎

窗口设置:创建800x400像素的游戏窗口

颜色定义:定义游戏中使用的各种颜色

游戏参数:
GRAVITY:重力大小,影响恐龙下落速度
JUMP_FORCE:跳跃力度(负值表示向上)
GROUND_Y:地面位置的y坐标
GAME_SPEED:游戏初始速度
OBSTACLE_FREQUENCY:障碍物生成频率(1500毫秒=1.5秒)

c. 恐龙角色构建
初始化:设置恐龙的尺寸、位置、速度和跳跃状态

jump():当恐龙不处于跳跃状态时,设置向上速度

update():更新恐龙位置,应用重力,检测落地

draw():绘制恐龙的身体、眼睛和腿

get_rect():获取用于碰撞检测的矩形区域(比实际绘制区域略小)

d. 仙人掌(障碍物)构建
初始化:随机生成不同高度的仙人掌

update():向左移动障碍物

draw():绘制仙人掌主体和刺

get_rect():获取用于碰撞检测的矩形区域

e. 游戏主函数构建
初始化:设置游戏时钟;创建字体对象;实例化恐龙、障碍物和云朵;初始化游戏状态变量

事件处理:处理退出事件;处理空格键事件:跳跃或重新开始游戏

游戏逻辑更新:更新恐龙位置;定期生成新障碍物;更新障碍物位置,移除屏幕外的障碍物并加分;更新云朵位置,移出屏幕的云朵替换为新云朵;碰撞检测:检测恐龙与障碍物的碰撞;难度递增:每得10分,游戏速度增加;分数随时间增加

刷新屏幕:pygame.display.flip() 更新整个显示;clock.tick(60) 控制游戏帧率为60FPS

(3)运行代码,检测是否成功

游戏无明显bug(虽然角色有点不好看,我都不想说是恐龙了,但还会努力完善!),成功运行,实验成功。
(4)实验所遇问题与解决方法
问题1:初始跳跃实现过于简单,恐龙会"漂浮"在空中,且多次快速按空格键会导致恐龙无限跳跃
解决1:经查找资料,发现应该引入重力加速度概念(GRAVITY = 1),同时deepseek给予了更多优化选择,内容如下

问题2:游戏开始时缺乏引导,游戏结束没有明显提示,游客体验感欠佳
解决2:添加游戏引导指示并设计醒目的结束界面

(5)实验源代码





4. 实验感想

(1)课程总结
回顾一学期课程,才发现在不知不觉中,已经在python的趣味学习之路上走了很远,认真记录着每节课的知识点,笔记竟也用了半本。

忘不了在老师循循善诱下,Python基础语法与环境、流程控制等部分知识点不会枯燥乏味,浮点型布尔型字符串、运算符条件语句序列类型……这些知识点已深深烙印脑海;忘不了在老师生动讲述下,函数、文件操作、异常处理等部分知识点变得有趣可感,参数传递变量作用域、else块raise语句……这些专有名词已完全存于我心。

作为一个文科生,先前只是些许接触过python相关知识,在这学期的课程中收获满满。从python的安装到pycharm的应用,再从gitee的注册到git的安装与应用,都离不开老师的细心指导和同学们的热情帮助,同时,自己的努力探求答案、认真查阅资料也是完成实验的必不可少的一部分。每一次实验报告的完成都伴随着一些拦路虎,但我通过大量查找资料、观看教学视频、研究博主的代码等努力,拓展了相关方面的知识。同时,在设计过程中,我也不断尝试并调整,以实现代码的正确运行。不仅仅是这门课的实验,生活中难免遇到一些挫折和错误,但正是不断的尝试和调试,让我在明白编程的复杂性和挑战性的基础上锻炼了解决问题、面对困难的能力,也让我更珍惜每一次成功的喜悦,学会在反思中不断进步。

通过这学期的课程和实验,我深刻感受到了理论与实践相结合的重要性。只有将理论知识应用到实际中,才能真正理解和掌握它。同时,我也认识到了自己在编程方面还有很多需要提升的地方,比如知识点的强化、代码的优化、错误处理的完善等。

印象比较深刻的是在第一次实验中,我加深了对git的认识,一开始对git应用的不理解在随着git技能的掌握逐渐明白其作为辅助工具的重要性——git保障数据安全,防止因电脑更换的代码丢失。还有便是在学习过程中时而因为大量的英文字符崩溃,最后跟随老师视频指导一步步静下心来完成,更是说明老师的百日英语打卡任务的必要性,也在一定程度上督促了该项任务每日的坚持完成。当然,老师风趣幽默的课堂氛围,也在一定程度上激发了我对python学习的热情。

半年的时间不长,却让我感受到编程的魅力,让我勇敢尝试学习、乐于解决问题、善于思考创新。但是有些方面仍不了解,学的仍不透彻,也留下了遗憾。如果未来有机会,希望能弥补这个遗憾,毕竟在最后一个综合实验中,看到游戏界面跳出并正确运行,实在是惊喜,成就感满满。希望以后能有这样一个动力与契机吧。

最后很感谢老师一学期的辛勤付出。当看到老师在课程的末尾祝愿所有同学“未来的人生,一路繁华似锦”,内心十分感动,感谢老师在这学期的耐心指导分析、感谢老师的答疑解惑、感谢老师对我们的理解与包容。一朝沐杏雨,一生念师恩。我们也衷心祝愿老师春晖四方、桃李天下、康健长乐!
(2)意见和建议
希望能适当增加课后练习,Python知识点多且细,极需要复习,课后练习可以增加学习动力,督促同学更好掌握知识点。

博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3