关于制作一个Python小游戏(三)

news2024/10/24 10:19:01

目录

前言:

在前面我们已经了解过了关于制作pygame的使用和在里面游戏中的简单操作的内容了,今天我们主要讲的就是关于敌机的出现和如何去操控游戏中英雄飞机和敌机的出现

1.敌机的设计:

1.1敌机出场的实现:

1.1.1游戏启动后,每个一秒钟出现一架敌方飞机

1.1.2每架敌机向屏幕下方飞行,飞行速度随机

1.1.3每架敌机出现的水平位置不同(0, 480-敌机宽度)

1.1.4当敌机从屏幕下方飞出,不再飞回屏幕

1.2.定时器:

1..2.1而我们常用pygame.time.set_timer()来定义定时器

1.2.2用set_timer去创建一个事件,在游戏循环中监听这个事件,然后做出响应(每隔一秒钟,创建敌机)

1.2.3 定时器事件的监听:

2.英雄飞机的设计

2.1英雄飞机的出场:

2.1.1外观与动画: 

2.1.2 初始位置:

2.1.3控制方式:

 2.1.4移动边界:

2.1.5 射击与武器系统

2.1.6 碰撞检测:

 2.1.7生命值与死亡判定

结语:今天我先告诉大家关于如何设计敌机,和英雄飞机的前期工作,到后面几篇开始我们就会今日到关于实际代码的操作和运行,以上的内容都是来自于个人学习的成果,也欢迎大家给我提一点建议,或者给我的文章哪里还有问题,也欢迎大家斧正


前言:

在前面我们已经了解过了关于制作pygame的使用和在里面游戏中的简单操作的内容了,今天我们主要讲的就是关于敌机的出现和如何去操控游戏中英雄飞机和敌机的出现

1.敌机的设计:

1.1敌机出场的实现:

首先我们先明确一下需求,这是我们想要敌机达到的效果

1.1.1游戏启动后,每个一秒钟出现一架敌方飞机

1.1.2每架敌机向屏幕下方飞行,飞行速度随机

1.1.3每架敌机出现的水平位置不同(0, 480-敌机宽度)

1.1.4当敌机从屏幕下方飞出,不再飞回屏幕

1.2.定时器:

每隔一段时间,去执行一些代码

1..2.1而我们常用pygame.time.set_timer()来定义定时器

# 设置定时器,每隔1秒触发ID为USEREVENT + 1的事件  
pygame.time.set_timer(USEREVENT + 1, 1) 

1.2.2用set_timer去创建一个事件,在游戏循环中监听这个事件,然后做出响应(每隔一秒钟,创建敌机)

# 设置定时器事件,每隔1000毫秒(1秒)触发一次 
ENEMY_CREATE_EVENT = pygame.USEREVENT + 1  
pygame.time.set_timer(ENEMY_CREATE_EVENT, 1000)  

1.2.3 定时器事件的监听:

pygame中,定时器事件是通过pygame.event.get()函数来监听的,就像监听其他任何事件一样。当定时器到达设定的时间间隔时,它会将一个自定义事件(在这个例子中是ENEMY_CREATE_EVENT)添加到事件队列中。然后,你可以在游戏的主循环中遍历这个事件队列,检查是否有定时器事件被触发,并相应地执行代码 

# 游戏主循环  
running = True  
while running:  
    # 处理事件队列  
    for event in pygame.event.get():  
        if event.type == pygame.QUIT:  
            running = False  
        # 检查定时器事件  
        elif event.type == ENEMY_CREATE_EVENT:  
            # 创建敌机并添加到列表中  
            enemies.append(Enemy())  

这里先讲到敌机的设计,接下来就关于英雄飞机,玩家的飞机了

2.英雄飞机的设计

2.1英雄飞机的出场:

先设计好对英雄飞机的操作要求:

2.1.1外观与动画:  

  • 设计一个独特且符合游戏风格的飞机模型。

 

# 设置颜色  
WHITE = (255, 255, 255)  
RED = (255, 0, 0)  
GREEN = (0, 255, 0)  
BLUE = (0, 0, 255)  

2.1.2 初始位置

  • 确定英雄飞机在游戏屏幕上的初始出现位置,通常是屏幕底部中央或稍偏左/右。
  • 设置飞机的初始速度、方向和生命值。

 

  def __init__(self):  # 通过调用函数来实现
        print('游戏初始化')
        # 1要创建游戏窗口
        self.screen = pygame.display.set_mode((480, 700)

2.1.3控制方式

  • 使用键盘方向键或←→↑↓键来控制飞机的上下左右移动。
  • 可以添加特殊按键来控制特殊技能或武器的发射(如鼠标右键发射子弹)。
 # 事件监听
    def __event_handler(self):
        # 获取按键
        keypressed = pygame.key.get_pressed()
        if keypressed[pygame.K_RIGHT]:  # 右键
            self.hero.speed = 2  # 将飞机的速度改为2
        elif keypressed[pygame.K_LEFT]:  # 左键
            self.hero.speed = -2
        elif keypressed[pygame.K_UP]:  # 上键
            self.hero.upanddown = -2
        elif keypressed[pygame.K_DOWN]:  # 下键
            self.hero.upanddown = 2

 

 2.1.4移动边界

  • 设置游戏屏幕的边界,确保飞机不会移动到屏幕之外。
  • 当飞机触及屏幕边缘时,应平滑地停止移动或反弹。

 

  def update(self):
        self.rect.x+=self.speed
        self.rect.y+=self.upanddown
        #控制飞机不能离开屏幕
        if self.rect.x<0:
            self.rect.x=0
        elif self.rect.x>480-self.rect.width:
            self.rect.x=480-self.rect.width

        if self.rect.y<0:
            self.rect.y=0
        elif self.rect.y>700-self.rect.height:
            self.rect.y=700-self.rect.height

 

2.1.5 射击与武器系统

  • 设计飞机的射击方式,如连续射击、蓄力射击或特殊技能射击。
  • 确定子弹的速度、伤害值和射击频率。
  • 可以为飞机添加多种武器或升级系统,以增强其攻击力。。
#子弹类
class Bullet(GameSprites):
    #调用父类方法,设置图片和初始速度
    def __init__(self):
        super().__init__('images/bullet1.png',-2)

    def update(self):
        #调用父类方法,让子弹沿垂直方向飞行
        super().update()
        #飞出屏幕就死掉
        if self.rect.y<0-self.rect.height:
            self.kill()#KILL仅仅是把他从精灵组中删除
    def __del__(self):#直接消除对象,还是内置函数
        print('子弹被销毁')

 

2.1.6 碰撞检测

  • 实现飞机与敌机或障碍物之间的碰撞检测逻辑。
  • 当发生碰撞时,根据碰撞对象的类型(敌机、障碍物等)执行相应的动作(如减少生命值、触发爆炸效果等)。

 

  # 碰撞检测
    def __check_collide(self):
        # 子弹与敌机碰撞
        ret1 = pygame.sprite.groupcollide(self.hero.bullet_group,
                                          self.enemy_group, True, True)
        if ret1:
            print(ret1)
        # 敌机和英雄碰撞
        ret2 = pygame.sprite.groupcollide(self.enemy_group,
                                          self.hero_group, True, True)
        if len(ret2):
            pygame.quit()

 2.1.7生命值与死亡判定

  • 设置飞机的初始生命值以及受到伤害时生命值的减少方式。
  • 当生命值耗尽时,触发飞机的死亡动画并结束游戏或重新开始

结语:今天我先告诉大家关于如何设计敌机,和英雄飞机的前期工作,到后面几篇开始我们就会今日到关于实际代码的操作和运行,以上的内容都是来自于个人学习的成果,也欢迎大家给我提一点建议,或者给我的文章哪里还有问题,也欢迎大家斧正

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

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

相关文章

ETL与抖音数据同步,让数据流动无阻

在当今数字化时代&#xff0c;数据的价值日益凸显&#xff0c;企业需要从各种渠道获取有关用户行为、市场趋势和竞争对手活动的数据。作为一家专注于数据集成和转换的领先平台&#xff0c;ETLCloud为企业提供了强大的数据同步和转换功能。而与此同时&#xff0c;抖音作为一款热…

vcomp140.dll丢失如何修复,5种修复方法轻松搞定vcomp140.dll问题

vcomp140.dll文件的丢失可能会引发一系列系统运行与软件功能上的问题。具体来说&#xff0c;这个动态链接库文件是Visual C Redistributable的一部分&#xff0c;对于许多基于此环境开发的应用程序至关重要。一旦缺失&#xff0c;可能会导致部分应用程序无法正常启动或运行&…

深入浅出(二)MVVM

MVVM 1. 简介2. 示例 1. 简介 2. 示例 示例下载地址&#xff1a;https://download.csdn.net/download/qq_43572400/88925141 创建C# WPF应用(.NET Framework)工程&#xff0c;WpfApp1 添加程序集 GalaSoft.MvvmLight 创建ViewModel文件夹&#xff0c;并创建MainWindowV…

SAP Parallel Accounting(平行分类账业务)配置及操作手册(超详细的说明和测试)

SAP Parallel Accounting(平行分类账业务)配置及操作手册 1、Overview 为了适应不同的会计准则&#xff0c;SAP在新总账中启用了多分类账&#xff0c;&#xff08;其作用简单来说就是&#xff0c;同时一笔记账&#xff0c;会产生多个账套的凭证。&#xff09;分类账可以对应一…

一文掌握:电力管理系统该的功能和界面设计

一、什么电力管理系统 电力管理系统是一个用于监控、控制和优化电力系统运行的软件系统。它集成了实时数据采集、数据分析、决策支持和远程控制等功能&#xff0c;旨在提高电力系统的运行效率、可靠性和安全性。 电力管理系统是一个集成了数据采集、监控、分析和控制等功能的软…

应用层协议--HTTP

目录 一.HTTP是什么&#xff1f; 二.HTTP的请求和响应 a.请求&#xff1a; b.响应&#xff1a; 三.URL 四.Header 1.Host 2. Content-Length 3. Content-Type a. 请求 b. 响应 4. Referer 5. User-Agent 6. Cookie 一.HTTP是什么&#xff1f; HTTP是一种应用层协议&#xff0c…

Java并发编程-实现多线程的四种方式

创建线程的四种方式 创建线程的四种方式包括使用继承 Thread 类、实现 Runnable 接口、使用 Callable 和 Future 接口以及利用线程池。每种方式都有其特定的优势和适用场景。通过继承 Thread 类或实现 Runnable 接口&#xff0c;可以定义线程要执行的任务&#xff0c;并通过调用…

图形系统开发实战课程:进阶篇(上)——10.应用实例:交通路网

图形开发学院&#xff5c;GraphAnyWhere 课程名称&#xff1a;图形系统开发实战课程&#xff1a;进阶篇(上)课程章节&#xff1a;“图形样式”原文地址&#xff1a;https://www.graphanywhere.com/graph/advanced/2-10.html 第十章 应用实例&#xff1a;交通路网 \quad 在前面几…

Spring学习 基础(一)

Spring基础 IoC容器&#xff08;Inversion of Control&#xff09;: Spring 的核心是其控制反转&#xff08;IoC&#xff09;容器&#xff0c;它负责管理对象的生命周期和相互之间的依赖关系。通过依赖注入&#xff08;Dependency Injection&#xff09;&#xff0c;Spring能够…

python 基础知识点(蓝桥杯python科目个人复习计划59)

今日复习内容&#xff1a;做题 例题1&#xff1a;建造房屋 问题描述&#xff1a; 小蓝和小桥是两位年轻的建筑师&#xff0c;他们正在设计一座新的城市。 在这个城市中&#xff0c;有N条街道&#xff0c;每条街道上有M个位置可以建造房屋&#xff08;一个位置只能建造一个房…

【java】后序遍历二叉树

采用递归方式实现 节点类 public class Node {private int value;//父节点private Node fNode;//左节点private Node left;//右节点private Node right;//是否已经打印过private boolean sign false;public Node() {}public boolean isSign() {return sign;}public void setS…

融资项目——OpenFeign的降级与熔断

当一个微服务调用其他微服务时&#xff0c;如果被调用的微服务因各种原因无法在规定时间内提供服务&#xff0c;则可以直接使用本地的服务作为备选&#xff0c;即进行降级熔断。 如之前所提到的微服务为例&#xff1a; 如果希望实现降级熔断&#xff0c;可以在本地创建一个实现…

【Spring云原生系列】Spring Cloud Stream:消息驱动架构(MDA)解析,实现异步处理与解耦合!

&#x1f389;&#x1f389;欢迎光临&#xff0c;终于等到你啦&#x1f389;&#x1f389; &#x1f3c5;我是苏泽&#xff0c;一位对技术充满热情的探索者和分享者。&#x1f680;&#x1f680; &#x1f31f;持续更新的专栏《Spring 狂野之旅&#xff1a;从入门到入魔》 &a…

HYBBS 表白墙网站PHP程序源码

安装教程 上传程序安装&#xff0c;然后设置账号密码&#xff0c;登陆后台切换模板手机PC都要换开启插件访问前台。 安装完成后如果不能正常访问就删除install安装文件夹 安装完成后右上角登录后点击头图进入后台 找到插件 安装表白墙配置插件 找到模板 将表白墙模板同时设…

18个惊艳的可视化大屏(第19辑):工业制造、智能工厂

实时监控和数据展示 可视化大屏可以集成和展示各种传感器、设备和系统的实时数据。通过将数据可视化展示在大屏上&#xff0c;工厂管理人员可以实时监控生产线的状态、设备的运行情况、生产效率等重要指标。这有助于及时发现问题、做出决策&#xff0c;并提高生产效率和质量。…

多模态入门

VIT处理图像 CNN VS Transformer 多模态BLIP模型 网络结构 视觉编码器: 就是 ViT 的架构。将输入图像分割成一个个的 Patch 并将它们编码为一系列 Image Embedding,并使用额外的 [CLS] token 来表示全局的图像特征。视觉编码器不采用之前的基于目标检测器的形式,因为 ViLT 和…

【Linux】权限管理(文件的访问者、类型和访问权限,chmod、chown、chgrp、umask,粘滞位)

目录 00.前言 01.文件访问者的分类 02.文件类型和访问权限 文件类型&#xff1a; 文件基本权限&#xff1a; 03.文件权限值的表示方法 04.访问权限的设置 &#xff08;1&#xff09;chmod &#xff08;2&#xff09;chown &#xff08;3&#xff09;chgrp &#xff0…

Redis安全加固策略:绑定Redis监听的IP地址 修改默认端口 禁用或者重命名高危命令

Redis安全加固策略&#xff1a;绑定Redis监听的IP地址 & 修改默认端口 & 禁用或者重命名高危命令 1.1 绑定Redis监听的IP地址1.2 修改默认端口1.3 禁用或者重命名高危命令1.4 附&#xff1a;redis配置文件详解&#xff08;来源于网络&#xff09; &#x1f496;The Beg…

启动Docker镜像时候,ENTRYPOINT 和CMD这两者指令的写法有什么不同和区别?

ENTRYPOINT和CMD在Dockerfile中都用于指定容器启动时执行的命令&#xff0c;但它们之间存在一些关键的区别和不同的用途&#xff1a; 1. 基本用途和行为差异 ENTRYPOINT 定义了容器启动时执行的基础命令&#xff0c;使得容器像一个可执行程序。ENTRYPOINT让你能够指定容器启动…

Pycharm+Selenium WebdriverPython自动化测试

&#x1f525; 交流讨论&#xff1a;欢迎加入我们一起学习&#xff01; &#x1f525; 资源分享&#xff1a;耗时200小时精选的「软件测试」资料包 &#x1f525; 教程推荐&#xff1a;火遍全网的《软件测试》教程 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1…