pygame飞机大战 小游戏
运行效果
代码
# 先导入系统模块
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飞机大战 小游戏相关推荐
- pygame飞机大战小游戏(python大作业)
一.项目背景 python大作业,在查看了老师给的链接发现教学视频不完整,所以借用了同学的<Python编程 从入门到实践>中的一个项目,学习模仿. 二.游戏具体介绍 这是一款由辉辉亲自打 ...
- 体感游戏 | 手势识别玩飞机大战游戏(一) 用pygame实现飞机大战小游戏
Color Space OpenCV与AI深度学习 后面将分四篇文章来介绍实现手势识别控制飞机大战游戏的功能,它们分别是: 使用Pygame实现简易飞机大战小游戏 使用Python+OpenCV实现简 ...
- python 飞机大战小游戏
飞机大战小游戏,这里需要下载pygame模块 这是需要的素材,需要的自取: 上代码: import time import pygame from pygame.locals import *#检测事 ...
- 飞机大战小游戏(超详细)
偷学Python之最后的项目二:飞机大战小游戏(超详细) 古之立大事者,不惟有超世之才,亦必有坚忍不拔之志.--苏轼 甜甜先说 这次用Python中的pygame模块来完成一个飞机大战的小游戏:基本思 ...
- 飞机大战小游戏源码---飞机大战初体验
开发环境: Windows10,pycharm,python3 源码使用教程: 打开pycharm,创建一个新的项目,文件-->新建项目 项目命名:飞机大战初体验,基本解释器选择python3版 ...
- python飞机大战加背景音乐_python实现飞机大战小游戏 python飞机大战中的音频文件怎么改成MP3...
怎么样用Python写飞机大战游戏 python开发飞机大战外星人游戏怎么弄双人模式新的一年,哪怕仍是一个人,也要活得像一支队伍,为自己的头脑和心灵招兵买马,不气馁,有召唤,爱自由. 主函数 impo ...
- python小游戏——飞机大战小游戏(附源码)
写在前面的一些P话: 大家之前用python编写过飞机大战的部分代码, 只能够展示英雄飞机,背景,敌机和发射子弹, 今天把背景音乐,击毁敌机,爆炸特效,得分等等相关功能一并加入进来, 代码有点长,三百 ...
- 【python】飞机大战小游戏练习
飞机大战小游戏练习 一.前提准备 二.制作步骤 1.库的导入与初始化 2.窗口操作 3.键盘按键监听相关操作 4.添加游戏背景 5.加载玩家飞机 6.获取玩家飞机矩阵 三.完整代码编写 游戏背景类编写 ...
- 点击list view中一行内容可以在combox中显示_java版飞机大战小游戏详细教程(零基础小白也可以分分钟学会!)...
一:游戏展示 飞机大战小游戏我们都玩过,通过移动飞机来打敌机,这里给大家展示一下游戏成果:呜呜呜由于gif只能上传5M大小,所以就不能给大家展示操作了,如果大家有兴趣可以自己自己做出来再玩哟. 这里面 ...
最新文章
- 一篇学会HttpServletRequest
- Power of Two
- android源码settings中显示所有正在运行进程流程分析
- 电话聊天狂人 (25 分)【简便解法】
- Fence(CF-324F)
- RLock(递归锁)
- php 创建自定义文件夹,Laravel 自定命令以及生成文件的例子
- Hyper-V 3.0服务器虚拟化:打造坚固的云
- macbook快捷键_MacBook 键盘的「fn」键有什么用
- pip或者python安装jpype总是报错----Boilerpipe使用
- Android连接USB打印机
- SEODONG Medical推出创新干眼症治疗仪器,深受海外消费者好评
- 电脑热点突然不能用了,想想你是否新装了VMware等软件
- 【复盘】互联网老辛七月复盘-年中flag
- 头条视频30万次播放有多少收益,今日头条一个视频收益持续多久
- WebIDE 使用指南
- Go + C 一款简单的贪吃蛇
- 空间几何(点线面)知识整理
- WEB端和手机端-三种提示框架
- 阿里巴巴回购雅虎股权 雅虎收购变成三巨头博弈