全网首份pyQt6飞机大战

这是一款使用PyQt6开发的飞机大战游戏,具有完整的框架,能自动调整飞机位置,并提供单点、半自动、全自动三种开火模式。作者希望得到反馈以改进游戏,同时分享了游戏的源码和素材。运行游戏需先安装Python环境和PyQt6库,且依赖OpenGL支持。
摘要由CSDN通过智能技术生成

全网首份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 // 2 - logo.width() // 2,
                           PlaneBigWar.screenHeight // 2 - logo.height() // 2, logo)
        # 初始化分数牌类(图片)
        self.indicator = Remind(self, PlaneBigWar.screenWidth - indicator.width(), 0, indicator)
        # 初始化游戏开始类(图片)
        self.startGame = Remind(self, PlaneBigWar.screenWidth // 2 - startGame.width() // 2,
                                PlaneBigWar.screenHeight // 2 + logo.height() // 2 + startGame.height(),
                                startGame)
        # 初始化暂停类(图片)
        self.gamePause = Remind(self, PlaneBigWar.screenWidth // 2 - gamePause.width() // 2,
                                PlaneBigWar.screenHeight // 2 - gamePause.height() // 2, gamePause)
        # 初始化游戏结束类(图片)
        self.gameOver = Remind(self, PlaneBigWar.screenWidth // 2 - gameOver.width() // 2,
                               PlaneBigWar.screenHeight // 2 - gameOver.height() // 2, gameOver)
        # 初始化再来一次类(图片)
        self.again = Remind(self, PlaneBigWar.screenWidth // 2 - again.width() // 2,
                            PlaneBigWar.screenHeight // 2 + gameOver.height() // 2 + again.height(),
                            again)
        # 初始化生命文字类
        self.lifeLabel = Text(self, PlaneBigWar.screenWidth - indicator.width() + 140, 51)
        # 初始化分数文字类
        self.scoreLabel = Text(self, PlaneBigWar.screenWidth - indicator.width() + 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值