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
  • 开始游戏:使用上下左右键移动玩家飞机,按空格键发射子弹,尝试击落敌机。

注意事项

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/80776.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Gin 框架入门

Gin 框架入门 一、响应数据 JSON 响应 在 Web 开发中&#xff0c;JSON 是一种常用的数据交换格式。Gin 提供了简便的方法来响应 JSON 数据。 package mainimport ("github.com/gin-gonic/gin" )func main() {r : gin.Default()r.GET("/json", func(c *…

Flink实时数仓数据突变时,如何快速排查原因

在大数据时代,数据的价值已经被无数企业和组织深刻认识到,而实时数仓作为数据处理和分析的重要基础设施,正在逐渐成为推动业务增长和决策优化的核心引擎。想象一下,电商平台在双十一大促期间需要实时监控订单量、用户行为,甚至库存变化,以便及时调整营销策略和物流调度;…

视频人像抠图技术选型--截止2025年4月

前言&#xff1a;我是一名算法工程师&#xff0c;经常需要对某个AI功能做技术调研和输出技术选型报告&#xff0c;在过去多年的工作当中&#xff0c;积累了很多内容&#xff0c;我会陆陆续续将这些内容整理出来分享给大家&#xff0c;希望大家喜欢&#xff0c;感谢您的阅读&…

docker compose ps 命令

docker compose ps 命令用于列出与 Docker Compose 项目相关的容器及其状态。 docker compose ps 能显示当前项目中所有服务容器的运行状态、端口映射等信息。 语法 docker compose ps [OPTIONS] [SERVICE…] SERVICE&#xff08;可选&#xff09;&#xff1a;指定要查看状态…

C语言 字符函数和字符串函数(1)

目录 1.字符分类函数 2.字符转换函数 3.strlen的使用和模拟实现 4.strcpy的使用和模拟实现 在编程的过程中&#xff0c;我们经常要处理字符和字符串&#xff0c;为了方便操作字符和字符串&#xff0c;C语言标准库中提 供了一系列库函数&#xff0c;接下来我们就学习一下这…

MySQL 中如何进行 SQL 调优?

在MySQL中进行SQL调优是一个系统性工程&#xff0c;需结合索引优化、查询改写、性能分析工具、数据库设计及硬件配置等多方面策略。以下是具体优化方法及案例说明&#xff1a; 一、索引优化&#xff1a;精准提速的关键 索引类型选择 普通索引&#xff1a;加速频繁查询的列&…

OpenCV图像金字塔详解:原理、实现与应用

一、什么是图像金字塔&#xff1f; 图像金字塔是图像处理中一种重要的多尺度表示方法&#xff0c;它通过对图像进行重复的平滑和降采样&#xff08;或上采样&#xff09;操作&#xff0c;生成一系列分辨率逐渐降低&#xff08;或升高&#xff09;的图像集合。这种结构形似金字…

收集飞花令碎片——C语言分支与循环语句(上)

前言 Hello,各位码友&#xff0c;本章将会给大家带来C语言的分支与循环整章串讲&#xff0c;这一张的内容分为基础知识和程序练习两个部分 希望通过这一章能够带大家更好地去掌握C语言的分支与循环语句 大家一起努力吧 C语言分支与循环语句&#xff08;基础知识&#xff09; C…

嵌入式硬件篇---TOF|PID

文章目录 前言1. 硬件准备主控芯片ToF模块1.VL53L0X2.TFmini 执行机构&#xff1a;电机舵机其他 2. 硬件连接(1) VL53L0X&#xff08;IC接口&#xff09;(2) TFmini&#xff08;串口通信&#xff09; 3. ToF模块初始化与数据读取(1) VL53L0X&#xff08;基于HAL库&#xff09;(…

PCB设计实践(十二)PCB设计电容选型:功能、材质、规则

在PCB设计中&#xff0c;电容作为基础元件承担着滤波、储能、去耦、耦合等核心功能。其分类与使用规则直接影响电路稳定性、抗干扰能力和信号完整性。本文从工程实践角度系统梳理PCB设计中电容的五大分类、选型规范及布局布线规则&#xff0c;帮助设计者构建科学的电容应用体系…

vue2关闭eslint

在项目根目录下找到 vue.config.js 文件。如果没有该文件&#xff0c;可以直接在项目根目录创建一个。 2. 添加 lintOnSave: false 配置 module.exports {lintOnSave: false };

MyBatis 一对多关联映射在Spring Boot中的XML配置

在Spring Boot中使用MyBatis实现一对多关系时&#xff0c;可以通过XML映射文件来配置。下面我将详细介绍几种实现方式。 基本概念 一对多关系指的是一个实体对象包含多个子对象集合的情况&#xff0c;例如&#xff1a; 一个部门有多个员工一个订单有多个订单项一个博客有多个…

基于Stable Diffusion XL模型进行文本生成图像的训练

基于Stable Diffusion XL模型进行文本生成图像的训练 flyfish export MODEL_NAME"stabilityai/stable-diffusion-xl-base-1.0" export VAE_NAME"madebyollin/sdxl-vae-fp16-fix" export DATASET_NAME"lambdalabs/naruto-blip-captions"acceler…

基于React的高德地图api教程001:初始化地图

文章目录 1、初始化地图1.1 创建react项目1.2 可视化地图1.3 设置卫星地图1.4 添加开关开启3D地图1.5 代码下载1、初始化地图 1.1 创建react项目 创建geodeapi项目: npx create-react-app gaodeapi安装高德地图包: npm install @amap/amap-jsapi-loader1.2 可视化地图 在…

uniapp使用npm下载

uniapp的项目在使用HBuilder X创建时是不会有node_modules文件夹的&#xff0c;如下图所示&#xff1a; 但是uni-app不管基于哪个框架&#xff0c;它内部一定是有node.js的&#xff0c;否则没有办法去实现框架层面的一些东西&#xff0c;只是说它略微有点差异。具体差异表现在…

轻量在线工具箱系统源码 附教程

源码介绍 轻量在线工具箱系统源码,直接扔服务器 修改config/config.php文件里面的数据库 后台账号admin 密码admin123 本工具是AI写的 所以工具均是第三方接口直接写的。 需要加工具直接自己找接口写好扔到goju目录 后台自动读取 效果预览 源码获取 轻量在线工具箱系统源…

图解gpt之Seq2Seq架构与序列到序列模型

今天深入探讨如何构建更强大的序列到序列模型&#xff0c;特别是Seq2Seq架构。序列到序列模型&#xff0c;顾名思义&#xff0c;它的核心任务就是将一个序列映射到另一个序列。这个序列可以是文本&#xff0c;也可以是其他符号序列。最早&#xff0c;人们尝试用一个单一的RNN来…

mac M2能安装的虚拟机和linux系统系统

能适配MAC M2芯片的虚拟机下Linux系统的搭建全是深坑&#xff0c;目前网上的资料能搜到的都是错误的&#xff0c;自己整理并分享给坑友们~ 网上搜索到的推荐安装的改造过的centos7也无法进行yum操作&#xff0c;我这边建议安装centos8 VMware Fusion下载地址&#xff1a; htt…

「国产嵌入式仿真平台:高精度虚实融合如何终结Proteus时代?」——从教学实验到低空经济,揭秘新一代AI赋能的产业级教学工具

引言&#xff1a;从Proteus到国产平台的范式革新 在高校嵌入式实验教学中&#xff0c;仿真工具的选择直接影响学生的工程能力培养与创新思维发展。长期以来&#xff0c;Proteus作为经典工具占据主导地位&#xff0c;但其设计理念已难以满足现代复杂系统教学与国产化技术需求。…

【Linux】在Arm服务器源码编译onnxruntime-gpu的whl

服务器信息&#xff1a; aarch64架构 ubuntu20.04 nvidia T4卡 编译onnxruntime-gpu前置条件&#xff1a; 已经安装合适的cuda已经安装合适的cudnn已经安装合适的cmake 源码编译onnxruntime-gpu的步骤 1. 下载源码 git clone --recursive https://github.com/microsoft/o…