当前位置:网站首页>QT graphical interface beginner project - unmanned aerial vehicle group combat simulation
QT graphical interface beginner project - unmanned aerial vehicle group combat simulation
2022-07-24 16:45:00 【SakamataZ】
The code has been uploaded to github: Click here welcome star
List of articles
explain
some 985 College Curriculum , Use QT Designer Complete the design of graphical interactive interface , The effect is similar to the following video :
Simulation UAV vs. yacht .mp4
The code quality is not high , But it realizes the function , It can be used as a reference for non professional curriculum design .
flow chart

Program control flow

Main code display
mainscene.cpp
#include "mainscene.h"
#include "config.h"
#include "move.h"
#include<iostream>
#include<QIcon>
#include<QPixmap>
#include<QPalette>
#include<QBrush>
#include<QPainter>
#include<QPushButton>
#include<QDebug>
using namespace std;
MainScene::MainScene(QWidget *parent)
: QWidget(parent)
{
Map m_map;
Move m_jianting;
Move m_feiji;
Move m_feiji1;
Move m_feiji2;
Move m_feiji3;
Move m_feiji4;
Missile m_missile;
Missile m_missile1;
Missile m_missile2;
Missile m_missile3;
Missile m_missile4;
Missile m_lanjiedan;
Missile m_lanjiedan1;
Missile m_lanjiedan2;
lasttime = 50;
lanjiedan_bomb[0] = 0;
lanjiedan_bomb[1] = 0;
lasttime_lanjie_1 = 50;
lasttime_lanjie_2 = 50;
initScene();
}
void MainScene::initScene()
{
setFixedSize(GAME_WIDTH,GAME_HEIGHT);
setWindowTitle(" Drone group operations ");
JianTingBomb.load(BOMB_PATH);
m_Timer.setInterval(GAME_RATE);
MainButton_1=new QPushButton(this);
MainButton_1->setIcon(QIcon(QUIT_PATH));
MainButton_1->setIconSize(QSize(150, 70));
MainButton_1->setGeometry(50,560,120,34);
connect(MainButton_1,&QPushButton::clicked,this,&MainScene::playGame);
MainButton_1=new QPushButton(this);
MainButton_1->setIcon(QIcon(QUIT_PATH1));
// MainButton_1->setGeometry(50, 50, 100, 50);
MainButton_1->setIconSize(QSize(150, 70));
MainButton_1->setGeometry(50,600,120,34);
connect(MainButton_1,&QPushButton::clicked,this,&MainScene::close);
}
MainScene::~MainScene()
{
}
// Collision detection logic
void MainScene::collisionDetection(){
if(m_jianting.jianting_life>0){
if(!bump[0]&&m_jianting.m_XJianting-2<m_feiji.missile.m_X&&m_feiji.missile.m_X<m_jianting.m_XJianting+2){
qDebug()<<" The bullet 1 hit ! Coordinate for :"+QString::number(m_feiji.missile.m_X);
m_jianting.jianting_life-=500;
bump[0]=true;
m_bombs[0].m_Free = false;
m_bombs[0].m_X = m_feiji.missile.m_X;
m_bombs[0].m_Y = m_feiji.missile.m_Y;
}
if(!bump[1]&&m_jianting.m_XJianting-2<m_feiji1.missile1.m_X1&&m_feiji1.missile1.m_X1<m_jianting.m_XJianting+2){
qDebug()<<" The bullet 2 hit ! Coordinate for :"+QString::number(m_jianting.m_XJianting);
m_jianting.jianting_life-=500;
bump[1]=true;
m_bombs[1].m_Free = false;
m_bombs[1].m_X = m_feiji1.missile1.m_X1;
m_bombs[1].m_Y = m_feiji1.missile1.m_Y1;
}
if(!bump[2]&&m_jianting.m_XJianting-2<m_feiji2.missile2.m_X2&&m_feiji2.missile2.m_X2<m_jianting.m_XJianting+2){
qDebug()<<" The bullet 3 hit ! Coordinate for :"+QString::number(m_feiji2.missile2.m_X2);
m_jianting.jianting_life-=500;
bump[2]=true;
m_bombs[2].m_Free = false;
m_bombs[2].m_X = m_feiji2.missile2.m_X2;
m_bombs[2].m_Y = m_feiji2.missile2.m_Y2;
}
if(!bump[3]&&m_jianting.m_XJianting-2<m_feiji3.missile3.m_X3&&m_feiji3.missile3.m_X3<m_jianting.m_XJianting+2){
qDebug()<<" The bullet 4 hit ! Coordinate for :"+QString::number(m_feiji3.missile3.m_X);
m_jianting.jianting_life-=500;
bump[3]=true;
m_bombs[3].m_Free = false;
m_bombs[3].m_X = m_feiji3.missile3.m_X3;
m_bombs[3].m_Y = m_feiji3.missile3.m_Y3;
}
if(!bump[4]&&m_jianting.m_YJianting-2<m_feiji4.missile4.m_Y4&&m_feiji4.missile4.m_Y4<m_jianting.m_YJianting+2){
qDebug()<<" The bullet 5 hit ! Coordinate for :"+QString::number(m_feiji4.missile4.m_X);
m_jianting.jianting_life-=500;
bump[4]=true;
m_bombs[4].m_Free = false;
m_bombs[4].m_X = m_feiji4.missile4.m_X3;
m_bombs[4].m_Y = m_feiji4.missile4.m_Y3;
}
if(m_jianting.m_lanjiedan1.m_x1<=m_feiji1.missile1.m_X1){
qDebug()<<"change the boolen of 2"<<m_jianting.m_lanjiedan1.m_x1<<m_feiji1.missile1.m_X1;
bump[1] = true;
lanjiedan_bomb[0]=true;
}
if(m_jianting.m_lanjiedan2.m_x2<=m_feiji3.missile3.m_X3){
qDebug()<<"change the boolen of 1"<<m_jianting.m_lanjiedan2.m_x2<<m_feiji3.missile3.m_X3;
bump[3] = true;
lanjiedan_bomb[1] = true;
}
}
}
void MainScene::playGame(){
m_Timer.start();
connect(&m_Timer,&QTimer::timeout,[=](){
updatePosition();
update();
time+=0.01;
collisionDetection();
});
}
void MainScene::updatePosition(){
// Update map coordinates
m_jianting.m_Free = false;
m_jianting.updatePosition();
m_feiji.m_Free = false;
m_feiji.updatePosition();
m_feiji1.m_Free = false;
m_feiji1.updatePosition();
m_feiji2.m_Free = false;
m_feiji2.updatePosition();
m_feiji3.m_Free = false;
m_feiji3.updatePosition();
m_feiji4.m_Free = false;
m_feiji4.updatePosition();
m_lanjiedan1.m_Free = false;
m_lanjiedan1.updatePosition();
m_lanjiedan2.m_Free = false;
m_lanjiedan2.updatePosition();
// Launch missiles
m_feiji.shoot();
// If the bullet is not idle , Calculate the launch position
if(!m_feiji.missile.m_Free) m_feiji.missile.updatePosition();
m_feiji1.shoot1();
if(!m_feiji1.missile1.m_Free) m_feiji1.missile1.updatePosition();
m_feiji2.shoot2();
if(!m_feiji2.missile2.m_Free) m_feiji2.missile2.updatePosition();
m_feiji3.shoot3();
if(!m_feiji3.missile3.m_Free) m_feiji3.missile3.updatePosition();
m_feiji4.shoot4();
if(!m_feiji4.missile4.m_Free) m_feiji4.missile4.updatePosition();
m_jianting.shoot5();
if(!m_jianting.m_lanjiedan1.m_Free) m_jianting.m_lanjiedan1.updatePosition();
m_jianting.shoot6();
if(!m_jianting.m_lanjiedan2.m_Free)m_jianting.m_lanjiedan2.updatePosition();
// Calculate the pictures played by the explosion
for(int i = 0 ; i <=BOMB_NUM;i++) {
if(m_bombs[i].m_Free == false){
m_bombs[i].updateInfo();
}
}
}
void MainScene::paintEvent(QPaintEvent *)
{
QPainter painter(this);
QFont f1(" Regular script ",14,QFont::Bold,true);
painter.setFont(f1);
painter.setPen(Qt::yellow);
painter.drawText(600,500," Warship HP :");
painter.drawText(360,500,tr(gcvt(m_jianting.jianting_life,5,ptr)));
// Make a map
painter.drawPixmap(0,0,1186,721,m_map.m_map1);
if(m_jianting.jianting_life>0){
painter.drawPixmap(m_jianting.m_XJianting,m_jianting.m_YJianting,120,50,m_jianting.m_Jianting);}
else{
if(lasttime){
lasttime--;
painter.drawPixmap(m_jianting.m_XJianting,m_jianting.m_YJianting,120,50,JianTingBomb);
}
}
painter.drawPixmap(m_feiji.XPlane,m_feiji.YPlane,m_feiji.Plane);
painter.drawPixmap(m_feiji1.XPlane1,m_feiji1.YPlane1,m_feiji1.Plane1);
painter.drawPixmap(m_feiji2.XPlane2,m_feiji2.YPlane2,m_feiji2.Plane2);
painter.drawPixmap(m_feiji3.XPlane3,m_feiji3.YPlane3,m_feiji3.Plane3);
painter.drawPixmap(m_feiji4.XPlane4,m_feiji4.YPlane4,m_feiji4.Plane4);
// Drawing missiles
if(!m_feiji.missile.m_Free&&!bump[0])
{
painter.drawPixmap(m_feiji.missile.m_X,m_feiji.missile.m_Y,m_feiji.missile.m_Missile );
}
if(!m_feiji1.missile1.m_Free&&!bump[1])
{
painter.drawPixmap(m_feiji1.missile1.m_X1,m_feiji1.missile1.m_Y1,m_feiji1.missile1.m_Missile );
}
if(!m_feiji2.missile2.m_Free&&!bump[2])
{
painter.drawPixmap(m_feiji2.missile2.m_X2,m_feiji2.missile2.m_Y2,m_feiji2.missile2.m_Missile );
}
if(!m_feiji3.missile3.m_Free&&!bump[3])
{
painter.drawPixmap(m_feiji3.missile3.m_X3,m_feiji3.missile3.m_Y3,m_feiji3.missile3.m_Missile );
}
if(!m_feiji4.missile4.m_Free&&!bump[4])
{
painter.drawPixmap(m_feiji4.missile4.m_X4,m_feiji4.missile4.m_Y4,m_feiji4.missile4.m_Missile );
}
if(!m_jianting.m_lanjiedan1.m_Free&&!lanjiedan_bomb[0])
{
if(m_jianting.m_lanjiedan1.m_x1>=m_feiji1.missile1.m_X1)
painter.drawPixmap(m_jianting.m_lanjiedan1.m_x1,m_jianting.m_lanjiedan1.m_y1,m_jianting.m_lanjiedan1.m_Missile );
}
if(!m_jianting.m_lanjiedan2.m_Free&&!lanjiedan_bomb[1])
{
if(m_jianting.m_lanjiedan2.m_x2>=m_feiji3.missile4.m_X3)
painter.drawPixmap(m_jianting.m_lanjiedan2.m_x2,m_jianting.m_lanjiedan2.m_y2,m_jianting.m_lanjiedan2.m_Missile );
}
for(int i=0;i<=4;i++)
if(m_bombs[i].m_Free == false){
painter.drawPixmap(m_bombs[i].m_X,m_bombs[i].m_Y,m_bombs[i].m_pixArr[m_bombs[i].m_index]);
qDebug()<<" The explosion 1";
}
if(lanjiedan_bomb[0]&&lasttime_lanjie_1){
lasttime_lanjie_1--;
qDebug()<<" The explosion 2";
painter.drawPixmap(m_jianting.m_lanjiedan1.m_x1,m_jianting.m_lanjiedan1.m_y1,JianTingBomb);
}
if(lanjiedan_bomb[1]&&lasttime_lanjie_2){
qDebug()<<" The explosion 3";
lasttime_lanjie_2--;
painter.drawPixmap(m_jianting.m_lanjiedan2.m_x2,m_jianting.m_lanjiedan2.m_y2,JianTingBomb);
}
}
Bullet operation logic :
void Missile::updatePosition()
{
t++;
m_X+=3;
m_Y +=Acceleration*(2*t+1)/2;
m_X1+=3;
// m_Y1 += 1.4;
m_Y1 +=Acceleration*(2*t+1)/2;
// if(m_X2<=700){
// m_Y2 += 2;
m_Y2 +=Acceleration*(2*t+1)/2;
m_X2+=3;
// }
m_X3+=3;
// m_Y3 += 1.45;
m_Y3 +=Acceleration*(2*t+1)/2;
// if(m_X4<=680){
// m_Y4 += 2.5;
if(m_X4<=860){
m_Y4 +=Acceleration*(2*t+1)/2;
m_X4 += 3;
}else{
m_Y4 +=Acceleration*(2*t+1)/2;
m_X4 -= 3;
}
if(m_x1>600 ){
m_x1-=3;
m_y1-=1.54;
}
if(m_x2>650){
m_x2-=2;
m_y2-=1.45;
}
}
边栏推荐
- 会议OA项目进度(一)
- What are the safe securities companies? I want to buy stocks on my mobile phone
- Zcmu--5083: number pairs of ly (C language)
- SS-Paper【1】:Fully Convolutional Networks for Semantic Segmentation
- Jia Yueting's Faraday will receive another financing of US $225million in the future, and ff91 will be mass produced soon!
- Picture browser? QT can also be achieved!
- 【技术】uniapp之聊天室 demo
- Sword finger offer 48. the longest substring without repeated characters
- Axi protocol (1): introduction to AMBA bus, introduction to Axi concept and background, characteristics and functions of Axi protocol
- EF miscellaneous
猜你喜欢

Using native JS to realize magnifying glass function

小端格式和大端格式(Little-Endian&Big-Endian)

JVM class loading subsystem

Mysql增删改查、检索与约束(详细教学)

IP day 13 notes

会议OA项目进度(一)

Thinkphp3.2.5 cannot jump to external links

Duplicate content in lookup table

Implementation of side list menu (side menu) of wechat applet
![为什么被调函数内部不能用 sizeof(arr) / size(arr[0]) 计算数组长度?](/img/e6/1d2213f3eb9bd0ff537a66d2b01f98.png)
为什么被调函数内部不能用 sizeof(arr) / size(arr[0]) 计算数组长度?
随机推荐
【时序逻辑电路】——计数器
Amd Ruilong 7000 is expected to be available on September 15, and the 3D cache version will have to wait
OpenMP入门
[leetcode]75. color classification - problem solving (execution time beat 90%, memory consumption beat 78%)
How to effectively avoid memory leakage when customizing the handler?
Solve the timeliness problem caused by Eureka's default cache configuration
简单使用 MySQL 索引
Development dynamics | stonedb 2022 release milestone
Axi protocol (1): introduction to AMBA bus, introduction to Axi concept and background, characteristics and functions of Axi protocol
Qt信号和槽连接失败原因及解决办法
MySQL basic commands
[LeetCode]75.颜色分类——题解(执行用时击败90% ,内存消耗击败 78%)
我们为什么要推出Getaverse?
Codeworks round 693 (Div. 3) C. long jumps problem solution
Explain Apache Hudi schema evolution in detail
Duplicate content in lookup table
ArcGIS pixel size changed from 0.00025 to meters
AXI协议(2):AXI架构的五个通道和两种事务
QT keyboard event (II) -- long press the key to trigger the event event repeatedly, and the problem is solved
2019q1 global smartphone shipments: Huawei vivo increased significantly, while Apple plummeted 30.2%!