110
社区成员




# 学号 2023-2024-2 《Python综合实践》实验4报告
课程:《Python程序设计》
班级: 2311
姓名: 陈宣澎
学号:20231107
实验教师:王志强
实验日期:2024年5月15日
必修/选修: 公选课
## 1.实验内容
Python综合应用:爬虫、数据处理、可视化、机器学习、神经网络、游戏、网络安全等。
课代表和各小组负责人收集作业(源代码、视频、综合实践报告)
例如:编写从社交网络爬取数据,实现可视化舆情监控或者情感分析。
例如:利用公开数据集,开展图像分类、恶意软件检测等
例如:利用Python库,基于OCR技术实现自动化提取图片中数据,并填入excel中。
例如:爬取天气数据,实现自动化微信提醒
例如:利用爬虫,实现自动化下载网站视频、文件等。
例如:编写小游戏:坦克大战、贪吃蛇、扫雷等等
注:在Windows/Linux系统上使用VIM、PDB、IDLE、Pycharm等工具编程实现。
## 2. 实验过程及结果
(1)确认实验目的:制作一个简单的贪吃蛇小游戏
①初始化设置游戏屏幕大小
screen_width, screen_height = 400, 300 screen = pygame.display.set_mode((screen_width, screen_height))
②初始化小蛇和食物,并配上颜色
③随机生成食物
④控制小蛇移动
⑤死亡方式:撞墙或是撞自己
⑥输出得分
print(f"Game Over! Score: {score}")
(2)实验结果展示(因视频上传不成功,故改用几张照片)
(3)完整代码
import pygame import random import sys # 初始化 Pygame pygame.init() # 设置屏幕大小 screen_width, screen_height = 400, 300 screen = pygame.display.set_mode((screen_width, screen_height)) # 设置颜色 WHITE = (255, 255, 255) RED = (255, 0, 0) GREEN = (0, 255, 0) # 初始化蛇和食物 snake = [(50, 50)] food = None score = 0 direction = (10, 0) # 初始方向向右 def generate_food(): global food # 确保食物坐标在屏幕范围内 x = random.randint(0, (screen_width - 10) // 10) * 10 y = random.randint(0, (screen_height - 10) // 10) * 10 food = (x, y) # 检查食物是否和蛇的任何部分重叠 while food in snake: x = random.randint(0, (screen_width - 10) // 10) * 10 y = random.randint(0, (screen_height - 10) // 10) * 10 food = (x, y) generate_food() # 游戏主循环 running = True while running: for event in pygame.event.get(): if event.type == pygame.QUIT: running = False elif event.type == pygame.KEYDOWN: if event.key == pygame.K_UP and direction != (0, 10): direction = (0, -10) elif event.key == pygame.K_DOWN and direction != (0, -10): direction = (0, 10) elif event.key == pygame.K_LEFT and direction != (10, 0): direction = (-10, 0) elif event.key == pygame.K_RIGHT and direction != (-10, 0): direction = (10, 0) # 移动蛇 head = snake[0] new_head = (head[0] + direction[0], head[1] + direction[1]) # 检查是否吃到食物 if new_head == food: score += 10 snake.insert(0, new_head) generate_food() else: snake.insert(0, new_head) snake.pop() # 检查是否撞到墙壁或自己 if new_head[0] < 0 or new_head[0] >= screen_width or new_head[1] < 0 or new_head[1] >= screen_height: running = False for segment in snake[1:]: if segment == new_head: running = False # 绘制屏幕 screen.fill(WHITE) for pos in snake: pygame.draw.rect(screen, GREEN, pygame.Rect(pos[0], pos[1], 10, 10)) pygame.draw.rect(screen, RED, pygame.Rect(food[0], food[1], 10, 10)) pygame.display.flip() # 设置帧率 pygame.time.Clock().tick(10) # 游戏结束后的处理 pygame.quit() print(f"Game Over! Score: {score}") sys.exit()
## 3. 实验过程中遇到的问题和解决过程
- 问题1:小蛇的食物有时候会刷新在外面
- 问题1解决方案:将坐标的随机计算正确限制在屏幕范围
x = random.randint(0, (screen_width - 10) // 10) * 10
y = random.randint(0, (screen_height - 10) // 10) * 10
food = (x, y) #食物和小蛇的大小为10
- 问题2:pygame总是不能在终端中安装
- 问题2解决方案:后来在Settings的编译器内直接安装
- 问题3:对于如何用键盘操控小蛇没有头绪
- 问题3解决方案:上网查阅资料
## 其他(感悟、思考等)
本次实验与前几次有老师的亲自示范不同,更多的是让我们自己去做一些我们自己想做的东西,增加了自主性的同时也增加了难度。
不知不觉间,我才发现自己也能利用手头上现有的工具来制作一些平时看起来遥不可及的游戏。当然,我们这些后来者在前人的基础上重复编写一些简单的游戏并没有什么了不起的,真正厉害的是哪些先驱者、创造者,他们创造出了这些简单耐玩的游戏,还创造出了制作游戏的机器,实在是了不起。我自己学习、借鉴的游戏还很简陋。在python一路上还有很多路要走。
## 课程感想体会、意见和建议等
转眼间,一学期的python课程已经画上了尾声。这是一门很优质的课程,虽然老师后面讲得稍稍有些快,但还是学到了很多东西。其中最重要的还是知道了python的强大能力并学会了一些基础用法。王志强老师上课风格幽默风趣、举的例子生动又形象,在一次又一次的演示中表现出了他高超的python技术。无论是不假思索的打字,还是一句一句完整得体的提示语,都值得我们学习。我在一节节课中开阔了眼界,扩宽了思维,学会了严谨细致。最后用一句话总结“人生苦短,我用python”!