20232429 马成栋 2023-2024-2 实验四实验报告
课程:《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库

2.导入pgzrun库和random库

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

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


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

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


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

实验完整代码
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.设置窗口大小及游戏标题

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


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

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

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

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

5.4坠机了(和敌机相撞)

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

7.点击鼠标射出子弹

实验代码如下
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”,好学,易上手,而且这种语言还能写游戏,让我觉得这门课学了很值。
相关推荐
弱电网下光伏并网逆变器序阻抗建模仿真复现扫频法【序阻抗判断稳定性】
内容概要:本文聚焦于弱电网条件下光伏并网逆变器的序阻抗建模与稳定性分析,系统阐述了基于扫频法的阻抗特性仿真与复现方法。通过构建正负序阻抗模型,深入剖析逆变器在弱电网环境中的动态响应特性,结合锁相环、电流环等关键控制环节对系统阻抗的影响机制,采用序阻抗稳定性判据评估多机并网或复杂电网条件下的系统稳定裕度。研究在Simulink平台中实现激励信号注入、频率响应采集与阻抗曲线绘制,为高比例新能源接入背景下并网系统的稳定性分析提供了可靠的仿真手段与理论支撑,尤其适用于SCI级别论文成果的复现与拓展验证。; 适合人群:电力电子、新能源并网技术及相关领域的硕士/博士研究生、科研人员,以及从事光伏逆变器、微电网稳定控制开发的工程技术人员。; 使用场景及目标:①掌握扫频法在电力电子装置阻抗建模中的具体实施流程;②理解并应用基于序阻抗的稳定性判据进行系统稳定边界分析;③用于高水平学术论文(如SCI期刊)中阻抗建模与稳定性分析部分的仿真复现与方法验证; 阅读建议:建议读者结合文中所述方法与提供的参考文献,自主搭建Simulink仿真模型,逐步完成扰动信号设计、数据采集、傅里叶分析及阻抗拟合全过程,深入探究控制参数变化对系统阻抗特性和稳定性的具体影响,强化理论与实践的融合能力。
三相并网逆变器虚拟阻抗+统一有源阻尼策略SVPWM+SPWM调制仿真
内容概要:本文档系统性地介绍了三相并网逆变器的核心控制技术及其在复杂电网环境下的仿真应用,重点涵盖虚拟阻抗与统一有源阻尼策略在SVPWM和SPWM调制方式下的实现方法,旨在提升逆变器的稳定性与电能质量。内容包括无功功率扰动孤岛检测、中点电位平衡控制、低电压穿越(LVRT)、模型预测控制(MPC)、正负序分离、电网前馈控制等关键技术,并扩展至风储联合调频、微电网下垂控制、虚拟同步发电机(VSG)、构网型逆变器等多种典型电力系统应用场景。所有技术均配有基于Simulink/Matlab平台的完整仿真模型、参考文献及说明文档,强调理论分析与仿真实践的深度融合,突出科研中“借力”与创新思维的重要性。; 适合人群:电气工程、自动化、新能源等相关专业的研究生、科研人员及从事电力电子与可再生能源系统开发的工程师;具备MATLAB/Simulink仿真基础和电力系统专业知识的技术人员。; 使用场景及目标:①开展三相并网逆变器控制策略的研究与优化设计;②复现高水平学术论文中的控制算法;③完成毕业课题、科研项目或工程仿真验证;④掌握虚拟阻抗、有源阻尼、SVPWM/SPWM调制、MPC、VSG等核心技术的建模与实现方法;⑤支撑微电网、构网型变流器等前沿方向的科研攻关。; 阅读建议:建议按照资源目录结构化学习,优先选择与自身研究方向契合的内容模块,结合提供的仿真模型、参考文献和说明材料进行实操演练,注重从理论推导到仿真实现的全过程理解,充分利用共享网盘资源深化技术掌握,提升科研效率与创新能力。
chromedriver-win32-159.0.8133.0(Canary).zip
chromedriver-win32-159.0.8133.0(Canary).zip
计算机“101计划”《人工智能引论》教学大纲+课件+实训案例
计算机“101计划”《人工智能引论》教学大纲+课件+实训案例
语音输入法离线语音输入转文字工具2.0支持双档本地识别模型,中英混说精准转写,纯离线运行保护隐私,让打字更高效.zip
大家好,我是大飞哥。日常打字时,频繁切换输入法、断网无法语音转写、或担心语音数据被传至云端,是许多办公族和内容创作者的共同痛点。这款离线语音输入工具 ,正是为此量身打造的 Windows 桌面语音辅助利器。它的核心使命就是按住快捷键说话,松开文字自动上屏,全程本地离线识别,让您在任何可输入文字的窗口内都能实现高效、私密的语音输入,彻底告别网络依赖与隐私焦虑。 在核心功能上,软件内置了两档本地语音识别模型,通过主界面下拉框即可随时切换。默认的“离线·标准”模式响应极快,支持中英混说且自带标点,非常适合日常聊天与文档撰写;而“离线·精准”模式则对纯中文、方言口音及长段落口述的识别准确度更高。更贴心的是,它具备实时预览与一键取消机制,说话过程中若发现说错,按下 Esc 即可取消,一个字都不会误输入;若目标窗口不支持直接写入,文字会自动存入剪贴板,方便您按 Ctrl+V 粘贴,确保每次发声都不白费。 这款工具在具体场景中的表现十分亮眼。对于办公白领,在填写表格、撰写邮件或使用微信、QQ 沟通时,无需频繁切换窗口,按住右键说话即可快速完成信息录入;对于程序员与文字工作者,在代码编辑器或文档中口述注释与段落,能显著提升创作效率;对于经常出差的商务人士,在飞机、高铁等断网环境下,它依然能稳定工作,不经过任何服务器,真正做到了“说了什么只有自己知道”,私密性极佳。 使用体验方面,软件将极简操作贯彻到底。解压后双击 大飞哥语音输入,右下角托盘出现蓝色话筒图标即代表准备就绪。用户只需将光标点进目标输入框,按住右 Alt说话,说完松开,文字便会自动写入。主界面提供了设置快捷键与开机自动启动选项,方便用户按习惯自定义组合键;关闭主窗口并不会退出程序,而是缩至托盘持续待命,彻底退出只需右键托盘或点击主界面按钮,逻辑清晰,零门槛上手。


