做了个飞机大战的基本实现,有背景音乐,击中敌机特效和音效,计分效果,暂停效果,血量显示效果,具体可以看下面的效果图。

1.主类

"""主文件"""
from tkinter import *
from MyGame.rungame import *
import pygamedef main():"""main函数"""pygame.init()bg_music = pygame.mixer.musicbg_music.load(r'media/interface.mp3')bg_music.set_volume(20)root = Tk()root.title('飞机大战')root.resizable(0, 0)canvas = Canvas(root, width=359, height=640, cursor='circle', relief=GROOVE)canvas.pack(side='left')# 加载相关图片bg_img = PhotoImage(file=r'image/interface.png')begin_button_img = PhotoImage(file='image/begin.png')help_button_img = PhotoImage(file='image/help.png')about_button_img = PhotoImage(file='image/about.png')canvas.create_image(180, 320, image=bg_img)# 开始按钮canvas.create_window(180, 422, window=Button(root, image=begin_button_img, relief=RIDGE, command=run))# 帮助按钮canvas.create_window(180, 482, window=Button(root, image=help_button_img, relief=RIDGE))# 关于按钮canvas.create_window(180, 542, window=Button(root, image=about_button_img, relief=RIDGE))if not bg_music.get_busy():bg_music.play()mainloop()if __name__ == '__main__':main()

2.游戏运行界面类

"""运行函数"""
from pygame.locals import *
from MyGame.plane import *
from MyGame.bullet import *
from MyGame.enemy import *
from MyGame.boss import *
import pygamedef run():"""主函数"""pygame.init()bg_size = 900, 515pygame.display.set_caption('My_game')screen = pygame.display.set_mode(bg_size)bg_image = pygame.image.load(r'image/background.png').convert_alpha()# 颜色预定义BLACK = (0, 0, 0)RED = (255, 0, 0)GREEN = (0, 255, 0)# 爆炸图片boom_image = pygame.image.load(r'image/boom.png').convert_alpha()# 调用背景音乐pygame.mixer.set_num_channels(5)bg_music = pygame.mixer.musicbg_music.load(r'media/bg_music.mp3')bg_music.set_volume(10)# 设置血量显示hp_image = pygame.image.load('image/hp.png')# 爆炸声音boom_music = pygame.mixer.Sound(r'media/boom.wav')boom_music.set_volume(0.2)# 添加我方主机plane = Plane()# 游戏帧率设置clock = pygame.time.Clock()# 分数图片score_image = []for i in range(10):path = 'image/' + str(i) + '.png'number_image = pygame.image.load(path)score_image.append(number_image)# 生成子弹bullet_list = []bullet_index = 0BULLET_NUM = 6for i in range(BULLET_NUM):bullet_list.append(Bullet(plane.rect.midtop))# 创建敌机enemies = pygame.sprite.Group()ENEMY_NUM = 10for i in range(ENEMY_NUM):enemies.add(Enemy(bg_size[0], bg_size[1]))# 创建boos敌机boss_enemies = pygame.sprite.Group()boss = Boss(bg_size[0], bg_size[1])boss_enemies.add(boss)enemies.add(boss)# 创建暂停按钮pause_image = pygame.image.load('image/pause.png').convert_alpha()# 播放b背景音乐if not bg_music.get_busy():bg_music.play(-1)# 延迟delay = 100# 设置位置score_position = 850# 设置暂停pause = False# 设置是否允许程序running = Truewhile running:for event in pygame.event.get():if event.type == QUIT:running = False# 设置按键检测key_pressed = pygame.key.get_pressed()# 判断是否发生暂停if key_pressed[K_SPACE]:pause = not pause# 绘制背景screen.blit(bg_image, (0, 0))# 如果未暂停if not pause:# 检测用户键盘操作if key_pressed[K_w] or key_pressed[K_UP]:plane.moveUp()if key_pressed[K_s] or key_pressed[K_DOWN]:plane.moveDown()if key_pressed[K_a] or key_pressed[K_LEFT]:plane.moveLeft()if key_pressed[K_d] or key_pressed[K_RIGHT]:plane.moveRight()position = plane.rect.midtopposition = (position[0] - 3, position[1])# 每过一定时间重置出界子弹if not (delay % 6):bullet_list[bullet_index].reset(position)bullet_index = (bullet_index + 1) % BULLET_NUMfor each in enemies:if not each.active:each.reset()each.active = Trueif each in boss_enemies:each.health = 100# 对于子弹列表,若存活,便绘制for each in bullet_list:if each.active:collide_enemies = pygame.sprite.spritecollide(each, enemies, False, pygame.sprite.collide_mask)if collide_enemies:plane.score += 1boom_music.play()screen.blit(boom_image, each.rect)each.active = Falsefor enemy in collide_enemies:if enemy in boss_enemies:enemy.health -= 2if enemy.health == 0:enemy.active = Falseelse:enemy.active = Falseelse:each.move()# 检测我方飞机与敌方碰撞collide_plane = pygame.sprite.spritecollide(plane, enemies, False, pygame.sprite.collide_mask)if collide_plane:for each in collide_plane:if each not in boss_enemies:each.active = Falseplane.health -= 1# 若敌机存活,则移动for each in enemies:each.move()if delay:delay -= 1else:delay = 100# 绘制背景,血量,分数和暂停,飞机screen.blit(hp_image, (0, 0))plane_heath_percent = float(plane.health) / 100pygame.draw.line(screen, BLACK, (50, 16),(150, 16), 15)if plane_heath_percent > 0.5:pygame.draw.line(screen, GREEN, (50, 16),(plane_heath_percent * 100 + 50, 16), 15)else:pygame.draw.line(screen, RED, (50, 16),(plane_heath_percent * 100 + 50, 16), 15)screen.blit(pause_image, (870, 0))screen.blit(plane.image, plane.rect)# 绘制分数score = str(plane.score)score = score[::-1]for number in score:screen.blit(score_image[int(number)], (score_position, 0))score_position -= 20score_position = 850# 若敌机存在则绘制,for each in enemies:if each.active:screen.blit(each.image, each.rect)if each in boss_enemies:health_percent = each.health / 100pygame.draw.line(screen, BLACK, (each.rect.left, each.rect.top - 3),(each.rect.right, each.rect.top - 3), 2)if health_percent > 0.2:pygame.draw.line(screen, GREEN,(each.rect.left, each.rect.top - 3),(each.rect.left + health_percent * each.rect.width, each.rect.top - 3), 2)else:pygame.draw.line(screen, RED,(each.rect.left, each.rect.top - 3),(each.rect.left + health_percent * each.rect.width, each.rect.top - 3), 2)# 对于子弹列表,若存活,便绘制for each in bullet_list:if each.active:screen.blit(each.image, each.rect)clock.tick(60)pygame.display.flip()pygame.quit()

3.plane.py飞机类

import pygameclass Plane(pygame.sprite.Sprite):"""Plane"""def __init__(self):pygame.sprite.Sprite.__init__(self)self.image = pygame.image.load(r'image/plane.png').convert_alpha()self.rect = self.image.get_rect()self.rect.left, self.rect.top = 397, 432self.speed = 10self.score = 0self.health = 100self.mask = pygame.mask.from_surface(self.image)def moveUp(self):if self.rect.top > 0:self.rect.top -= self.speedelse:self.rect.top = 0def moveDown(self):if self.rect.bottom < 515:self.rect.top += self.speedelse:self.rect.bottom = 515def moveLeft(self):if self.rect.left > 0:self.rect.left -= self.speedelse:self.rect.left = 0def moveRight(self):if self.rect.right < 900:self.rect.right += self.speedelse:self.rect.right = 900

4.bullet.py子弹类

import pygameclass Bullet(pygame.sprite.Sprite):"""Bullet"""def __init__(self, position):pygame.sprite.Sprite.__init__(self)self.image = pygame.image.load(r'image/bullet.png').convert_alpha()self.rect = self.image.get_rect()self.rect.left, self.rect.top = positionself.speed = 15self.active = Trueself.mask = pygame.mask.from_surface(self.image)def move(self):self.rect.bottom -= self.speedif self.rect.bottom < 0:self.active = Falsedef reset(self, position):self.rect.left, self.rect.top = positionself.active = True

5.敌机类

"""enemy"""
import pygame
import randomclass Enemy(pygame.sprite.Sprite):"""enemy"""def __init__(self, width, height):pygame.sprite.Sprite.__init__(self)self.width = widthself.height = heightself.image = pygame.image.load(r'image/enemy_plane.png').convert_alpha()self.rect = self.image.get_rect()self.rect.left, self.rect.top = random.randint(0, self.width - self.rect.width), random.randint(-3 * self.height, -2 * self.height)self.speed = [0, random.randint(3, 5)]self.active = Trueself.mask = pygame.mask.from_surface(self.image)def move(self):"""move"""self.rect = self.rect.move(self.speed)if self.rect.top > self.height:self.active = Falsedef reset(self):"""reset"""self.rect.left, self.rect.top = random.randint(0, self.width - self.rect.width), random.randint(-3 * self.height, -2 * self.height)self.speed = [0, random.randint(3, 5)]

6.敌机boss类

"""boss"""
import pygame
import randomclass Boss(pygame.sprite.Sprite):"""boss"""def __init__(self, width, height):pygame.sprite.Sprite.__init__(self)self.width = widthself.height = heightself.image = pygame.image.load(r'image/tianxie.png').convert_alpha()self.rect = self.image.get_rect()self.rect.left, self.rect.top = random.randint(0, self.width - self.rect.width), random.randint(-6 * self.height, -4 * self.height)self.health = 100self.speed = [0, 1]self.active = Truedef move(self):"""move"""self.rect = self.rect.move(self.speed)if self.rect.top > self.height:self.active = Falsedef reset(self):"""reset"""self.rect.left, self.rect.top = random.randint(0, self.width - self.rect.width), random.randint(-6 * self.height, -4 * self.height)

7.效果图

点击开始游戏,进入游戏界面

本游戏的全部素材全部通过网上图片处理和下载得到,因为不是专业的,所以美化一般,如果有需要素材的可以联系我。

python3的飞机大战实现相关推荐

  1. python飞机大战没有运行界面_python3实现飞机大战

    本文实例为大家分享了python3实现飞机大战的具体代码,供大家参考,具体内容如下 以下是亲测Python飞机大战全部代码,在保证有pygame环境支持并且有Python3解释器的话完全没问题! 如果 ...

  2. python飞机大战游戏_Python3实现飞机大战游戏

    本文实例为大家分享了Python3实现飞机大战游戏的具体代码,供大家参考,具体内容如下 1.主程序:plane_main.py import pygame from plane_sprites imp ...

  3. Python3飞机大战全代码(亲测OJBK)

    以下是亲测Python飞机大战全部代码,在保证有pygame环境支持并且有Python3解释器的话完全没问题! 如果大家喜欢的话麻烦点个赞! 当然没有图片的可以给小编评论留下自己的qq号并且点个赞,晚 ...

  4. python3飞机大战源码及源码使用教程(让小白做出第一个小游戏)

    python3飞机大战 一.源代码使用教程及环境配置 1.环境配置 打开pycharm,进入file,打开settings 打开project interpreter,点击右上方 + 号 搜索pyga ...

  5. Python3+pygame实现有趣好玩的飞机大战游戏(附源码及素材)

    版权声明:原创不易,本文禁止抄袭.转载,侵权必究! 目录 一.开发环境 二.功能模块 三.游戏效果 四.完整项目下载 五.作者Info 一.开发环境 开发环境 :Windows10 Python3.6 ...

  6. Python3项目实战:飞机大战

    附:飞机大战的资源图片 链接:https://pan.baidu.com/s/19zJPdB55OMFIQYg7oJ-HDA   提取码:mep8 1.主程序:plane_main.py import ...

  7. Python实现飞机大战小游戏,详解每一行代码【不收藏都对不起我】

    一.模块 1. 利用 pip 安装 pygame 模块 Windows系统下的安装参考如下文章: https://blog.csdn.net/qq_38721302/article/details/8 ...

  8. Python 之 游戏飞机大战项目实现

    项目实战 -- 飞机大战 目标 强化 面向对象 程序设计 体验使用 pygame 模块进行 游戏开发 实战步骤 pygame 快速体验 飞机大战 实战 确认模块 -- pygame pygame 就是 ...

  9. Python程序设计,pygame飞机大战课程设计

    *飞机大战游戏设计 摘 要:根据课程要求,以及面向对象程序设计的编程思想,在Windows操作系统环境下,运用PyCharm编译程序,以Python语言为开发语言,最终实现飞机大战游戏相应的游戏操作功 ...

最新文章

  1. python小游戏源码-python21点小游戏源码免费下载
  2. 《水泥公司信息管理系统》Access学习心得
  3. 把事务封装成类似Serializable用法的特性
  4. 收藏!细胞增殖实验要点详解
  5. Servlet3.0新特性WebFilter(Annotation Filter)详解
  6. 计算机网络物理层-编码技术实现
  7. C语言循环时无故释放变量吗,C语言 - while循环体内变量重新声明,陷入***循环。...
  8. 信了你的邪之杭电1005
  9. ACCESS数据库自动编号的重置
  10. 谷歌大小写转换_如何轻松更改Google文档中文本的大小写
  11. idea中不显示代码下边的下划线
  12. Java - IO流学习笔记
  13. 《个人助手》新模块——数据手袋
  14. agc004E Salvage Robots
  15. dashboard 镜像源_kubernetes相关镜像源地址汇总
  16. linux convert 常用命令
  17. 一款基于Flutter开发的语雀APP
  18. 都在说并发,啥是并发?
  19. Hadop—yarn
  20. 股票的股息与股价对比

热门文章

  1. 30位烈士葬身火海,请记住英雄的名字!
  2. MFC学习(一)——ADO数据库编程
  3. 网易有道字典启动后微信截图快捷键失效
  4. java之Map对象转java对象的两种简单方式
  5. 新王降临——英特尔13代酷睿发布
  6. python工程师必备:生成可执行文件、进程、线程、协程、数据处理
  7. 计算机怎么打字快,电脑知识:如何电脑快速打字
  8. science图表_如何将论文图表做得漂亮?
  9. LncBase:lncRNA与miRNA相互作用数据库
  10. Revit二次开发加载RevitLookup.dll程序集