双11狂欢大促

盲盒赢 定制羽绒服

开启惊喜盲盒,抽取你的专属好礼

— 惊喜奖品抢先看 —

20231107 实验四《Python程序设计》实验报告

20231107陈宣澎 20231107陈宣澎 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区

 # 学号 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”!

...全文

相关推荐

政府科技管理者如何提升科技成果转化项目进场交易的备案效率?.docx

政府科技管理者如何提升科技成果转化项目进场交易的备案效率?

BIZKEEN

山区道路边坡落石隐患检测数据集VOC+YOLO格式241张1类别.md

【重要提示】本页面仅为资源介绍,不含外部下载地址 亲爱的 CSDN 用户: 感谢你浏览本资源页面,在这里提前向大家说明相关情况,避免后续产生误解。本资源我设置的初衷是 0 积分免费分享文档介绍,希望可以无偿给到有需要的朋友。但 CSDN 平台存在自动调控机制,系统会根据资源下载热度、文件体积、平台规则等因素,自动修改资源所需下载积分,页面显示为 1 积分、2 积分或更高积分都属于平台自动调整结果,并非我手动修改设置,我没有权限自主锁定积分数值。 如果你打开页面后,发现下载所需积分不为 0,请务必谨慎考虑是否下载。一旦你支付积分完成下载,后续遇到资源内容和描述不符、文件损坏等问题,我无法承担对应的积分损失,也没有渠道为你办理积分退还。在此强烈建议,只有页面明确显示 0 积分的时候,再进行下载操作。 同时特别说明:这份资源介绍文案里,没有附带任何外部下载地址。资源本身是通过 CSDN 官方上传通道上传的附件,正常情况下直接点击页面自带的下载按钮即可获取文件。页面找不到外部下载链接属于正常情况,并非资源缺失。 如果因为平台积分显示异常,导致你被扣取积分,积分退款、积分异常相关问题,请直接联系 CSDN 官方客服咨询处理。平台规则由官方制定,我无法干预积分变动,望各位理解。

fl176831

高空作业栏杆检测数据集VOC+YOLO格式230张3类别.md

【重要提示】本页面仅为资源介绍,不含外部下载地址 亲爱的 CSDN 用户: 感谢你浏览本资源页面,在这里提前向大家说明相关情况,避免后续产生误解。本资源我设置的初衷是 0 积分免费分享文档介绍,希望可以无偿给到有需要的朋友。但 CSDN 平台存在自动调控机制,系统会根据资源下载热度、文件体积、平台规则等因素,自动修改资源所需下载积分,页面显示为 1 积分、2 积分或更高积分都属于平台自动调整结果,并非我手动修改设置,我没有权限自主锁定积分数值。 如果你打开页面后,发现下载所需积分不为 0,请务必谨慎考虑是否下载。一旦你支付积分完成下载,后续遇到资源内容和描述不符、文件损坏等问题,我无法承担对应的积分损失,也没有渠道为你办理积分退还。在此强烈建议,只有页面明确显示 0 积分的时候,再进行下载操作。 同时特别说明:这份资源介绍文案里,没有附带任何外部下载地址。资源本身是通过 CSDN 官方上传通道上传的附件,正常情况下直接点击页面自带的下载按钮即可获取文件。页面找不到外部下载链接属于正常情况,并非资源缺失。 如果因为平台积分显示异常,导致你被扣取积分,积分退款、积分异常相关问题,请直接联系 CSDN 官方客服咨询处理。平台规则由官方制定,我无法干预积分变动,望各位理解。

fl176831

ti-cgt-c2000-22.6.0.LTS-windows-x64-installer

ti-cgt-c2000-22.6.0.LTS-windows-x64-installer

lkq550

光伏板太阳能板尘土灰尘脏污检测数据集VOC+YOLO格式1006张3类别.md

【重要提示】本页面仅为资源介绍,不含外部下载地址 亲爱的 CSDN 用户: 感谢你浏览本资源页面,在这里提前向大家说明相关情况,避免后续产生误解。本资源我设置的初衷是 0 积分免费分享文档介绍,希望可以无偿给到有需要的朋友。但 CSDN 平台存在自动调控机制,系统会根据资源下载热度、文件体积、平台规则等因素,自动修改资源所需下载积分,页面显示为 1 积分、2 积分或更高积分都属于平台自动调整结果,并非我手动修改设置,我没有权限自主锁定积分数值。 如果你打开页面后,发现下载所需积分不为 0,请务必谨慎考虑是否下载。一旦你支付积分完成下载,后续遇到资源内容和描述不符、文件损坏等问题,我无法承担对应的积分损失,也没有渠道为你办理积分退还。在此强烈建议,只有页面明确显示 0 积分的时候,再进行下载操作。 同时特别说明:这份资源介绍文案里,没有附带任何外部下载地址。资源本身是通过 CSDN 官方上传通道上传的附件,正常情况下直接点击页面自带的下载按钮即可获取文件。页面找不到外部下载链接属于正常情况,并非资源缺失。 如果因为平台积分显示异常,导致你被扣取积分,积分退款、积分异常相关问题,请直接联系 CSDN 官方客服咨询处理。平台规则由官方制定,我无法干预积分变动,望各位理解。

fl176831
评论
收藏 已收藏
分享
返回顶部