Python:飞机大战游戏5:敌人飞机

简介: Python:飞机大战游戏5:敌人飞机

一、内容



  • 1.1、使用 定时器 添加敌机
  • 1.2、设计 enemy


二、使用 定时器 添加敌机



  • 2.1、我们所需要达到的效果
  • (1)、游戏启动后,每隔1秒出现一架敌机
  • (2)、每架敌机 向屏幕下方飞行,飞行的 速度各不相同
  • (3)、每架敌机在 水平出现的位置 也不相同
  • (4)、当敌机从屏幕下方飞出去就消失了,也就是不会再回到屏幕中
  • 2.2、定时器
  • pygame 中可以用 pygame.time.set_timer() 来添加定时器
  • 所谓 定时器,就是 每隔一段时间,去 执行一些操作


set_timer(eventid,milliseconds) -> None
  • set_timer 可以创建一个 事件
  • 可以在 游戏循环事件监听 方法中捕获到该事件
  • 第 1 个参数 事件代号 需要基于常量 pygame.USEREVENT 来指定(USEREVENT是一个整数,再增加事件可以使用USEREVENT + 1 指定,依次类推)
  • 第 2 个参数是 事件触发 间隔的 毫秒值
  • 定时器事件的监听
  • 通过 pygame.event.get() 可以获取当前时刻所有的 事件列表
  • 遍历列表 并且判断 event.type 是否等于 eventid,如果相等,表示 定时器事件 发生,eventid就是我们创建的事件
  • 2.3、定义并监听创建敌机事件pygame定时器 使用套路非常固定:3 步(1)、定义 定时器常量 -- eventid(2)、在 初始化方法 中,调用 set_timer 方法 设置定时器事件(3)、在 游戏循环 中,监听定时器事件
  • 定义事件(对应上面的 三步)
  • 在精灵的模块 plane_sprites.py 的顶部定义 事件常量


CREATE_ENEMY_EVENT = pygame.USEREVENT
  • 在初始化方法里面 设置定时器事件,创建敌机敌机


pygame.time.set_timer(CREATE_ENEMY_EVENT,1000)
  • 在游戏循环里面监听定时器事件


for event in pygame.event.get():
      if  event.type == CREATE_ENEMY_EVENT:
             print("敌机出场")


三、设计 enemy 类(敌机类)



  • 3.1、由上面 2.1我们所需要达到的效果,我们需要定义一个敌机类 enemy,继承于GameSprites游戏精灵
  • 初始化方法:指定敌机的图片,随机敌机的 初始位置初始速度
  • 重写 update() 方法: 判断 是否飞出屏幕,如果是,从 精灵组 删除
  • 3.2、敌机类的准备


class Enemy(GameSprites):
       """敌机精灵"""
       def __init__(self):
           # 1、调用父类方法,创建敌机精灵,同时指定敌机图片
           super().__init__("./images/enemy1.png")
           # 2、指定敌机的初始随机速度
           # 3、指定敌机的初始随机位置
      def update(self):
           # 1、调用父类的方法,保持垂直方向的飞行
           super().update()
           # 2、判断是否飞出屏幕,如果是,需要从精灵组删除敌机
           if self.rect.y >= SCREEN_RECT.height:
                 print("飞出屏幕,需要从精灵组删除")
  • 3.3、创建敌机
  • __cerate_sprites,添加 敌机精灵组(敌机是在定时创建的,因此在初始化方法中,不需要创建敌机),创建一个空的的敌机精灵组即可


# 创建敌机的精灵组
self.enemy_group = pygame.sprite.Group()
  • __event_handler 事件监听中的定时器里面添加敌机,并添加到精灵组


# 创建敌机精灵
enemy = Enemy()
# 把敌机精灵添加到敌机精灵组
self.enemy_group.add(enemy)
  • __update_sprites方法里面,让敌机精灵组调用 updatedraw 方法,在窗口显示敌机


# update - 让组中的所有精灵更新位置
self.enemy_group.update()
# draw - 在screen上绘制所有的精灵
self.enemy_group.draw(self.screen)


  • 3.4、随机敌机位置和速度
  • 要想使用随机我们需要导入随机数的模块 random,下面是导入模块的建议,下面的是建议顺序
  • 1、官方标准模块 ,如:import random
  • 2、第三方模块导入,如:import pygame
  • 3、应用程序模块,如在程序中自己写的模块



image.png


  • 敌机x值的随机(由上图可知,敌机x的值在:0~屏幕宽-敌机宽)


max = SCREEN_RECT.width-self.rect.width
self.rect.x = random.randint(0,max)
  • 敌机y值的随机(由上图可知,敌机y的值在:敌机的底部在屏幕的上方比较合适)


self.rect.bottom = 0
  • 敌机初始速度的随机,假设在0~3之间


self.speed = random.randint(1,3)
  • 3.4、移除屏幕销毁敌机
  • 敌机移除屏幕后,如果还没有撞到英雄,敌机的历史使命已经终结,需要从敌机精灵组里面删除,否则会造成 内存浪费
  • 检测敌机被销毁
  • __def__ 内置方法会在对象被销毁前调用,在开发中,可以用于 判断对象是否被销毁


def ___del(self):
       print("敌机挂了,位置=%s"%self.rect)
  • 判断敌机是否飞出屏幕,如果是,调用 kill() 方法从精灵组中删除


def update(self):
    # 1、调用父类的方法,保持垂直方向的飞行
    super().update()
    # 2、判断是否飞出屏幕,如果是,需要从精灵组删除敌机
    if self.rect.y >= SCREEN_RECT.height:
        print("飞出屏幕,需要从精灵组删除")
        # kill方法可以将精灵从所有精灵组中移除,精灵就会被自动销毁
        self.kill()
def __del__(self):
        print("敌机挂了,位置=%s" % self.rect)


目录
相关文章
|
存储 人工智能 运维
【01】做一个精美的打飞机小游戏,浅尝阿里云通义灵码python小游戏开发AI编程-之飞机大战小游戏上手实践-优雅草央千澈-用ai开发小游戏尝试-分享源代码和游戏包
【01】做一个精美的打飞机小游戏,浅尝阿里云通义灵码python小游戏开发AI编程-之飞机大战小游戏上手实践-优雅草央千澈-用ai开发小游戏尝试-分享源代码和游戏包
672 48
【01】做一个精美的打飞机小游戏,浅尝阿里云通义灵码python小游戏开发AI编程-之飞机大战小游戏上手实践-优雅草央千澈-用ai开发小游戏尝试-分享源代码和游戏包
|
5月前
|
小程序 PHP 图形学
热门小游戏源码(Python+PHP)下载-微信小程序游戏源码Unity发实战指南​
本文详解如何结合Python、PHP与Unity开发并部署小游戏至微信小程序。涵盖技术选型、Pygame实战、PHP后端对接、Unity转换适配及性能优化,提供从原型到发布的完整指南,助力开发者快速上手并发布游戏。
|
人工智能 Python
【02】做一个精美的打飞机小游戏,python开发小游戏-鹰击长空—优雅草央千澈-持续更新-分享源代码和游戏包供游玩-记录完整开发过程-用做好的素材来完善鹰击长空1.0.1版本
【02】做一个精美的打飞机小游戏,python开发小游戏-鹰击长空—优雅草央千澈-持续更新-分享源代码和游戏包供游玩-记录完整开发过程-用做好的素材来完善鹰击长空1.0.1版本
515 7
|
7月前
|
存储 算法 区块链
从零实现Python扫雷游戏:完整开发指南与深度解析
扫雷作为Windows经典游戏,承载了许多人的童年回忆。本文将详细介绍如何使用Python和Tkinter库从零开始构建一个功能完整的扫雷游戏,涵盖游戏设计、算法实现和界面开发的全过程。
575 1
|
8月前
|
人工智能 搜索推荐 数据可视化
用 Python 制作简单小游戏教程:手把手教你开发猜数字游戏
本教程详细讲解了用Python实现经典猜数字游戏的完整流程,涵盖从基础规则到高级功能的全方位开发。内容包括游戏逻辑设计、输入验证与错误处理、猜测次数统计、难度选择、彩色输出等核心功能,并提供完整代码示例。同时,介绍了开发环境搭建及调试方法,帮助初学者快速上手。最后还提出了图形界面、网络对战、成就系统等扩展方向,鼓励读者自主创新,打造个性化游戏版本。适合Python入门者实践与进阶学习。
1006 1
|
8月前
|
存储 算法 数据可视化
用Python开发猜数字游戏:从零开始的手把手教程
猜数字游戏是编程入门经典项目,涵盖变量、循环、条件判断等核心概念。玩家通过输入猜测电脑生成的随机数,程序给出提示直至猜中。项目从基础实现到功能扩展,逐步提升难度,适合各阶段Python学习者。
607 0
|
测试技术 Python
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
625 31
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
|
Python
课程设计项目之基于Python实现围棋游戏代码
游戏进去默认为九路玩法,当然也可以选择十三路或是十九路玩法 使用pycharam打开项目,pip安装模块并引用,然后运行即可, 代码每行都有详细的注释,可以做课程设计或者毕业设计项目参考
331 33
|
IDE 开发工具 Python
Python扑克游戏编程---摸大点
Python扑克游戏编程---摸大点
224 1

推荐镜像

更多