QT-坦克大战游戏


一、演示效果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、关键程序

#include "score.h"
Score::Score(){
   

health=30;
maxHealth=health;

    QLabel *label1 = new QLabel(this);
    label1->setFrameStyle(QFrame::Plain | QFrame::Box);
    label1->setStyleSheet("background-color:red;");
    label1->setText("Player1");
    label1->setAlignment(Qt::AlignTop | Qt::AlignCenter);
    label1->setFixedHeight(50);
    QFont font1= label1->font();
    font1.setPixelSize(20);
    label1->setFont(font1);

    label1->setGeometry(0,0,100,100 );
    resize(length*health/maxHealth, this->height(),1);

    QLabel *label2 = new QLabel(this);
    label2->setFrameStyle(QFrame::Plain | QFrame::Box);
    label2->setStyleSheet("background-color:red;");
    label2->setText("Player2");
    label2->setAlignment(Qt::AlignTop | Qt::AlignCenter);
    label2->setFixedHeight(50);
    QFont font2= label2->font();
    font2.setPixelSize(20);
    label2->setFont(font2);
    label2->setGeometry(SCORE_WIDTH - 100,0,100,100 );
    resize(length*health/maxHealth,this->height(),2);

    QPalette p(palette());
    p.setColor(QPalette::Window, QColor(255, 243, 240)); //bricks & box
    //p.setColor(QPalette::Window, QColor(224, 255, 224)); //forest

    this->setAutoFillBackground(true);
    this->setPalette(p);

    this->setFixedHeight(50);
}


void Score::paintEvent(QPaintEvent *event)
{
   
    Q_UNUSED(event);

    QPainter painter1(this);
    QPainter painter2(this);

        painter1.save();
        painter1.setBrush(Qt::blue);
        if(!hp1.isNull())
            painter1.drawRect(hp1);
        painter1.restore();

        painter2.save();
        painter2.setBrush(Qt::green);
        if(!hp2.isNull())
            painter2.drawRect(hp2);
        painter2.restore();
}

void Score::slotDamage(int health,int ID){
   
   std::ofstream fout;
   if(ID==1){
   
        resize(length*health/maxHealth, this->height(),1);
        if(health<=0){
   
              std::ofstream fout;
                fout.open("Results.txt");
                fout << "Player2 WON!!!!";
                emit signalEndOfTheGame(2);
           }
   }
   else if(ID==2){
   
        resize(length*health/maxHealth,this->height(),2);
        if(health<=0){
   
                fout.open("Results.txt");
                fout << "Player1 WON!!!!";
                emit signalEndOfTheGame(1);
           }
   }
   fout.close();
}

void Score::resize(int width,int height,int ID){
   
    if (width < 0) width = 0;

    if(ID==1){
   
        hp1 = QRectF(100, 0, width,height);
        update();
    }else if(ID==2){
   
        hp2 = QRectF(SCORE_WIDTH - 100, 0, -width,height);
        update();
    }
}

三、下载链接

https://download.csdn.net/download/u013083044/88632686?spm=1001.2014.3001.5503

相关推荐

  1. 用Python写一个简单的坦克大战游戏实例

    2023-12-16 05:38:06       13 阅读
  2. pygame--坦克大战(二)

    2023-12-16 05:38:06       13 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-16 05:38:06       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-16 05:38:06       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-16 05:38:06       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-16 05:38:06       20 阅读

热门阅读

  1. 【Rust日报】2023-12-14 Mojo 也要支持生存期

    2023-12-16 05:38:06       40 阅读
  2. QT之QGraphicsProxyWidget

    2023-12-16 05:38:06       32 阅读
  3. Qt图像处理-基于OpenCv的图像二值化处理

    2023-12-16 05:38:06       40 阅读
  4. Error: Required request body is missing:……

    2023-12-16 05:38:06       36 阅读
  5. 【PHP】openssl_encrypt、openssl_decrypt对称加密解密

    2023-12-16 05:38:06       33 阅读
  6. 计算机犯罪与相关法规

    2023-12-16 05:38:06       38 阅读
  7. ctypes --- Python 的外部函数库

    2023-12-16 05:38:06       38 阅读
  8. 【.Net 6.0--通用帮助类--FileHelper】

    2023-12-16 05:38:06       35 阅读
  9. C++实现一些C#接口

    2023-12-16 05:38:06       37 阅读