飞机大战基础参考:

pygame学习笔记——飞机大战练习案例_小橙子的博客-CSDN博客


爆炸效果思路:

当子弹和敌机碰撞时,爆炸效果图片移到子弹的坐标,展示爆炸效果。

展示爆炸效果需要用到多线程,防止对主线程进行干扰。

多线程参考:

python学习笔记——多线程_小橙子的博客-CSDN博客


注:以下爆炸效果使用两张图片代替

#7.创建爆炸效果
class BaoZha(pygame.sprite.Sprite):def __init__(self,xy):pygame.sprite.Sprite.__init__(self)  # 调用父类的初始化方法#爆炸效果可能是多张图片,使用列表保存self.image = [pygame.Surface((30, 50)),pygame.Surface((50, 30))]self.image[0].fill('blue')self.image[1].fill('pink')#使用列表中第一个图片的位置self.rect = self.image[0].get_rect()# 设置初始位置self.rect.center = xydef update(self):for i in range(10):#使用余数切换不同的图片screen_surface.blit(self.image[i%2], self.rect.center)pygame.display.flip()#切换完图片,更新屏幕time.sleep(0.1)self.kill()  # 终止,相当于删除特效
        #print(a[0].rect.center)#获得碰撞子弹的坐标bz = BaoZha(a[0].rect.center)#创建一个爆炸效果对象#因为update中有for循环且有等待效果,防止干扰主线程_thread.start_new_thread(bz.update,tuple())#创建一个线程

完成的测试代码:

import pygame, sys
import random,time
import _thread# 1.pygame库的初始化
pygame.init()
# 2.设置窗口
screen_surface = pygame.display.set_mode((480, 600))# 4.创建一个飞机
class Plane(pygame.sprite.Sprite):def __init__(self):pygame.sprite.Sprite.__init__(self)  # 调用父类的初始化方法# super().__init__(self)#此方式调用不管事,原因未知self.image = pygame.Surface((50, 50))self.image.fill('green')self.rect = self.image.get_rect()# 设置初始位置self.rect.center = (screen_surface.get_width() / 2, screen_surface.get_height() - 20)def update(self):# 获取键盘事件,如果按下,返回Truekeys = pygame.key.get_pressed()  # 类似字典,通过key获取valueif keys[pygame.K_LEFT] and self.rect.left > 0:self.rect = self.rect.move(-10, 0)if keys[pygame.K_RIGHT] and self.rect.right < screen_surface.get_width():self.rect = self.rect.move(10, 0)if keys[pygame.K_UP] and self.rect.top > 0:self.rect = self.rect.move(0, -10)if keys[pygame.K_DOWN] and self.rect.bottom < screen_surface.get_height():self.rect = self.rect.move(0, 10)screen_surface.blit(self.image, self.rect)  # 屏幕上 放 飞机,位置是rect的位置# 5.创建一个子弹类Bullet
class Bullet(pygame.sprite.Sprite):def __init__(self, center):  # center是初始位置,传入坦克的中心pygame.sprite.Sprite.__init__(self)  # 调用父类的初始化方法self.image = pygame.Surface((10, 30))self.image.fill('yellow')self.rect = self.image.get_rect()# 设置初始位置 初始位置要在飞机处——>外部传进self.rect.center = centerdef update(self):# 获取键盘事件,如果按下,返回Trueself.rect = self.rect.move(0, -20)screen_surface.blit(self.image, self.rect)if self.rect.top < 0:  # 判断是否出屏幕self.kill()  # 终止,相当于删除子弹# 6.创建敌机
class Enemy_plane(pygame.sprite.Sprite):def __init__(self):pygame.sprite.Sprite.__init__(self)  # 调用父类的初始化方法# super().__init__(self)#此方式调用不管事,原因未知self.image = pygame.Surface((50, 50))self.image.fill('red')self.rect = self.image.get_rect()# 设置初始位置x = random.randint(0, screen_surface.get_width())y = 0self.rect.center = (x, y)def update(self):self.rect = self.rect.move((0, 10))if self.rect.y > screen_surface.get_height():x = random.randint(0, screen_surface.get_width())y = 0self.rect.center = (x, y)screen_surface.blit(self.image, self.rect)  # 屏幕上 放 飞机,位置是rect的位置#7.创建爆炸效果
class BaoZha(pygame.sprite.Sprite):def __init__(self,xy):pygame.sprite.Sprite.__init__(self)  # 调用父类的初始化方法#爆炸效果可能是多张图片,使用列表保存self.image = [pygame.Surface((30, 50)),pygame.Surface((50, 30))]self.image[0].fill('blue')self.image[1].fill('pink')#使用列表中第一个图片的位置self.rect = self.image[0].get_rect()# 设置初始位置self.rect.center = xydef update(self):for i in range(10):#使用余数切换不同的图片screen_surface.blit(self.image[i%2], self.rect.center)pygame.display.flip()#切换完图片,更新屏幕time.sleep(0.1)self.kill()  # 终止,相当于删除特效# 创建一架飞机
plane_surface = Plane()
# 创建一个 子弹 精灵组(用于存放所有的精灵对象)
bullet_sprite = pygame.sprite.Group()
# 创建敌机
enemy_plane_surface = Enemy_plane()score = 0  # 存储得分clock = pygame.time.Clock()
# 3.游戏的主循环(事件的监听,数据的修改及绘图,界面的更新)
while True:# 3.1 事件的监听,关闭按钮无法使用。for event in pygame.event.get():if event.type == pygame.QUIT:sys.exit()elif event.type == pygame.KEYDOWN:if event.key == pygame.K_SPACE:# 按下一个空格,创建一个子弹对象bullet_surface = Bullet(plane_surface.rect.center)bullet_sprite.add(bullet_surface)# 3.2 数据的修改及绘图screen_surface.fill((0, 0, 0))  # 重新绘制背景# 3.2 飞机修改数据 更新画面plane_surface.update()  # 修改数据+更新画面# 3.2 子弹更新数据 更新画面bullet_sprite.update()  # 修改数据+更新画面# 3.2 敌机更新数据 更新画面enemy_plane_surface.update()a = pygame.sprite.spritecollide(enemy_plane_surface, bullet_sprite, True)if a:#print(a[0].rect.center)#获得碰撞子弹的坐标bz = BaoZha(a[0].rect.center)#创建一个爆炸效果对象#因为update中有for循环且有等待效果,防止干扰主线程_thread.start_new_thread(bz.update,tuple())#创建一个线程score += 10x = random.randint(0, screen_surface.get_width())y = 0enemy_plane_surface.rect.center = (x, y)b = pygame.sprite.collide_rect(enemy_plane_surface, plane_surface)  # 返回布尔值if b:break# 实现记录分数font_name = pygame.font.match_font("黑体")  # 2.获得字体文件font = pygame.font.Font(font_name, 20)  # 1.获取font对象(需要字体文件)# 绘制内容:text为内容,True为是否抗锯齿, WHITE是字体颜色font_surface = font.render(str(score), True, 'white')  # 3.将文字生成 surface对象screen_surface.blit(font_surface, (screen_surface.get_width() / 2, 10))# 3.3 界面的更新pygame.display.flip()clock.tick(30)  # 一秒切换30图片,具体等多长事件,这个方法自己会计算

pygame学习笔记——飞机大战爆炸效果相关推荐

  1. python项目:飞机大战(爆炸效果,血条,音效,buff加成,boss,菜单,完整详细注释的源码)

    文章目录 一. 总体概览 基本功能 细节部分(全部可以自定义) 可增添需求 二,技术框架 核心技术概述 1.游戏的初始化和退出 2 理解游戏中的坐标系 3 创建游戏主窗口 4. 理解 **图像** 并 ...

  2. java飞机大战爆炸效果_Java飞机大战游戏设计与实现

    1 概述 1.1 项目简介 本次Java课程设计是做一个飞机大战的游戏,应用Swing编程,完成一个界面简洁流畅.游戏方式简单,玩起来易于上手的桌面游戏.该飞机大战项目运用的主要技术即是Swing编程 ...

  3. Python使用pygame模块实现飞机大战

    文章目录 ReadMe 1.开发环境 2.准备环境 2.1 创建工程文件夹和虚拟环境 2.2 安装pygame工具包 3.帮助文档 4.开发步骤 5.项目分析 5.1 对象关系图 5.2 飞机具有的属 ...

  4. 基于pygame实现的飞机大战游戏

    目录 1.引言 1.1 背景 1.2 意义 1.3 功能 2.系统结构 2.1 整体框架 2.2 精灵与精灵组 2.3 功能介绍 2.3.1 玩家飞机 2.3.2 敌机类型和关卡设定 2.3.3 敌机 ...

  5. Qt学习总结——飞机大战小游戏制作

    Qt学习总结--飞机大战小游戏制作 1. 需求分析 这篇文章写于2020年暑假,完成学校实训项目之后,对自己的项目实践做了一个总结,回顾整个项目的制作过程,同时也复习一下Qt的相关知识,总结项目制作过 ...

  6. Pygame学习笔记 6 —— 3D游戏

        pygame是是上世纪的产品,虽然不适合最3D游戏,但我可以使用pygame来绘制简单的3D图形,就像在白纸上画立体图形一样. 主要内容: 视觉上的远近.3D空间.绘制一个空间图形 一.视觉上 ...

  7. Python第三方库pygame学习笔记(一)

    Pygame Python最经典的2D游戏开发第三方库,也支持3D游戏开发 Pygame适合用于游戏逻辑验证.游戏入门及系统演示验证 Pygame是一种游戏开发引擎,基本逻辑具有参考价值 pygame ...

  8. python入门笔记——飞机大战(极简版、未进行继承优化)

    python入门笔记--飞机大战(极简版.未进行继承优化) import random import pygame# 引用pygame里的模块 from pygame.locals import *# ...

  9. 【Python游戏】pygame模块制作飞机大战、贪吃蛇(多模式)含源码

    pygame模块制作飞机大战.贪吃蛇(多版本) 本章意在学习pygame模块以及巩固python语法. 若有需请转去个人github:https://github.com/onlyhyl/pyGame

  10. pygame之《飞机大战》(一)

    前言: 学习完Python后,为巩固与练习,因而编写了<飞机大战>小游戏.(共六个章节) GitHub:https://github.com/GYT0313/FeiJiDaZhan 最终成 ...

最新文章

  1. Android之利用JSBridge库实现Html,JavaScript与Android的所有交互
  2. python 包中当前目录对应的一个点号
  3. 【C++深度剖析教程29】C++对象模型分析下
  4. 会计云课堂实名认证后怎么更改_会计云课堂怎么听课 网上听课步骤详解
  5. 简述linux虚拟内存的概念,Linux进程虚拟内存中的相关概念
  6. Golang面向并发的内存模型
  7. 追风猎洞只能喝西北风吗?
  8. 【论文写作】网上办公自动系统中功能需求如何写
  9. 蛮力法 —— 求解最大连续子序列和问题
  10. 计算机视觉论文-2021-09-07
  11. matlab 角度转四元数_学习笔记—四元数与欧拉角之间的转换
  12. 类似endnote_除了EndNote,竟还有如此强大的文献管理软件!重点是正版免费!
  13. 洛谷P1005 [NOIP2007 提高组] 矩阵取数游戏
  14. JavaScript 压缩图片
  15. 微信将可开小号!微信内测一个手机可注册俩号
  16. 高大上~的裸眼3D原理与制作方法
  17. win10 高分屏显示模糊的解决办法
  18. 复现有道NLPCC-2018 CGEC:A Neural Machine Translation Approach to Chinese Grammatical Error Correction
  19. c语言printf函数中的格式控制字符串,C++_C语言格式化输入输出函数详解,一:格式输出函数printf() 1 - phpStudy...
  20. 小鼠心肌细胞培养方法

热门文章

  1. 交换机组播风暴_「广播风暴」CISCO交换机如何防止广播风暴 - seo实验室
  2. 元数据管理实践数据血缘
  3. 数据结构——递归算法、递推算法、穷举算法、分治算法
  4. 星星之火OIer:编程社四连测总结
  5. python爬虫实训总结报告_python爬虫简单总结(一)
  6. Spring—事务配置及mybatis整合
  7. 豫教科计算机资源管理教案,豫科版小学五年级上册信息技术教案(全册.doc
  8. 实名认证-身份证实名认证-身份证实名认证接口-身份证实名认证api-实名认证api接口-身份证实名认证api接口
  9. Java单元测试之JUnit 5快速上手
  10. 操作系统实验六、死锁问题实验——单车道问题