运行效果

代码

# 先导入系统模块
import sys
# 随机模块
import random# 再导入第三方模块
import pygame
import pygame.locals# 背景图片路径
IMG_BACKGROUND = "res/img_bg_level_1.jpg"
# 敌机图片路径 元组
IMG_ENEMYPLANE = ("res/img-plane_1.png", "res/img-plane_2.png", "res/img-plane_3.png", "res/img-plane_4.png","res/img-plane_5.png", "res/img-plane_6.png", "res/img-plane_7.png")
# 玩家飞机图片路径
IMG_PLAYER_PLANE = "res/hero2.png"
# 子弹图片
IMG_BULLET = "res/bullet_13.png"class Model(object):"""提供基础模型"""# 窗口对象window = Nonedef __init__(self, img_path, x, y):# 图片对象self.img = pygame.image.load(img_path)# x坐标self.x = x# y坐标self.y = ydef display(self):# 将要显示的对象添加到窗体中, 并指定其坐标Model.window.blit(self.img, (self.x, self.y))class Game(object):"""游戏整体控制"""# 窗口宽度WINDOW_WIDTH = 512# 窗口高度WINDOW_HEIGHT = 768# 窗体标题WINDOW_TITLE = "Plane Battle v1.0"# 小图标路径APP_ICON = "res/app.ico"def __init__(self):# 窗体对象self.window = None# 背景对象self.background = None# 敌机对象self.enemy_planes = list()# 玩家对象self.player_plane = Nonedef run(self):"""运行入口, 整体游戏控制"""# 框架初始化self.frame_init()# 模型初始化self.model_init()# 构造反复执行的机制, 刷新窗体、使窗体保持在屏幕上while True:# 背景移动self.background.move()# 显示背景self.background.display()for enemy_plane in self.enemy_planes:# 敌机下降enemy_plane.move()# 显示敌机(加载贴图)enemy_plane.display()# 显示玩家self.player_plane.display()# 把敌机列表传给玩家飞机, 好进行子弹与敌机的碰撞检测self.player_plane.collision_checking(self.enemy_planes)# 刷新窗体pygame.display.update()# 事件监听self.event_init()def frame_init(self):"""窗体初始化"""# 设置窗体对象self.window = pygame.display.set_mode((Game.WINDOW_WIDTH, Game.WINDOW_HEIGHT))# 将窗口对象传给Model类属性Model.window = self.window# 左上小图标对象app_img = pygame.image.load(Game.APP_ICON)# 设置窗体图标pygame.display.set_icon(app_img)# 设置窗体标题文本pygame.display.set_caption(Game.WINDOW_TITLE)def model_init(self):"""初始化窗体中的对象"""# 背景对象self.background = Background(IMG_BACKGROUND, 0, 0)for _ in IMG_ENEMYPLANE:# 加入多加敌机到 敌机列表中self.enemy_planes.append(EnemyPlane())# 玩家对象self.player_plane = PlayerPlane(IMG_PLAYER_PLANE, PlayerPlane.PLAYERPLANE_X, PlayerPlane.PLAYERPLANE_Y)def event_init(self):"""事件监听"""# 获取事件列表中的每一个事件for event in pygame.event.get():# 判断事件类别是否为退出事件if event.type == pygame.locals.QUIT:# 退出程序sys.exit()# 当事件类别是鼠标移动动作时if event.type == pygame.locals.MOUSEMOTION:# 获取鼠标坐标位置position = pygame.mouse.get_pos()# 根据鼠标的位置设置玩家飞机的位置self.player_plane.x = position[0] - PlayerPlane.PLAYERPLANE_WIDTH / 2self.player_plane.y = position[1] - PlayerPlane.PLAYERPLANE_HEIGHT / 2 + 5# 获取鼠标是否按下的状态mouse_state = pygame.mouse.get_pressed()# 判断是否按下鼠标左键if mouse_state[0] == 1:# 获取鼠标坐标位置position = pygame.mouse.get_pos()# 初始化子弹位置self.player_plane.bullets.append(Bullet(IMG_BULLET, position[0] - Bullet.BULLET_WIDTH / 2,position[1] - Bullet.BULLET_HEIGHT - 30))# 当玩家按下鼠标左键时, 才开始游戏self.player_plane.start_game = Trueclass Background(Model):"""背景"""def display(self):"""装载上下两张图片到窗体中"""# 将要显示的对象添加到窗体中, 并指定其坐标Model.window.blit(self.img, (self.x, self.y))Model.window.blit(self.img, (self.x, self.y - Game.WINDOW_HEIGHT))def move(self):"""背景移动"""# 当纵轴的值小于等于屏幕高度时:if self.y <= Game.WINDOW_HEIGHT:# 移动图片self.y += 1else:# 图片归位self.y = 0class PlayerPlane(Model):"""玩家飞机"""# 玩家飞机的宽度PLAYERPLANE_WIDTH = 120# 玩家飞机的高度PLAYERPLANE_HEIGHT = 78# 玩家飞机的初始位置PLAYERPLANE_X = 200PLAYERPLANE_Y = 500def __init__(self, img, x, y):super().__init__(img, x, y)# 子弹列表对象self.bullets = list()# 需要删除的子弹列表self.remove_bullets = list()# 玩家是否开始游戏标志self.start_game = Falsedef collision_checking(self, enemy_list):"""子弹的显示, 还有子弹与敌机的碰撞检测"""for bullet in self.bullets:# 子弹移动bullet.move()# 子弹显示bullet.display()# 当子弹飞出屏幕时:if bullet.y < -Bullet.BULLET_HEIGHT:# 将这个子弹添加到待删除子弹的列表self.remove_bullets.append(bullet)# 子弹没有飞出屏幕else:# 子弹矩形bullet_rect = pygame.locals.Rect(bullet.x, bullet.y, Bullet.BULLET_WIDTH, Bullet.BULLET_HEIGHT)for enemy in enemy_list:# 敌机矩形enemy_rect = pygame.locals.Rect(enemy.x, enemy.y, EnemyPlane.ENEMYPLANE_WIDTH, EnemyPlane.ENEMYPLANE_HEIGHT)# 两个矩形碰撞检测if pygame.Rect.colliderect(bullet_rect, enemy_rect):# 子弹碰撞敌机后, 敌机归位到屏幕上方enemy.enemy_plane_init()# 子弹加入删除列表self.remove_bullets.append(bullet)# 一颗子弹只能撞击 一架敌机, 退出for循环break# 玩家飞机矩形player_rect = pygame.locals.Rect(self.x, self.y, PlayerPlane.PLAYERPLANE_WIDTH,PlayerPlane.PLAYERPLANE_HEIGHT)for enemy in enemy_list:# 敌机矩形enemy_rect = pygame.locals.Rect(enemy.x, enemy.y, EnemyPlane.ENEMYPLANE_WIDTH,EnemyPlane.ENEMYPLANE_HEIGHT)# 玩家飞机与敌机碰撞检测if pygame.Rect.colliderect(player_rect, enemy_rect):# 一开始游戏时, 玩家按下鼠标左键, 才能判断玩家飞机与敌机碰撞检测, 再退出游戏if self.start_game:# 退出程序sys.exit()# 根据 待删除子弹的列表 删除子弹列表中的对象for bullet in self.remove_bullets:self.bullets.remove(bullet)else:# 删除完后, 需要将 待删除列表清空self.remove_bullets.clear()class Bullet(Model):"""子弹"""# 子弹的宽度BULLET_WIDTH = 20# 子弹的高度BULLET_HEIGHT = 29# 子弹间的移动速度BULLET_SPEED = 8def move(self):"""子弹移动"""self.y -= Bullet.BULLET_SPEEDclass EnemyPlane(Model):"""敌机"""# 敌机的宽度ENEMYPLANE_WIDTH = 100# 敌机的高度ENEMYPLANE_HEIGHT = 68# 敌机移动速度ENEMYPLANE_SPEED = 4def __init__(self):self.enemy_plane_init()def enemy_plane_init(self):"""初始化敌机"""# 敌机归到窗口上方self.y = 0 - EnemyPlane.ENEMYPLANE_HEIGHT# 敌机横坐标随机出现self.x = random.randint(0, Game.WINDOW_WIDTH - EnemyPlane.ENEMYPLANE_WIDTH)# 贴图随机self.img = pygame.image.load(IMG_ENEMYPLANE[random.randint(0, 6)])def move(self):# 当敌机没有下降出屏幕高度时if self.y <= Game.WINDOW_HEIGHT:# 移动敌机self.y += EnemyPlane.ENEMYPLANE_SPEEDelse:self.enemy_plane_init()if __name__ == '__main__':Game().run()

打包成exe文章链接

记一次pygame小程序打包成exe

图片素材地址

链接: https://pan.baidu.com/s/1mMeJfSqEjSgMATxU6SXfZg
提取码: 9cge

pygame飞机大战 小游戏相关推荐

  1. pygame飞机大战小游戏(python大作业)

    一.项目背景 python大作业,在查看了老师给的链接发现教学视频不完整,所以借用了同学的<Python编程 从入门到实践>中的一个项目,学习模仿. 二.游戏具体介绍 这是一款由辉辉亲自打 ...

  2. 体感游戏 | 手势识别玩飞机大战游戏(一) 用pygame实现飞机大战小游戏

    Color Space OpenCV与AI深度学习 后面将分四篇文章来介绍实现手势识别控制飞机大战游戏的功能,它们分别是: 使用Pygame实现简易飞机大战小游戏 使用Python+OpenCV实现简 ...

  3. python 飞机大战小游戏

    飞机大战小游戏,这里需要下载pygame模块 这是需要的素材,需要的自取: 上代码: import time import pygame from pygame.locals import *#检测事 ...

  4. 飞机大战小游戏(超详细)

    偷学Python之最后的项目二:飞机大战小游戏(超详细) 古之立大事者,不惟有超世之才,亦必有坚忍不拔之志.--苏轼 甜甜先说 这次用Python中的pygame模块来完成一个飞机大战的小游戏:基本思 ...

  5. 飞机大战小游戏源码---飞机大战初体验

    开发环境: Windows10,pycharm,python3 源码使用教程: 打开pycharm,创建一个新的项目,文件-->新建项目 项目命名:飞机大战初体验,基本解释器选择python3版 ...

  6. python飞机大战加背景音乐_python实现飞机大战小游戏 python飞机大战中的音频文件怎么改成MP3...

    怎么样用Python写飞机大战游戏 python开发飞机大战外星人游戏怎么弄双人模式新的一年,哪怕仍是一个人,也要活得像一支队伍,为自己的头脑和心灵招兵买马,不气馁,有召唤,爱自由. 主函数 impo ...

  7. python小游戏——飞机大战小游戏(附源码)

    写在前面的一些P话: 大家之前用python编写过飞机大战的部分代码, 只能够展示英雄飞机,背景,敌机和发射子弹, 今天把背景音乐,击毁敌机,爆炸特效,得分等等相关功能一并加入进来, 代码有点长,三百 ...

  8. 【python】飞机大战小游戏练习

    飞机大战小游戏练习 一.前提准备 二.制作步骤 1.库的导入与初始化 2.窗口操作 3.键盘按键监听相关操作 4.添加游戏背景 5.加载玩家飞机 6.获取玩家飞机矩阵 三.完整代码编写 游戏背景类编写 ...

  9. 点击list view中一行内容可以在combox中显示_java版飞机大战小游戏详细教程(零基础小白也可以分分钟学会!)...

    一:游戏展示 飞机大战小游戏我们都玩过,通过移动飞机来打敌机,这里给大家展示一下游戏成果:呜呜呜由于gif只能上传5M大小,所以就不能给大家展示操作了,如果大家有兴趣可以自己自己做出来再玩哟. 这里面 ...

最新文章

  1. 一篇学会HttpServletRequest
  2. Power of Two
  3. android源码settings中显示所有正在运行进程流程分析
  4. 电话聊天狂人 (25 分)【简便解法】
  5. Fence(CF-324F)
  6. RLock(递归锁)
  7. php 创建自定义文件夹,Laravel 自定命令以及生成文件的例子
  8. Hyper-V 3.0服务器虚拟化:打造坚固的云
  9. macbook快捷键_MacBook 键盘的「fn」键有什么用
  10. pip或者python安装jpype总是报错----Boilerpipe使用
  11. Android连接USB打印机
  12. SEODONG Medical推出创新干眼症治疗仪器,深受海外消费者好评
  13. 电脑热点突然不能用了,想想你是否新装了VMware等软件
  14. 【复盘】互联网老辛七月复盘-年中flag
  15. 头条视频30万次播放有多少收益,今日头条一个视频收益持续多久
  16. WebIDE 使用指南
  17. Go + C 一款简单的贪吃蛇
  18. 空间几何(点线面)知识整理
  19. WEB端和手机端-三种提示框架
  20. 阿里巴巴回购雅虎股权 雅虎收购变成三巨头博弈

热门文章

  1. 多段视频画面四周同时插入光晕效果并导出的详细步骤
  2. html中的超链接(总结)
  3. ios 构建工具栏UIToolBar
  4. 2020年Java前景如何?现在还适合入行吗?
  5. 国家中小学智慧教育平台网页版下载教材
  6. 达人评测 r7 7735h和r5 5600h选哪个 锐龙r77735h和r55600h对比
  7. 名画168 唐寅《临李伯时饮中八仙全图》
  8. Shopee夏季什么产品好卖?东南亚5大市场长夏选品攻略
  9. saliency detection论文(一)—Saliency Detection: A Spectral Residual Approach
  10. 软件提交入口,软件开发者必备