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()获取鼠标按键状态。

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

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

相关文章

Android在kts中使用navigation及Args

Android在kts中使用navigation及Args 前言&#xff1a; ​ 之前在项目中使用过navigation&#xff0c;但都是以Groory的方式&#xff0c;最近一年多使用kts后忍不住把项目都改成kts的方式&#xff0c;不过其中也遇到不少坑&#xff0c;今天就讲解一下如何在kts中使用navigati…

解决蓝牙键盘按键错乱的问题

最近发现我的蓝牙键盘按下的键盘与实际不符&#xff0c;于是就上网搜索答案&#xff0c;网上的方法都试了一遍 最后想着准备退货&#xff0c;没想到客服直接给我解决了 原因很简单&#xff0c;就是之前误触了键盘的某些按键导致的 每个键盘品牌的按键因该都不同的&#xff0c;可…

VBA技术资料MF220:删除模块内容

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套&#xff0c;分为初级、中级、高级三大部分&#xff0c;教程是对VBA的系统讲解&#…

英伟达GPU算力【自用】

GPU&#xff08;图形处理单元&#xff09;算力的提升是驱动当代科技革命的核心力量之一&#xff0c;尤其在人工智能、深度学习、科学计算和超级计算机领域展现出了前所未有的影响力。2024年的GPU技术发展&#xff0c;不仅体现在游戏和图形处理的传统优势上&#xff0c;更在跨行…

ZooKeeper 客户端API操作

文章目录 一、节点信息1、创建节点2、获取子节点并监听节点变化3、判断节点是否存在4、客户端向服务端写入数据写入请求直接发给 Leader 节点写入请求直接发给 follow 节点 二、服务器动态上下线监听1、监听过程2、代码 三、分布式锁1、什么是分布式锁?2、Curator 框架实现分布…

qt 滚动条 美化

qt QScrollBar 滚动条分为竖直与水平滚动条&#xff0c;两者设置上类似&#xff0c;但也有一些不同&#xff0c;下面主要讲述美化及注意事项。 一、竖直滚动条 竖直滚动条分为7个部分&#xff1a; sub-line、 up-arrow 、sub-page、 hanle、 add-line、 dow-arrow、 add-pag…

线性回归模型与检验 6个适用条件

当因变量与自变量间存在线性相关关系时&#xff0c;可以使用线性回归分析方法确定它们之间的相互依赖的定量关系。此处所说的定量关系&#xff0c;并非严格的因果关系&#xff0c;而是自变量X对因变量Y的影响或预测的作用。 例如分析广告费、产品单价、产品满意度、服务满意度…

说它是谁就是谁—Python语言中的鸭子类型

鸭子类型&#xff08;Duck Typing&#xff09;是动态类型语言中的一种类型推断风格&#xff0c;尤其在Python语言中得到了广泛的应用。它的核心思想是&#xff1a;“如果它走起路来像鸭子&#xff0c;叫起来像鸭子&#xff0c;那么它就是鸭子”。这句话的意思是&#xff0c;我们…

python_httpstat库

Python httpstat是一个基于Python的命令行工具&#xff0c;用于测量HTTP请求的性能和状态信息。它能够向目标服务器发送HTTP请求&#xff0c;并显示详细的统计信息&#xff0c;包括DNS解析时间、建立连接时间、TLS/SSL握手时间、首字节时间、总时间等。这些信息对于排查网络问题…

详解varint,zigzag编码, 以及在Go标准库中的实现

文章目录 为啥需要varint编码为啥需要zigzag编码varint编码解码 zigzag编码解码 局限性 为啥需要varint编码 当我们用定长数字类型int32来表示整数时&#xff0c;为了传输一个整数1&#xff0c;我们需要传输00000000 00000000 00000000 00000001 32 个 bits&#xff0c;而有价…

SQLite3库增删改查实现数据管理

1. SQLite3简介 SQLite3是一个轻量级的、嵌入式的关系型数据库管理系统&#xff0c;在保存测序数据或结果等时可使用&#xff0c;简单高效&#xff0c;并且有无需服务器、单文件存储数据、支持标准SQL、支持跨平台等优势。 本文以Sqlite3数据库为基础&#xff0c;创建代码示例…

tomcat基本配置

目录 1.java容器简介介绍 2.部署tomcat 2.1上传jdk 2.2创建一个软连接 2.3配置环境变量 2.4读取环境文件并且查看java版本 2.5检查jdk tomcat信息 2.6启动tomcat 2.7检测 3.tomcat 目录结构 3.1总体目录 3.2 bin目录 3.3conf 3.4 logs日志 4.运行代码 4.…

如何确保电子商务网站服务器的正常运行时间

对于电商网站而言&#xff0c;服务器的正常运行时间至关重要。网站宕机会直接影响销售额、客户体验以及品牌声誉。本文将详细探讨如何监控并保障服务器的正常运行时间&#xff0c;确保您的电商网站始终保持在线状态&#xff0c; 为什么监控正常运行时间很重要&#xff1f; 减…

【Oracle实验】字段为空的,无法通过排除判断

Oracle相关文档&#xff0c;希望互相学习&#xff0c;共同进步 风123456789&#xff5e;-CSDN博客 1.场景描述 需求&#xff1a;查询不是某个机构的数据。 同事SQL&#xff1a;where substr(bank_code,1,9) not in(014009001)&#xff1b; 看SQL似乎没什么问题&#xff0c;分析…

【modbus协议】libmodbus库移植基于linux平台

文章目录 下载库函数源码编译路径添加libmodbus 源码分析核心数据结构常用接口函数 开发 TCP Server 端开发TCP Client 端 下载库函数源码 编译路径添加 libmodbus 源码分析 核心数据结构 modbus_t结构体&#xff1a; 这是 libmodbus 的核心数据结构&#xff0c;代表一个 Mod…

OSPF特殊区域及其他特性

不用的链路这状态信息没必要一直保存&#xff0c;要不路由器承受不了。用OSPF 特殊区域解决 1. Stub区域和Totally Stub区域 R1作为ASBR引入多个外部网段&#xff0c;如果Area 2是普通区域&#xff0c;则R3将向该区域注入5类和4类LSA。 当把Area 2配置为Stub区域后&#xff1a…

node升级package.json中的版本

由于项目使用时间过老&#xff0c;升级对应包版本&#xff0c;可以使用新功能 1.使用npm-check-updates这个工具&#xff0c;先全局安装 npm install -g npm-check-updates2.检查package.json中dependencies的最新版本 ncu3.更新dependencies到新版本 ncu -u也是一样的 npx…

探索Python安全字符串处理的奥秘:MarkupSafe库揭秘

文章目录 探索Python安全字符串处理的奥秘&#xff1a;MarkupSafe库揭秘第一部分&#xff1a;背景介绍第二部分&#xff1a;MarkupSafe是什么&#xff1f;第三部分&#xff1a;如何安装MarkupSafe&#xff1f;第四部分&#xff1a;MarkupSafe的简单使用方法1. 使用escape函数2.…

机器视觉运动控制一体机在DELTA并联机械手视觉上下料应用

市场应用背景 DELTA并联机械手是由三个相同的支链所组成&#xff0c;每个支链包含一个转动关节和一个移动关节&#xff0c;具有结构紧凑、占地面积小、高速高灵活性等特点&#xff0c;可在有限的空间内进行高效的作业&#xff0c;广泛应用于柔性上下料、包装、分拣、装配等需要…

【C++】类和对象(二):this指针

大家好&#xff0c;我是苏貝&#xff0c;本篇博客带大家了解C的this指针&#xff0c;如果你觉得我写的还不错的话&#xff0c;可以给我一个赞&#x1f44d;吗&#xff0c;感谢❤️ 目录 1 this指针的引出2 this指针的特性 1 this指针的引出 我们先来定义一个日期类Date 问&am…