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)


目录
相关文章
|
4天前
|
Python
课程设计项目之基于Python实现围棋游戏代码
游戏进去默认为九路玩法,当然也可以选择十三路或是十九路玩法 使用pycharam打开项目,pip安装模块并引用,然后运行即可, 代码每行都有详细的注释,可以做课程设计或者毕业设计项目参考
49 33
|
3月前
|
IDE 开发工具 Python
Python扑克游戏编程---摸大点
Python扑克游戏编程---摸大点
66 1
|
4月前
|
Python
python编写下象棋游戏|4-14
python编写下象棋游戏|4-14
|
4月前
|
人工智能 算法 图形学
总有一个是你想要的分享40个Python游戏源代码
这是一系列基于Python开发的游戏项目集合,包括中国象棋、麻将、足球、坦克大战、扑克等多种类型游戏,运用了Pygame等库实现图形界面与AI算法。此外还包含迷宫、数独、推箱子等益智游戏及经典游戏如《仙剑奇侠传二战棋版》和《星露谷物语》的Python版本,适合编程学习与娱乐。
226 11
|
3月前
|
数据采集 前端开发 Python
Python pygame 实现游戏 彩色 五子棋 详细注释 附源码 单机版
Python pygame 实现游戏 彩色 五子棋 详细注释 附源码 单机版
98 0
|
4月前
|
消息中间件 数据采集 数据库
庆祝吧!Python IPC让进程间的合作,比团队游戏还默契
【9月更文挑战第7天】在这个数字化时代,软件系统日益复杂,单进程已难以高效处理海量数据。Python IPC(进程间通信)技术应运而生,使多进程协作如同训练有素的电竞战队般默契。通过`multiprocessing`模块中的Pipe等功能,进程间可以直接传递数据,无需依赖低效的文件共享或数据库读写。此外,Python IPC还提供了消息队列、共享内存和套接字等多种机制,适用于不同场景,使进程间的合作更加高效、精准。这一技术革新让开发者能轻松应对复杂挑战,构建更健壮的软件系统。
47 1
|
6月前
|
机器学习/深度学习 人工智能 开发者
Python适合做游戏吗?
【7月更文挑战第2天】Python适合做游戏吗?
122 56
|
5月前
|
机器学习/深度学习 存储 定位技术
强化学习Agent系列(一)——PyGame游戏编程,Python 贪吃蛇制作实战教学
本文是关于使用Pygame库开发Python贪吃蛇游戏的实战教学,介绍了Pygame的基本使用、窗口初始化、事件处理、键盘控制移动、以及实现游戏逻辑和对象交互的方法。
|
5月前
|
机器学习/深度学习 人工智能 自然语言处理
【机器学习】python之人工智能应用篇--游戏生成技术
游戏生成技术,特别是生成式人工智能(Generative Artificial Intelligence, 简称Generative AI),正逐步革新游戏开发的多个层面,从内容创作到体验设计。这些技术主要利用机器学习、深度学习以及程序化内容生成(Procedural Content Generation, PCG)来自动创造游戏内的各种元素,显著提高了开发效率、丰富了游戏内容并增强了玩家体验。以下是生成式AI在游戏开发中的几个关键应用场景概述
100 2
|
5月前
|
Python
【python】Python成语接龙游戏[1-3难度均有](源码+数据)【独一无二】
【python】Python成语接龙游戏[1-3难度均有](源码+数据)【独一无二】