20224221徐思遥《python程序设计》实验四报告

20224221徐思遥 2024-05-27 23:16:29

课程:《Python程序设计》
班级: 2242
姓名: 徐思遥
学号:20224221
实验教师:王志强
实验日期:2024年5月14日
必修/选修: 专选课

 

1.实验内容

        例如:编写从社交网络爬取数据,实现可视化舆情监控或者情感分析。

        例如:利用公开数据集,开展图像分类、恶意软件检测等

        例如:利用Python库,基于OCR技术实现自动化提取图片中数据,并填入excel中。

        例如:爬取天气数据,实现自动化微信提醒

        例如:利用爬虫,实现自动化下载网站视频、文件等。

        例如:编写小游戏:坦克大战、贪吃蛇、扫雷等

2.实验过程及结果

贪吃蛇是一款经典的电子游戏,旨在通过控制一条蛇的移动来吃食物,并随着吃到的食物数量增加而使蛇的长度增加。本实验旨在使用

Python 编程语言和 Pygame 库实现一个简单的贪吃蛇游戏,并增加游戏结束的功能。

通过阅读资料和搜寻B站,本实验将分为以下几个步骤:

1.安装 Pygame 库。

2.编写贪吃蛇游戏的 Python 代码

(1)游戏的初始化;

(2)设置屏幕大小;

 (3)颜色定义;

(4)创建屏幕;

 (5)设置帧速率;

 (6)初始化贪吃蛇、食物、方向(蛇的移动、食物生成等功能);

 (7)定义死亡函数;

 (8)游戏循环;

 (9)方向验证,并增加碰到边界时游戏结束的功能;

 (10)绘制蛇和食物、更新屏幕、设置帧速率。

3.调试和测试编写的代码,确保游戏可以正常运行并在碰到边界时正确结束游戏。

(1)贪吃蛇源代码

import pygame
import random

# 初始化游戏
pygame.init()

# 设置屏幕大小
screen_width = 400
screen_height = 400
cell_size = 2
# 颜色定义
white = (255, 255, 255)
black = (0, 0, 0)
red = (213, 50, 80)
green = (0, 255, 0)
blue = (50, 153, 213)

# 创建屏幕
screen = pygame.display.set_mode((screen_width, screen_height))
pygame.display.set_caption('贪吃蛇')

# 设置帧速率
clock = pygame.time.Clock()

# 初始化贪吃蛇
snake_pos = [screen_width // 2, screen_height // 2]
snake_body = [[snake_pos[0], snake_pos[1]], [snake_pos[0] - cell_size, snake_pos[1]], [snake_pos[0] - (2 * cell_size), snake_pos[1]]]

# 初始化食物
food_pos = [random.randrange(1, (screen_width // cell_size)) * cell_size, random.randrange(1, (screen_height // cell_size)) * cell_size]
food_spawn = True

# 初始化方向
direction = 'RIGHT'
change_to = direction

# 定义死亡函数
def game_over():
    font = pygame.font.SysFont('arial', 30)
    game_over_text = font.render('游戏结束!', True, red)
    screen.blit(game_over_text, [screen_width // 3, screen_height // 3])
    pygame.display.flip()
    pygame.time.wait(2000)
    pygame.quit()
    quit()

# 游戏循环
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            quit()

        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_RIGHT:
                change_to = 'RIGHT'
            if event.key == pygame.K_LEFT:
                change_to = 'LEFT'
            if event.key == pygame.K_UP:
                change_to = 'UP'
            if event.key == pygame.K_DOWN:
                change_to = 'DOWN'

    # 方向验证
    if change_to == 'RIGHT' and not direction == 'LEFT':
        direction = 'RIGHT'
    if change_to == 'LEFT' and not direction == 'RIGHT':
        direction = 'LEFT'
    if change_to == 'UP' and not direction == 'DOWN':
        direction = 'UP'
    if change_to == 'DOWN' and not direction == 'UP':
        direction = 'DOWN'

    # 根据方向移动蛇的头部
    if direction == 'RIGHT':
        snake_pos[0] += cell_size
    if direction == 'LEFT':
        snake_pos[0] -= cell_size
    if direction == 'UP':
        snake_pos[1] -= cell_size
    if direction == 'DOWN':
        snake_pos[1] += cell_size

    # 增加蛇的长度
    snake_body.insert(0, list(snake_pos))
    if snake_pos == food_pos:
        food_spawn = False
    else:
        snake_body.pop()

    if food_spawn == False:
        food_pos = [random.randrange(1, (screen_width // cell_size)) * cell_size, random.randrange(1, (screen_height // cell_size)) * cell_size]
    food_spawn = True

    # 游戏结束条件:碰到边界
    if snake_pos[0] >= screen_width or snake_pos[0] < 0 or snake_pos[1] >= screen_height or snake_pos[1] < 0:
        game_over()

    # 游戏结束条件:碰到自己
    for block in snake_body[1:]:
        if snake_pos == block:
            game_over()

    # 绘制蛇和食物
    screen.fill(black)
    for pos in snake_body:
        pygame.draw.rect(screen, green, pygame.Rect(pos[0], pos[1], cell_size, cell_size))
    pygame.draw.rect(screen, blue, pygame.Rect(food_pos[0], food_pos[1], cell_size, cell_size))

    # 更新屏幕
    pygame.display.update()

    # 设置帧速率
    clock.tick(10)

(2)运行视频

https://live.csdn.net/v/393300

4、实验结果与分析

通过python代码成功实现了一个简单的贪吃蛇游戏,并在碰到边界时正常结束游戏。游戏能够在 Pygame 窗口中运行,玩家可以使用方向键控制蛇的移动,通过吃食物来增加长度,一旦蛇的头部碰到边界,游戏即会结束。

5、实验过程中遇到的问题和解决

问题1:蛇的移动方式不符合预期。

解决过程:仔细检查了蛇移动的逻辑,发现错误在于更新蛇身体各个部分的位置时出现了问题。通过调试并逐步修改代码,最终解决了这个问题。

问题2:游戏在边界检测时出现错误,无法正确结束游戏。

解决过程:检查了边界检测的逻辑,发现了一处边界条件判断错误的地方。进行了修正后,游戏可以正确地在碰到边界时结束。

3、实验心得

贪吃蛇是一个经典的游戏,它的规则简单,但却非常有趣。通过编写贪吃蛇游戏,我学到了很多关于 Python 编程的知识和技能。 在这个实验中,我使用了 Pygame 库来创建游戏窗口和处理游戏逻辑。我学会了如何使用 Pygame 库来绘制图形、处理事件和播放声音。我还学会了如何使用面向对象编程的思想来设计游戏中的蛇和食物对象。 在实现贪吃蛇的移动和转弯功能时,我使用了 Pygame 的键盘事件来监听用户的输入,并根据输入来控制蛇的移动方向。在实现食物的生成和消失功能时,我使用了随机数生成器来生成食物的位置,并在蛇吃到食物后重新生成食物。 通过这个实验,我还学会了如何调试程序和解决问题。在编写程序的过程中,我遇到了很多问题,例如蛇的身体部分没有正确连接、食物没有正确消失等。通过仔细检查代码和使用调试工具,我最终解决了这些问题。 总的来说,通过编写贪吃蛇游戏,我学到了很多关于 Python 编程的知识和技能,也提高了自己的编程能力和解决问题的能力。

4、课程感想与体会

通过本学期学习 Python 课程,我对编程有了更深入的理解,也掌握了一些实用的编程技能。 在学习 Python 课程的过程中,我感受到了编程的乐趣和挑战。Python 的语法简洁明了,非常容易理解和掌握。通过学习 Python,我学会了如何使用变量、数据类型、控制结构、函数等基本概念来构建程序。同时,我也学会了如何使用一些常用的库和工具,来处理数据和可视化结果。 除了学习编程技能之外,我还体会到了编程思维的重要性。编程思维是一种解决问题的思维方式,它强调逻辑思考、问题分解和算法设计。通过学习 Python 课程,我学会了如何将一个复杂的问题分解成多个简单的子问题,并通过编写代码来解决这些子问题。这种思维方式不仅在编程中有用,在日常生活中也非常有用。 同时也非常感谢王志强老师对我们的教导,虽然python现在在我的眼里还是比较高深困难的东西,但我很幸运遇到了志强老师,教我们理解什么是python、该如何学习python。总的来说,学习 Python 课程是一次非常有意义的经历。通过学习 Python,我不仅掌握了一门实用的编程语言,还培养了自己的编程思维和解决问题的能力。我相信这些技能和思维方式将对我未来的学习和工作产生积极的影响。老师的寄语我也十分地感动,好好学习,热爱生活!特别荣幸在这学期选了志强老师的python课程,长路漫漫,我们后会有期!

...全文
124 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
内容概要:本文围绕基于三电平ANPC-VSG(虚拟同步发电机)构网型逆变器的控制策略展开研究,重点提出一种融合双极性倍频脉宽调制(DPWMA)、正负序分离锁相控制与电网电压前馈的复合控制体系。通过ANPC三电平拓扑结构的优势,实现开关损耗均衡、中点电位稳定及低输出谐波,从而提升并网电能质量。采用DPWMA调制策略优化输出波形,有效抑制低次谐波;结合正负序分离技术应对电网不平衡工况,确保锁相精度与并网对称性;引入电网电压前馈控制增强系统动态响应能力与抗扰性能。通过Simulink仿真平台搭建完整模型,验证了该控制策略在稳态运行、电网不平衡及动态扰动等多种复杂工况下的优越性能,展现出高稳态精度、强鲁棒性与快速动态恢复能力,适用于新能源发电、工业大功率变流等高要求并网场景。; 适合人群:具备电力电子、自动控制或电气工程相关背景,从事新能源发电、微电网、逆变器控制等方向的科研人员及工程技术人员,尤其适合研究生及以上层次的研究者。; 使用场景及目标:①用于高电能质量要求的大功率并网逆变器系统设计;②解决电网电压不平衡、畸变、骤升骤降等复杂工况下的并网稳定性问题;③提升逆变器动态响应速度与抗干扰能力,适用于光伏、风电等新能源并网场景。; 阅读建议:建议结合Simulink仿真模型进行实践验证,重点关注DPWMA调制策略的实现逻辑、正负序分离锁相的信号处理流程以及电网电压前馈环节的补偿机制,深入理解各模块间的协同作用,并通过不同工况下的仿真对比分析,全面掌握系统性能优化方法。

93

社区成员

发帖
与我相关
我的任务
社区描述
Python程序设计作业
软件构建 高校 北京·丰台区
社区管理员
  • blackwall0321
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧