当前位置: 首页 > article >正文

Python实例题:pygame开发打飞机游戏

目录

Python实例题

题目

pygame-aircraft-game使用 Pygame 开发的打飞机游戏脚本

代码解释

初始化部分:

游戏主循环:

退出部分:

运行思路

注意事项

Python实例题

题目

pygame开发打飞机游戏

pygame-aircraft-game使用 Pygame 开发的打飞机游戏脚本

import pygame
import random# 初始化 Pygame
pygame.init()# 定义屏幕尺寸
SCREEN_WIDTH = 480
SCREEN_HEIGHT = 650# 创建屏幕对象
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
pygame.display.set_caption("打飞机游戏")# 定义颜色
WHITE = (255, 255, 255)# 加载玩家飞机图片
player_img = pygame.image.load("player.png")  # 请确保该图片存在
player_rect = player_img.get_rect()
player_rect.centerx = SCREEN_WIDTH // 2
player_rect.bottom = SCREEN_HEIGHT - 10# 玩家飞机移动速度
player_speed = 5# 加载敌机图片
enemy_img = pygame.image.load("enemy.png")  # 请确保该图片存在
enemies = []# 敌机生成间隔和计时器
ENEMY_SPAWN_INTERVAL = 1000
enemy_spawn_timer = 0# 加载子弹图片
bullet_img = pygame.image.load("bullet.png")  # 请确保该图片存在
bullets = []# 子弹移动速度
bullet_speed = 8# 游戏主循环
running = True
clock = pygame.time.Clock()while running:# 控制游戏帧率clock.tick(60)# 处理事件for event in pygame.event.get():if event.type == pygame.QUIT:running = Falseelif event.type == pygame.KEYDOWN:if event.key == pygame.K_SPACE:# 发射子弹bullet_rect = bullet_img.get_rect()bullet_rect.centerx = player_rect.centerxbullet_rect.top = player_rect.topbullets.append(bullet_rect)# 获取按键状态keys = pygame.key.get_pressed()if keys[pygame.K_LEFT] and player_rect.left > 0:player_rect.x -= player_speedif keys[pygame.K_RIGHT] and player_rect.right < SCREEN_WIDTH:player_rect.x += player_speedif keys[pygame.K_UP] and player_rect.top > 0:player_rect.y -= player_speedif keys[pygame.K_DOWN] and player_rect.bottom < SCREEN_HEIGHT:player_rect.y += player_speed# 生成敌机enemy_spawn_timer += clock.get_time()if enemy_spawn_timer > ENEMY_SPAWN_INTERVAL:enemy_rect = enemy_img.get_rect()enemy_rect.x = random.randint(0, SCREEN_WIDTH - enemy_rect.width)enemy_rect.y = -enemy_rect.heightenemies.append(enemy_rect)enemy_spawn_timer = 0# 移动敌机for enemy in enemies[:]:enemy.y += 3if enemy.top > SCREEN_HEIGHT:enemies.remove(enemy)# 移动子弹for bullet in bullets[:]:bullet.y -= bullet_speedif bullet.bottom < 0:bullets.remove(bullet)# 检测子弹和敌机的碰撞for bullet in bullets[:]:for enemy in enemies[:]:if bullet.colliderect(enemy):bullets.remove(bullet)enemies.remove(enemy)# 绘制背景screen.fill(WHITE)# 绘制玩家飞机screen.blit(player_img, player_rect)# 绘制敌机for enemy in enemies:screen.blit(enemy_img, enemy)# 绘制子弹for bullet in bullets:screen.blit(bullet_img, bullet)# 更新显示pygame.display.flip()# 退出 Pygame
pygame.quit()

代码解释

  • 初始化部分

    • 初始化pygame库,设置屏幕尺寸和标题。
    • 加载玩家飞机、敌机和子弹的图片,并设置玩家飞机的初始位置。
    • 定义敌机生成间隔和计时器,以及子弹的移动速度。
  • 游戏主循环

    • 控制游戏帧率为 60 帧每秒。
    • 处理事件,包括关闭窗口事件和发射子弹事件。
    • 根据按键状态移动玩家飞机。
    • 按一定间隔生成敌机,并移动敌机和子弹。
    • 检测子弹和敌机的碰撞,若碰撞则移除对应的子弹和敌机。
    • 绘制背景、玩家飞机、敌机和子弹,并更新显示。
  • 退出部分

    • 当用户关闭窗口时,退出pygame

运行思路

  • 安装依赖库:确保已经安装了pygame库,若未安装,可使用以下命令进行安装:
pip install pygame
  • 准备图片:准备好player.pngenemy.pngbullet.png三张图片,并将其放在与代码文件相同的目录下。
  • 运行脚本:将上述代码保存为aircraft_game.py文件,在终端中运行:
python aircraft_game.py
  • 开始游戏:使用上下左右键移动玩家飞机,按空格键发射子弹,尝试击落敌机。

注意事项

  • 请确保图片文件的路径和名称正确,否则会出现加载图片失败的错误。
  • 此代码只是一个简单的示例,你可以根据需求对游戏进行扩展,如添加音效、计分系统、关卡设计等。

相关文章:

Python实例题:pygame开发打飞机游戏

目录 Python实例题 题目 pygame-aircraft-game使用 Pygame 开发的打飞机游戏脚本 代码解释 初始化部分&#xff1a; 游戏主循环&#xff1a; 退出部分&#xff1a; 运行思路 注意事项 Python实例题 题目 pygame开发打飞机游戏 pygame-aircraft-game使用 Pygame 开发…...

《Zabbix Proxy分布式监控实战:从安装到配置全解析》

注意&#xff1a;实验所需的zabbix服务器的搭建可参考博客 zabbix 的docker安装_docker安装zabbix-CSDN博客 1.1 实验介绍 1.1.1 实验目的 本实验旨在搭建一个基于Zabbix的监控系统&#xff0c;通过安装和配置Zabbix Proxy、MySQL数据库以及Zabbix Agent&#xff0c;实现分…...

华为配置篇-RSTP/MSTP实验

MSTP 一、简介二、常用命令总结三、实验 一、简介 RSTP&#xff08;快速生成树协议&#xff09;​ RSTP&#xff08;Rapid Spanning Tree Protocol&#xff09;是 STP 的改进版本&#xff0c;基于 ​​IEEE 802.1w 标准​​&#xff0c;核心目标是解决传统 STP 收敛速度慢的问…...

git如何将本地 dev 分支与远程 dev 分支同步

要让本地 dev 分支与远程 dev 分支完全同步&#xff08;丢弃本地多余的提交记录&#xff09;&#xff0c;可以按照以下步骤操作&#xff1a; 1. ​​获取远程最新状态​ git fetch origin dev # 拉取远程 dev 分支的最新提交&#xff0c;但不会修改本地代码 IDEA中点击fetc…...

使用Python和OpenCV实现实时人脸检测与识别

前言 在计算机视觉领域&#xff0c;人脸检测与识别是两个非常重要的任务。人脸检测是指在图像中定位人脸的位置&#xff0c;而人脸识别则是进一步识别出人脸的身份。随着深度学习的发展&#xff0c;这些任务的准确性和效率都有了显著提升。OpenCV是一个开源的计算机视觉库&…...

Unity基础学习(九)输入系统全解析:鼠标、键盘与轴控制

目录 一、Input类 1. 鼠标输入 2. 键盘输入 3. 默认轴输入 &#xff08;1&#xff09; 基础参数 &#xff08;2&#xff09;按键绑定参数 &#xff08;3&#xff09;输入响应参数 &#xff08;4&#xff09;输入类型与设备参数 &#xff08;5&#xff09;不同类型轴的参…...

QT:获取软件界面窗口的尺寸大小2025.5.8

在Windows系统中&#xff0c;获取软件界面窗口的尺寸大小可以通过多种方法实现&#xff0c;以下是基于不同场景的详细解决方案&#xff1a; 方法1&#xff1a;使用Windows API获取窗口尺寸 适用于获取外部应用程序窗口的尺寸&#xff08;如记事本、计算器等&#xff09;。 步…...

【ML-Agents】ML-Agents示例项目导入unity报错解决

最近在跑ML-Agents的示例代码&#xff0c;无奈往unity中导入项目后&#xff0c;就出现报错。本文简要描述了各个报错的解决方法。 文章目录 一、error CS0234: The type or namespace name InputSystem does not exist in the namespace UnityEngine (are you missing an assem…...

【网络安全】SQL注入

如果文章不足还请各位师傅批评指正&#xff01; 想象一下&#xff0c;你经营着一家咖啡店&#xff0c;顾客可以通过店内的点单系统下单。这个系统会根据顾客的输入&#xff0c;向后厨发送指令&#xff0c;比如“为顾客A准备一杯拿铁”。 然而&#xff0c;如果有个不怀好意的顾客…...

Transformer Decoder-Only 参数量计算

Transformer 的 Decoder-Only 架构&#xff08;如 GPT 系列模型&#xff09;是当前大语言模型的主流架构&#xff0c;其参数量主要由以下几个部分组成&#xff1a; 嵌入层&#xff08;Embedding Layer&#xff09;自注意力层&#xff08;Self-Attention Layers&#xff09;前馈…...

uni-app 中的条件编译与跨端兼容

uni-app 为了实现一套代码编译到多个平台&#xff08;包括小程序&#xff0c;App&#xff0c;H5 等&#xff09;&#xff0c;引入了条件编译机制。 通过条件编译&#xff0c;我们可以针对不同的平台编写特定的代码&#xff0c;从而实现跨端兼容。 一、条件编译的作用 平台差异…...

<C#>log4net 的配置文件配置项详细介绍

log4net 是一个功能强大的日志记录工具&#xff0c;通过配置文件可以灵活地控制日志的输出方式、格式、级别等。以下是对 log4net 配置文件常见配置项的详细介绍&#xff1a; 根元素 <log4net> 这是 log4net 配置文件的根元素&#xff0c;所有配置项都要包含在该元素内…...

excel单元格如果是日期格式,在C#读取的时候会变成45807,怎么处理

excel单元格如果是日期格式&#xff0c;在C#读取的时候会变成45807&#xff0c;怎么处理 excel单元格如果是日期格式&#xff0c;在C#读取的时候会变成45807&#xff0c;怎么处理 在 C# 中&#xff0c;Excel 日期被表示为一个数字&#xff0c;这是因为 Excel 内部将日期存储为…...

Unity接入SDK之修改Unity启动页面

原理就是在Android Studio新建Activity继承UnityPlayerActivity&#xff0c;然后再Unity中修改启动页面。 一&#xff0c;Android Studio篇 首先新建一个项目&#xff0c; 新建完成之后基于新建的项目新建一个module&#xff0c;选择为Android Library类型 新建的Library再目…...

yarn workspace使用指南

作用 Yarn workspace 是 Yarn 包管理工具中的一个功能&#xff0c;主要用于管理多包项目&#xff08;monorepo&#xff09;。它的主要作用如下&#xff1a; 支持多包结构&#xff1a;允许在一个仓库中管理多个独立的包或项目。项目间依赖管理&#xff1a;方便地在不同包之间添…...

[学习]RTKLib详解:datum.c、download.c与lambda.c

RTKLib详解: datum.c、download.c 与 lambda.c 本文是 RTKLlib详解 系列文章的一篇&#xff0c;目前该系列文章还在持续总结写作中&#xff0c;以发表的如下&#xff0c;有兴趣的可以翻阅。 [学习] RTKlib详解&#xff1a;功能、工具与源码结构解析 [学习]RTKLib详解&#xff…...

VUE el-select下拉框动态设置禁用,删除后恢复可选择

场景&#xff1a;点击新增添加按钮&#xff0c;列表table会新增一条包含下拉菜单的数据&#xff0c;如果其中任何一个下拉框选择了某个值&#xff0c;那么新增的下拉菜单的选项中该值是禁用状态&#xff0c;只能选择其他未被选中过的值。点击删除按钮后&#xff0c;已禁用的选项…...

FPGA----基于ALINX提供的debian实现TCF

引言:接上问,我们使用自制的image.ub和boot.bin以及ALINX提供的debian8根文件系统,构建了petalinux,但是经测试,该文件系统无法启用TCF服务,即无法与Xilinx SDK建立连接,那么我们应该如何解决? FPGA----基于ZYNQ 7020实现定制化的EPICS通信系统-CSDN博客文章浏览阅读4…...

木马查杀篇—Opcode提取

【前言】 介绍Opcode的提取方法&#xff0c;并探讨多种机器学习算法在Webshell检测中的应用&#xff0c;理解如何在实际项目中应用Opcode进行高效的Webshell检测。 Ⅰ 基本概念 Opcode&#xff1a;计算机指令的一部分&#xff0c;也叫字节码&#xff0c;一个php文件可以抽取出…...

1.7 方向导数

&#xff08;底层逻辑演进脉络&#xff09;从"单车道"到"全路网"的导数进化史&#xff1a; 一、偏导数奠基&#xff08;1.6核心&#xff09; 诞生背景&#xff1a;多元函数分析需求 当变量间存在耦合关系时&#xff08;如房价面积单价装修成本&#xff09…...

设计模式系列(01):总览与引导

设计模式系列(01):总览与引导 本文为设计模式系列第1篇,定位为总览和引导,系统梳理设计模式的核心思想、分类、UML、设计原则、典型场景、学习建议与常见误区,适合系统学习与团队协作。 目录 1. 前言2. 设计模式简介3. UML与设计模式4. 术语解释5. UML工具与PlantUML6. 面…...

国产化Excel处理控件Spire.XLS系列教程:如何通过 C# 删除 Excel 工作表中的筛选器

在 Excel 文件中&#xff0c;筛选器&#xff08;Filter&#xff09;是一个常用的数据处理工具&#xff0c;可以帮助用户快速按条件筛选数据行。但在数据整理完成、导出、共享或打印之前&#xff0c;往往需要 删除 Excel 工作表中的筛选器&#xff0c;移除列标题中的下拉筛选按钮…...

第二篇 客户端脚本安全

同源策略 限制了来自不同的"dociment"或脚本&#xff0c;对当前"dociment"读取或设置一些属性。 不同源&#xff1a;host&#xff08;域名或ip&#xff09;&#xff0c;子域名&#xff0c;端口&#xff0c;协议。 对于当前页面来说&#xff0c;页面的源…...

[sklearn] 特征工程

一.字典数据抽取 def dictvec():"""字典数据抽取:return: None"""# 实例化# sparse改为True,输出的是每个不为零位置的坐标&#xff0c;稀疏矩阵可以节省存储空间dict DictVectorizer(sparseFalse) #矩阵中存在大量的0&#xff0c;sparse存储只…...

CI/CD与DevOps流程流程简述(提供思路)

一 CI/CD流程详解&#xff1a;代码集成、测试与发布部署 引言 在软件开发的世界里&#xff0c;CI/CD&#xff08;持续集成/持续交付&#xff09;就像是一套精密的流水线&#xff0c;确保代码从开发到上线的整个过程高效、稳定。我作为一名资深的软件工程师&#xff0c;接下来…...

S7-1500——零基础入门1、工业编程基本概念

工业编程基本概念 一,数制与基本数据类型二,数字量信号三,模拟量信号一,数制与基本数据类型 本节主要内容 类别内容主题数制与基本数据类型数制讲解十进制、十六进制、二进制及其进位规则;基数、位权概念数据类型介绍PLC 使用的数据类型:未序列数据类型(bit、byte、wor…...

六、快速启动框架:SpringBoot3实战

六、快速启动框架&#xff1a;SpringBoot3实战 目录 一、SpringBoot3介绍 1.1 SpringBoot3简介1.2 系统要求1.3 快速入门1.4 入门总结 二、SpringBoot3配置文件 2.1 统一配置管理概述2.2 属性配置文件使用2.3 YAML配置文件使用2.4 批量配置文件注入2.5 多环境配置和使用 三、…...

万兴PDF-PDFelement v11.4.13.3417

万兴PDF专家(Wondershare PDFelement)是一款国产PDF文档全方位解决方案.万兴PDF编辑器软件万兴PDF中文版,专注于PDF的创建,编辑,转换,签名,压缩,合并,比较等功能.万兴PDF专业版PDF编辑软件,以简约风格及强大的功能在国外名声大噪,除了传统功能外,还提供OCR扫描,表格识别,创建笔…...

LSP里氏替换原则

LSP强调子类必须能够替换父类。即子类应该具有与父类相同的行为和功能&#xff0c;而不仅仅是继承父类的属性和方法。LSP是对继承机制的约束规范、是指导接口与实现的设计原则。 LSP关键点 前置条件不能强化&#xff1a;子类方法的参数类型必须与父类相同或者更为宽松。后置条…...

机器学习-无量纲化与特征降维(一)

一.无量纲化-预处理 无量纲&#xff0c;即没有单位的数据 无量纲化包括"归一化"和"标准化"&#xff0c;这样做有什么用呢&#xff1f;假设用欧式距离计算一个公司员工之间的差距&#xff0c;有身高&#xff08;m&#xff09;、体重&#xff08;kg&#x…...