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

Python小游戏14——雷霆战机

7d32fbc21f0e4dbf899ef90973136141.png

 

首先,你需要确保安装了Pygame库。如果你还没有安装,可以使用pip来安装:

 

bash

pip install pygame

  • 代码如下:

python

import pygame

import sys

import random

 

# 初始化Pygame

pygame.init()

 

# 设置屏幕大小

screen_width = 800

screen_height = 600

screen = pygame.display.set_mode((screen_width, screen_height))

pygame.display.set_caption("雷霆战机")

 

# 颜色定义

WHITE = (255, 255, 255)

BLACK = (0, 0, 0)

 

# 加载飞机图像

player_img = pygame.image.load("player.png") # 确保你有一个名为player.png的飞机图像文件

player_img = pygame.transform.scale(player_img, (50, 50))

player_x = screen_width // 2

player_y = screen_height - 100

player_x_change = 0

 

# 子弹定义

bullet_img = pygame.image.load("bullet.png") # 确保你有一个名为bullet.png的子弹图像文件

bullet_img = pygame.transform.scale(bullet_img, (10, 20))

bullet_x = 0

bullet_y = player_y

bullet_x_change = 0

bullet_y_change = 10

bullet_state = "ready" # "ready"表示子弹未发射,"fire"表示子弹已发射

 

# 游戏主循环

running = True

while running:

    # 背景填充

    screen.fill(BLACK)

 

    for event in pygame.event.get():

        if event.type == pygame.QUIT:

            running = False

 

        # 检测按键

        if event.type == pygame.KEYDOWN:

            if event.key == pygame.K_LEFT:

                player_x_change = -5

            if event.key == pygame.K_RIGHT:

                player_x_change = 5

            if event.key == pygame.K_SPACE and bullet_state == "ready":

                bullet_x = player_x + 20

                bullet_state = "fire"

 

        if event.type == pygame.KEYUP:

            if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:

                player_x_change = 0

 

    # 更新飞机位置

    player_x += player_x_change

    if player_x <= 0:

        player_x = 0

    elif player_x >= screen_width - 50:

        player_x = screen_width - 50

 

    # 更新子弹位置

    if bullet_state == "fire":

        fire_bullet(screen, bullet_x, bullet_y, bullet_img, bullet_x_change, bullet_y_change)

        bullet_y -= bullet_y_change

    if bullet_y <= 0:

        bullet_y = player_y

        bullet_state = "ready"

 

    # 绘制飞机

    screen.blit(player_img, (player_x, player_y))

 

    # 更新屏幕

    pygame.display.update()

 

# 退出Pygame

pygame.quit()

sys.exit()

 

def fire_bullet(screen, x, y, bullet_img, x_change, y_change):

    bullet_rect = bullet_img.get_rect()

    bullet_rect.topleft = (x, y)

    screen.blit(bullet_img, bullet_rect)

  • 注意事项:

图像文件:确保你有名为player.png和bullet.png的图像文件,并放在与你的Python脚本相同的目录中。

  • 《雷霆战机》Python小游戏的知识点总结

1. pygame库的安装与配置

pygame是一个开源的Python库,用于制作游戏,包括图形和声音库。

安装pygame可以通过pip命令完成。

配置pygame通常意味着确保所有依赖项都正确安装,包括SDL、音频库等。

2. 游戏窗口与图形绘制

使用pygame.display.set_mode()设置游戏窗口的大小。

使用pygame.display.set_caption()设置窗口标题。

使用pygame.image.load()加载图像,并使用pygame.Surface()创建图像对象。

使用pygame.draw.circle()、pygame.draw.rect()等函数在屏幕上绘制形状。

使用screen.blit()将图像绘制到屏幕上。

3. 游戏循环与事件处理

游戏主循环是游戏运行的核心,通常使用while循环实现。

使用pygame.event.get()获取事件队列中的事件,并处理用户输入(如按键、鼠标点击等)。

使用pygame.quit()和sys.exit()退出游戏。

4. 精灵(Sprite)与精灵组(Sprite Group)

精灵是pygame中用于表示游戏对象的类,通常包含图像、位置和移动速度等属性。

使用pygame.sprite.Sprite()创建精灵类,并定义其__init__()、update()和draw()方法。

精灵组用于管理多个精灵,可以方便地对它们进行更新和绘制。

5. 碰撞检测与得分系统

使用pygame.sprite.spritecollide()检测两个精灵之间的碰撞。

可以设置得分系统,通过碰撞检测来增加或减少分数。

6. 音频管理

使用pygame.mixer.init()初始化音频模块。

使用pygame.mixer.music.load()和pygame.mixer.music.play()加载和播放背景音乐。

可以使用pygame.mixer.Sound()加载和播放音效。

7. 游戏状态管理

游戏状态管理涉及游戏的不同阶段(如开始、运行、结束等)的切换和处理。

可以使用变量或类来管理游戏状态,并根据状态执行相应的操作。

8. 用户输入处理

处理键盘和鼠标输入是游戏开发中常见的需求。

使用pygame.key.get_pressed()获取键盘按键状态。

使用pygame.mouse.get_pos()获取鼠标位置,使用pygame.mouse.get_pressed()获取鼠标按键状态。

相关文章:

Python小游戏14——雷霆战机

首先&#xff0c;你需要确保安装了Pygame库。如果你还没有安装&#xff0c;可以使用pip来安装&#xff1a; bash pip install pygame 代码如下&#xff1a; python import pygame import sys import random # 初始化Pygame pygame.init() # 设置屏幕大小 screen_width 800 scr…...

81页PPT | 企业数字化底座与数字化转型方案

方案内容涵盖了企业数字化转型的议程、集团管理分析类应用建设的现状与问题、数字化建设的目标、预期收益、总体架构、数据产生层、数据交换层、数据存储层、数据应用层、数据管控层等多个方面。方案详细描述了数据从产生、交换、存储到应用的全过程&#xff0c;以及如何通过数…...

R语言笔记(五):Apply函数

文章目录 一、Apply Family二、apply(): rows or columns of a matrix or data frame三、Applying a custom function四、Applying a custom function "on-the-fly"五、Applying a function that takes extra arguments六、Whats the return argument?七、Optimized…...

Newsqueak:在 Go 之前的一门语言

写在前面 学习一个东西的一种很好的方法&#xff0c;就是去了解这个东西的历史。在我们学习 Go 的过程中&#xff0c;同样也可以去了解下在 Go 之前的一些事情。 内容 Rob Pike 是 Go 语言的作者之一&#xff0c;早年他在贝尔实验室工作&#xff0c;也是 Unix 团队的成员。 …...

世界酒中国菜与另可数字平台达成战略合作

世界酒中国菜与另可数字平台达成战略合作&#xff0c;共推行业发展新高度 近日&#xff0c;在行业内引起广泛关注的“世界酒中国菜”项目&#xff0c;与“另可”数字平台成功举行了战略合作签约仪式。这一重要合作不仅是双方发展历程中的重要里程碑&#xff0c;更是继世界酒中…...

ElasticSearch基础篇——概念讲解,部署搭建,使用RestClient操作索引库和文档数据

目录 一、概念介绍 二、Elasticsearch的Docker容器安装 2.1拉取elasticsearch的镜像文件 2.2运行docker命令启动容器 2.3通过访问端口地址查看部署情况 三、安装Kibana容器 3.1拉取Kibana镜像容器指令&#xff08;默认拉取最新版本&#xff09;&#xff1a; 3.2拉取完…...

k8s 二进制部署安装(一)

目录 环境准备 初始化操作系统 部署docker 引擎 部署 etcd 集群 准备签发证书环境 部署 Master01 服务器相关组件 apiserver scheduler controller-manager.sh admin etcd 存储了 Kubernetes 集群的所有配置数据和状态信息&#xff0c;包括资源对象、集群配置、元数据…...

115页PPT华为管理变革:制度创新与文化塑造的核心实践

集成供应链&#xff08;ISC&#xff09;体系 集成供应链&#xff08;ISC&#xff09;体系是英文Integrated Supply Chain的缩写&#xff0c;是一种先进的管理思想&#xff0c;它指的是由相互间提供原材料、零部件、产品和服务的供应商、合作商、制造商、分销商、零售商、顾客等…...

ubuntu限制网速方法

sudo apt-get install trickle sudo trickle -d <下载速度> -u <上传速度> <命令>例如git clone sudo trickle -d 1024 git clone http://xxxxxxxxxx.git如果想简化指令可以在bashrc中添加如下指令 alias gitttrickle -u 1024 gitgitt为自定义 使用方法&am…...

三品PLM研发管理系统:企业产品研发过程的得力助手

三品PLM系统&#xff1a;全方位赋能企业产品生命周期管理的优选方案 在当今竞争激烈的市场环境中&#xff0c;产品生命周期管理PLM系统已成为企业实现高效、灵活和创新产品开发的关键工具。PLM系统集成了信息技术、先进管理思想与企业业务流程&#xff0c;旨在帮助企业优化产品…...

PyCharm 添加不了 Anaconda 环境

经常会遇到 PyCharm 无法添加新创建的 Anaconda 环境&#xff0c; Setting --> Python Interpreter --> Add Python Interperter --> Conda Environment 中为空&#xff0c;即使打开右侧文件夹路径按钮&#xff0c;选择新创建的 conda 环境&#xff0c;也无法找到 pyt…...

Leetcode 二叉树的右视图

好的&#xff0c;我来用中文详细解释这段代码的算法思想。 问题描述 题目要求给定一个二叉树的根节点&#xff0c;从树的右侧看过去&#xff0c;按从上到下的顺序返回看到的节点值。即&#xff0c;我们需要找到每一层的最右侧节点并将其加入结果中。 算法思想 这道题可以通…...

console.log(“res.data = “ + JSON.stringify(res.data));

res.data[object Object] 说明你在控制台打印 res.data 时&#xff0c;它是一个 JavaScript 对象&#xff0c;而不是字符串。这种情况下&#xff0c;console.log 输出的 [object Object] 表示它无法直接显示对象的内容。 要查看 res.data 的实际内容&#xff0c;你需要将其转换…...

node和npm

背景&#xff08;js&#xff09; 1、为什么js能操作DOM和BOM? 原因&#xff1a;每个浏览器都内置了DOM、BOM这样的API函数 2、浏览器中的js运行环境&#xff1f; v8引擎&#xff1a;负责解析和执行js代码 内置API&#xff1a;由运行环境提供的特殊接口&#xff0c;只能在所…...

通过四元数求机器人本体坐标旋转量

是的&#xff0c;通过两次姿态数据&#xff08;以四元数表示&#xff09;的差值&#xff0c;可以确定机器人在两个时刻之间的旋转角度变化。具体步骤如下&#xff1a; 获取四元数&#xff1a;假设两个时刻的四元数分别为 ( q_1 ) 和 ( q_2 )。计算四元数的差值&#xff1a; 将…...

CodeQL学习笔记(2)-QL语法(递归)

最近在学习CodeQL&#xff0c;对于CodeQL就不介绍了&#xff0c;目前网上一搜一大把。本系列是学习CodeQL的个人学习笔记&#xff0c;根据个人知识库笔记修改整理而来的&#xff0c;分享出来共同学习。个人觉得QL的语法比较反人类&#xff0c;至少与目前主流的这些OOP语言相比&…...

Video-XL:面向小时级视频理解的超长视觉语言模型

在人工智能领域&#xff0c;视频理解一直是一个挑战性的任务&#xff0c;尤其是对于长时间视频内容的理解。现在&#xff0c;Video-XL的问世标志着我们在这一领域迈出了重要的一步。Video-XL是一个专为小时级视频理解设计的超长视觉语言模型&#xff0c;它能够处理超长视频序列…...

postgresql subtransaction以及他的效能

文章目录 什么是subtransaction使用子事务PL/pgSQL 中的子事务与其他数据库的兼容性运行性能测试Subtransaction的实现子事务和可见性解释测试结果诊断子事务过多的问题结论 什么是subtransaction 在 PostgreSQL 中&#xff0c;当处于自动提交模式时&#xff0c;必须使用 BEGI…...

新手逆向实战三部曲之二——通过更改关键跳注册软件(爆破)

教程开始&#xff1a; 软件已无壳&#xff0c;具体脱壳请移步"新手逆向实战三部曲之一"&#xff0c;这里略去查壳脱壳。 先用OD打开软件试运行了解下注册流程&#xff0c;以便找到突破口 经过对软件的了解&#xff0c;本次教程采用的是下bp MessageBoxA断点的方法找…...

高级SQL技巧:提升数据查询与分析能力的关键

高级SQL技巧&#xff1a;提升数据查询与分析能力的关键 在数据驱动的时代&#xff0c;SQL&#xff08;结构化查询语言&#xff09;是数据分析和数据库管理的基础工具。掌握高级SQL技巧不仅能提高查询效率&#xff0c;还能优化数据库结构&#xff0c;使数据分析和报告更加精准高…...

终极压枪指南:5步掌握PUBG罗技鼠标宏精准射击

终极压枪指南&#xff1a;5步掌握PUBG罗技鼠标宏精准射击 【免费下载链接】logitech-pubg PUBG no recoil script for Logitech gaming mouse / 绝地求生 罗技 鼠标宏 项目地址: https://gitcode.com/gh_mirrors/lo/logitech-pubg logitech-pubg是一款专为《绝地求生》玩…...

用Wireshark抓包学LTE:手把手解析开机附着流程中的NAS/RRC消息

用Wireshark抓包学LTE&#xff1a;手把手解析开机附着流程中的NAS/RRC消息 1. LTE信令分析实战环境搭建 工欲善其事&#xff0c;必先利其器。在开始解析LTE信令前&#xff0c;我们需要搭建专业的分析环境。不同于传统教材的理论讲解&#xff0c;我们将从工程师视角构建完整的分…...

霞鹜文楷GB:为什么选择这款免费开源的中文国标字体?

霞鹜文楷GB&#xff1a;为什么选择这款免费开源的中文国标字体&#xff1f; 【免费下载链接】LxgwWenkaiGB An open-source Simplified Chinese font derived from Klee One. 项目地址: https://gitcode.com/gh_mirrors/lx/LxgwWenkaiGB 霞鹜文楷GB是一款基于日本Klee O…...

孟德尔随机化实战(五)—— 告别报错!Error in if (out == “[]“) 深度解析与TwoSampleMR参数调优全攻略

1. 报错现象深度解析&#xff1a;为什么会出现"参数长度为零"&#xff1f; 最近在孟德尔随机化分析交流群里&#xff0c;这个报错出现的频率简直高得离谱&#xff1a;"Error in if (out "[]") { : argument is of length zero"或者它的中文版&q…...

Materials Studio8.0在CentOS7.9环境下的安装与配置指南

1. 环境准备与系统检查 在CentOS 7.9上安装Materials Studio 8.0之前&#xff0c;我们需要确保系统环境满足最低要求。我遇到过不少因为环境配置不当导致的安装失败案例&#xff0c;这里分享几个关键检查点&#xff1a; 首先检查主机名是否包含特殊字符。Materials Studio对主机…...

零基础一键配置黑苹果:OpCore-Simplify智能工具让复杂变简单

零基础一键配置黑苹果&#xff1a;OpCore-Simplify智能工具让复杂变简单 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 还在为黑苹果配置时面对满屏代…...

4大核心优势解决人脸处理难题:设计师与创作者的AI增强工具

4大核心优势解决人脸处理难题&#xff1a;设计师与创作者的AI增强工具 【免费下载链接】DZ-FaceDetailer a node for comfyui for restore/edit/enchance faces utilizing face recognition 项目地址: https://gitcode.com/gh_mirrors/dz/DZ-FaceDetailer 【问题诊断】为…...

ViGEmBus虚拟控制器驱动完全指南:从设备模拟到多场景应用

ViGEmBus虚拟控制器驱动完全指南&#xff1a;从设备模拟到多场景应用 【免费下载链接】ViGEmBus Windows kernel-mode driver emulating well-known USB game controllers. 项目地址: https://gitcode.com/gh_mirrors/vi/ViGEmBus 一、为什么需要虚拟控制器&#xff1f;…...

SpringBoot3 + JetCache实战:如何用两级缓存把接口性能提升10倍?

SpringBoot3 JetCache实战&#xff1a;高并发场景下的缓存架构设计与性能优化 在电商秒杀、实时数据查询等高并发场景中&#xff0c;传统数据库直接承受流量冲击往往会导致系统崩溃。去年双十一期间&#xff0c;某头部电商平台通过多级缓存架构成功扛住了每秒百万级的查询请求…...

哲学家吃饭问题没搞懂?用Python模拟信号量帮你彻底理解进程同步(附可运行代码)

用Python动态模拟哲学家进餐问题&#xff1a;从死锁到解决方案的完整实践指南 在操作系统的学习中&#xff0c;哲学家进餐问题堪称进程同步与死锁的"经典案例"。这个看似简单的场景却蕴含着并发编程中最棘手的挑战——如何协调多个进程对有限资源的访问。本文将带你…...