20232429 马成栋 2023-2024-2 实验四实验报告

20232429马成栋 2024-05-29 23:27:51

课程:《Python程序设计》
班级: 2324班
姓名: 马成栋
学号: 20232429
实验教师:王志强
实验日期:2024年5月15日
必修/选修: 公选课

1.实验内容
【1】实验整体内容:

Python综合应用:爬虫、数据处理、可视化、机器学习、神经网络、游戏、网络安全等。
课代表和各小组负责人收集作业(源代码、视频、综合实践报告)

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

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

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

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

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

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

注:在Windows/Linux系统上使用VIM、PDB、IDLE、Pycharm等工具编程实现。

【2】本实验聚焦内容

(1)通过Python编程编写一个小鸟飞行的游戏
(2)通过Python编程编写一个飞机大战的游戏

2.实验过程及结果
小鸟飞行

1.安装pygame,pyzero库

img

2.导入pgzrun库和random库

img

3.设置我们需要的游戏的窗口大小(宽度和高度)

img

4.设置下载好的背景、障碍物坐标及小鸟坐标

img

img

5.编写draw函数,绘制出背景、障碍物、小鸟

img

6.编写更新小鸟和障碍物每帧位置的函数,以及设置游戏难度

img

img

7.让游戏可以通过鼠标控制并且开始游戏

img

实验完整代码
import pgzrun  # 导入游戏库
import random  # 导入随机库
WIDTH = 350   # 设置窗口的宽度
HEIGHT = 600  # 设置窗口的高度

background = Actor('background')  # 导入背景图片
bird = Actor('bird')  # 导入小鸟图片
bird.x = 50           # 设置小鸟的x坐标
bird.y = HEIGHT/2     # 设置小鸟的y坐标
bar_up = Actor('bar_up')    # 导入障碍物上半部分图片
bar_up.x = 300              # 设置障碍物上半部分的x坐标
bar_up.y = 0           # 设置障碍物上半部分的y坐标
bar_down = Actor('bar_down')    # 导入障碍物下半部分图片
bar_down.x = 300                # 设置障碍物下半部分的x坐标
bar_down.y = 600             # 设置障碍物下半部分的y坐标
score = 0     # 游戏得分
speed = 1     # 游戏速度,即障碍物向左移动的速度

def draw():
    background.draw()
    bar_up.draw()
    bar_down.draw()
    bird.draw()
    screen.draw.text(str(score), (30, 30),
                     fontsize=50, color='green')

def update():  # 更新模块,每帧重复操作
    global score,speed
    bird.y = bird.y + 2
    bar_up.x = bar_up.x - speed
    bar_down.x = bar_down.x - speed
    # 当障碍物移动到最左边时,可以让其在右边重新出现
    if bar_up.x < 0:
        bar_up.x = WIDTH
        bar_down.x = WIDTH
        bar_up.y = random.randint(-200, 200)
        bar_down.y = 600 + bar_up.y
        score = score + 1
        if (score % 5 == 0): # 如果得分增加了5分,就让游戏速度增加
            speed = speed + 1

    # 如果小鸟碰到障碍物上半部分或下半部分,游戏失败
    if bird.colliderect(bar_up) or bird.colliderect(bar_down) or bird.y < 0 or bird.y > HEIGHT:
        print('游戏失败')
        # 把得分清零、速度设为1,小鸟、障碍物的位置重新归位
        score = 0
        speed = 1
        bird.x = 50
        bird.y = HEIGHT/2
        bar_up.x = WIDTH
        bar_up.y = 0
        bar_down.x = WIDTH
        bar_down.y = 600       

def on_mouse_down():  # 当鼠标点击时运行
    bird.y = bird.y - 100  # 小鸟y坐标减少,即上升一段距离

pgzrun.go()   # 开始执行游戏

飞机大战

1.同第一个游戏,安装pygame和pyzero库(不再重复附图)

2.设置窗口大小及游戏标题

img

3.游戏的基础准备:设置下载好的背景、我的飞机、敌人飞机和我发射出去的子弹的坐标及游戏BGM

img

img

4.编写draw函数用于绘制背景、我的飞机、敌人的飞机我的子弹以及输掉游戏的游戏提醒

img

5.update函数,绘制每一帧的动画
5.1背景滚动及打出我的子弹

img

5.2一架敌机被我打死,随机生成下一架飞机

img

5.3敌机被击毁时音效和动画

img

5.4坠机了(和敌机相撞)

img

6.保持飞机始终在我的鼠标位置

img

7.点击鼠标射出子弹

img

实验代码如下

import pgzrun  # 导入游戏库
import random  # 导入随机库
WIDTH = 480    # 设置窗口的宽度
HEIGHT = 700   # 设置窗口的高度
TITLE = 'Python飞机大战'

background1 = Actor('background')  # 导入背景1图片
background1.x = 480/2
background1.y = 852/2
background2 = Actor('background')  # 导入背景2图片
background2.x = 480/2
background2.y = -852/2

bullet = Actor('bullet')  # 导入子弹图片
bullet.x = WIDTH/2
bullet.y = -HEIGHT

hero = Actor('hero')  # 导入玩家飞机图片
hero.x = WIDTH/2
hero.y = HEIGHT*2/3

enemy = Actor('enemy')  # 导入敌机图片
enemy.x = WIDTH/2
enemy.y = 0

score = 0     # 游戏得分
isLoose = False # 游戏是否失败,初始不失败
sounds. game_music.play(-1)  # 循环播放背景音乐

def draw():  # 绘制模块,每帧重复执行
    background1.draw()
    background2.draw()
    hero.draw()
    enemy.draw()
    bullet.draw()

    screen.draw.text("得分: "+str(score), (200, HEIGHT-50), fontsize=30,
                     fontname='s', color='black')
    if isLoose:
        screen.draw.text("游戏失败!", (50, HEIGHT/2), fontsize=90,fontname='s', color='red')

def update():  # 更新模块,每帧重复操作
    global score, isLoose
    if isLoose:
        return # 如果游戏失败,返回,不做下面的操作

    # 以下代码用于实现背景图片的循环滚动效果
    if background1.y > 852/2 + 852:
        background1.y = -852/2
    if background2.y > 852/2 + 852:
        background2.y = -852/2
    background1.y += 1
    background2.y += 1

    if bullet.y > -HEIGHT:
        bullet.y = bullet.y - 10

    enemy.y +=
    if enemy.y > HEIGHT:
        enemy.y = 0
        enemy.x = random.randint(50, WIDTH-50)

    if bullet.colliderect(enemy):
        sounds.got_enemy.play()
        enemy.y = 0
        enemy.x = random.randint(0, WIDTH)
        score = score + 1
        bullet.y = -HEIGHT

    if hero.colliderect(enemy):
        sounds.explode.play()
        isLoose = True
        hero.image = 'hero_blowup'

def on_mouse_move(pos, rel, buttons):  # 当鼠标移动时执行
    if isLoose:
        return
    hero.x = pos[0]
    hero.y = pos[1]

def on_mouse_down():
    if isLoose:
        return
    bullet.x = hero.x
    bullet.y = hero.y - 70
    sounds.gun.play()

pgzrun.go()  # 开始执行游戏

飞鸟视频

飞机大战视频

实验中遇到的问题

1.pyzero版本太低导致一开始没办法调用pgzrun库,调试不了代码,更新后解决该问题
2.代码出现故障,小鸟和开了挂一样无视障碍向前冲,积分迅速累计,产生了不良游戏体验,后续更正代码不再出现此bug

感悟

Python课非常有意思,这种语言比C语言好像更简单有趣,因为我可以写一个游戏来当成我的作业嘿嘿嘿,由于我本身就是个游戏迷,看到教材上有用Python写游戏瞬间就来劲了,决心学好这个语言编写一个NB的游戏,但是由于各种因素我目前只能写出这种小游戏,当自己玩上了自己定的规则的游戏感觉很爽。时间充沛我甚至可以写一个植物大战僵尸(嘿嘿嘿)感谢老师一学期的细心教导,让我真正领悟了“人生苦短,我用Python”,好学,易上手,而且这种语言还能写游戏,让我觉得这门课学了很值。

...全文
301 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
内容概要:本文系统研究了开关频率大于谐振频率(fs>fr)工况下,移相混合控制LLC谐振变换器在低压增益区域的工作特性,深入分析其在变频与移相结合控制模式下的调制机理、工作模态划分及损耗分布规律。通过Simulink平台构建高保真仿真模型,对变换器在不同负载和输入条件下的电压增益、转换效率、关键器件电压电流应力等性能指标进行了全面仿真验证,重点探讨了其在低增益区间的软开关实现能力与效率优化潜力,旨在提升LLC变换器在宽范围输入输出应用中的动态响应与能源转换效率。; 适合人群:从事电力电子变换器设计、高频电源开发及相关领域的高校研究生、科研院所研究人员及企业研发工程师,要求具备扎实的电路理论基础、电力电子技术知识以及一定的Simulink仿真能力。; 使用场景及目标:①深入理解LLC谐振变换器在fs>fr条件下采用移相混合控制的内在工作机理与模态转换过程;②掌握利用Simulink搭建复杂谐振变换器精确仿真模型的方法与技巧;③分析并优化低压增益区的增益特性与损耗构成,为设计高效率、高功率密度的软开关电源提供理论依据和数据支持; 阅读建议:建议读者结合文中所述仿真模型,亲自复现仿真过程,重点观察不同控制参数(如移相比、开关频率)对电压增益曲线和关键波形的影响,并对比传统变频控制策略,深入探究混合控制在拓宽调压范围、提升轻载效率方面的优势,从而深化对现代高效谐振电源设计的理解。
内容概要:本文提出了一种基于粒子群优化算法(PSO)的配电网光伏储能双层优化配置模型,以IEEE33节点系统为标准算例,实现光伏发电单元与储能系统的协同选址与定容优化。该模型采用双层架构设计,上层以投资成本、运行经济性及网络损耗最小为目标优化设备配置方案,下层通过潮流计算评估系统在不同负荷场景下的运行性能,综合考虑电压稳定性、供电可靠性及可再生能源消纳能力,最终通过Matlab编程实现完整求解流程,为高渗透率分布式电源接入背景下的配电网规划提供了有效的技术支撑。; 适合人群:具备电力系统分析基础和Matlab编程能力的研究生、高校科研人员及从事新能源并网、智能配电网规划与优化的工程技术人员。; 使用场景及目标:①研究含高比例光伏接入的配电网规划与运行协同优化问题;②掌握双层优化建模方法与粒子群算法在复杂电力系统问题中的应用技巧;③为实际工程中分布式光伏与储能系统的科学选址与容量配置提供理论依据与仿真验证平台。; 阅读建议:建议读者结合Matlab代码深入理解双层迭代求解机制,重点关注算法收敛性分析、参数敏感性测试,并可通过更换初始种群、调整权重因子或引入其他标准测试系统(如IEEE69节点)进行对比实验,进一步验证所提模型的普适性与鲁棒性。
内容概要:本文围绕双机并联虚拟同步发电机(VSG)在微电网中的功率分配、黑启动、虚拟阻抗与预同步控制展开,基于Simulink平台构建了完整的微电网系统仿真模型。重点研究了VSG在双机并联运行下的有功/无功功率均分控制策略,通过引入虚拟阻抗技术有效解决了因线路阻感比差异导致的功率分配不均问题。同时,设计了微电网黑启动流程与并网预同步控制模块,实现了待并网系统与主网在电压幅值、频率和相位上的精确同步,显著降低了并网冲击电流。系统整合了VSG控制、下垂控制、虚拟阻抗、锁相环(PLL)及预同步逻辑等关键环节,全面验证了多VSG协同运行的稳定性、自主恢复能力与并网可靠性。; 适合人群:具备电力系统、电力电子及自动控制等相关专业知识,从事微电网、分布式发电、VSG控制与并网技术研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①深入理解双机并联VSG系统中功率分配不均的机理及虚拟阻抗的补偿作用;②掌握微电网黑启动全过程及预同步控制的关键技术要点;③学习并实践基于Simulink的微电网多层次、多目标控制策略的建模与仿真方法;④为相关科研课题、毕业设计或实际工程项目提供可复现、可拓展的技术方案与仿真参考。; 阅读建议:建议结合提供的Simulink模型文件进行同步学习,重点关注VSG控制参数整定、虚拟阻抗设计原则、预同步切换逻辑等核心模块的实现细节,并可通过改变负载投切、线路参数或初始频率偏差等条件进行多工况仿真测试,以深入探究系统的动态响应特性与鲁棒性。

110

社区成员

发帖
与我相关
我的任务
社区描述
人生苦短,我用Python!
python3.11 高校
社区管理员
  • blackwall0321
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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