全网首份pyQt6飞机大战
该飞机大战具备较为完善的框架
可自动调整飞机与屏幕的位置
具备单点开火,半自动开火,全自动开火三种开火状态
每个作品作者花了不少头发,希望路过的大神多多留言点赞,对于不足的地方可以提出更完善的解决方法,我也会吸取教训,也会继续保持开源精神,奈何作者家境贫寒,需要不断的加班上班来养活自己,没有太多的时间精力去研究更多其他游戏,也欢迎有经济条件的大神也可以请我喝一瓶可乐,感激不尽。下面是飞机大战的图片及源码,图片素材是网上搜集的,如有侵权的请联系删除。
要运行该游戏需要安装python环境 并且在控制台输入pip install pyqt6进行安装环境
使用openGL 驱动需显卡支持
import random
import sys
import time
from PyQt6 import QtOpenGLWidgets
from PyQt6.QtCore import QTimer, Qt
from PyQt6.QtGui import QPixmap
from PyQt6.QtWidgets import QLabel, QApplication
# 飞机大战主类
class PlaneBigWar(QtOpenGLWidgets.QOpenGLWidget):
"""
控制方式:
子弹发射:
1. 使用鼠标单点发射
2. 使用X半自动发射
3. 使用空格自动发射
# 屏幕宽高,内部部件与飞机位置会随着屏幕大小改变自动改变
screenWidth = 1300
screenHeight = 700
# 初始生命分数
life = 3
score = 0
# 存储子弹与敌人的列表
enemies = []
bullets = []
# 游戏状态控制,初始为开始状态
STATES = {
"START": 0, "RUNNING": 1, "PAUSE": 2, "GAME_OVER": 3}
state = STATES["START"]
# 时间间隔静态方法,可提供其他类使用
def isActionTime(lastTime, interval)
"""
# 屏幕宽高,内部部件与飞机位置会随着屏幕大小改变自动改变
screenWidth = 1300
screenHeight = 700
# 初始生命分数
life = 3
score = 0
# 存储子弹与敌人的列表
enemies = []
bullets = []
# 游戏状态控制,初始为开始状态
STATES = {
"START": 0, "RUNNING": 1, "PAUSE": 2, "GAME_OVER": 3}
state = STATES["START"]
# 时间间隔静态方法,可提供其他类使用
@staticmethod
def isActionTime(lastTime, interval):
if lastTime == 0:
return True
currentTime = time.time()
return currentTime - lastTime >= interval
# 初始化主类构造器
def __init__(self):
super().__init__()
# 初始化相关变量
self.timer = QTimer(self)
# 初始化UI窗口
self.initUI()
# 入场对象的时间间隔0.5
self.lastTime = 0
self.interval = 0.5
# 与英雄机碰撞的时间间隔0.5
self.hitLastTime = 0
self.hitInterval = 0.5
# 初始化爆炸特效
self.booms = [QPixmap(f"./images/b{i}.png") for i in range(1, 12)]
# 初始化logo图片
logo = QPixmap("./images/LOGO.png")
# 初始化分数牌图片
indicator = QPixmap("./images/score.png")
# 初始化游戏开始提示图片图片
startGame = QPixmap("./images/startGame.png")
# 初始化暂停提示图片
gamePause = QPixmap("./images/game_pause_nor.png")
# 初始化图片提示图片
gameOver = QPixmap("./images/over.png")
# 初始化再来一次提示图片
again = QPixmap("./images/again.png")
# 初始化背景图片
self.bg = QPixmap("./images/bg235.jpg")
# 初始化英雄图片
self.h = QPixmap("./images/hero1.png")
# 初始化子弹图片
self.b = QPixmap("./images/bullet1.png")
# 初始化敌人1图片
self.e1 = QPixmap("./images/enemy1.png")
# 初始化敌人2图片
self.e2 = QPixmap("./images/enemy2.png")
# 初始化敌人3图片
self.e3 = QPixmap("./images/enemy3.png")
# 初始化天空类
self.sky = Sky(self, self.bg)
# 初始化英雄类
self.hero = Hero(self, self.h, self.booms)
# 初始化Logo类(图片)
self.logo = Remind(self, PlaneBigWar.screenWidth
PlaneBigWar.screenHeight
# 初始化分数牌类(图片)
self.indicator = Remind(self, PlaneBigWar.screenWidth - indicator.width(), 0, indicator)
# 初始化游戏开始类(图片)
self.startGame = Remind(self, PlaneBigWar.screenWidth
PlaneBigWar.screenHeight
startGame)
# 初始化暂停类(图片)
self.gamePause = Remind(self, PlaneBigWar.screenWidth
PlaneBigWar.screenHeight
# 初始化游戏结束类(图片)
self.gameOver = Remind(self, PlaneBigWar.screenWidth
PlaneBigWar.screenHeight
# 初始化再来一次类(图片)
self.again = Remind(self, PlaneBigWar.screenWidth
PlaneBigWar.screenHeight
again)
# 初始化生命文字类
self.lifeLabel = Text(self, PlaneBigWar.screenWidth - indicator.width() + 140, 51)
# 初始化分数文字类
self.scoreLabel = Text(self, PlaneBigWar.screenWidth - indicator.width() +