-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbomb.cpp
120 lines (96 loc) · 3.12 KB
/
bomb.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#include "bomb.h"
#include <QPixmap>
#include <QGraphicsScene>
#include "destructiblewall.h"
#include "explosion.h"
#include "player.h"
#include "QDebug"
Bomb::Bomb(QGraphicsScene* scene, QGraphicsItem* parent)
: QObject(), QGraphicsPixmapItem(parent), explosion(nullptr)
{
QPixmap bombImage(":/img/bomb.png");
setPixmap(bombImage.scaled(50, 50));
timer = new QTimer(this);
connect(timer, &QTimer::timeout, this, &Bomb::explode);
timer->start(2000);
}
void Bomb::explode()
{
Explosion* explosion = new Explosion(scene(), nullptr);
explosion->setPos(x(), y());
scene()->addItem(explosion);
connect(explosion, &Explosion::expired, explosion, &Explosion::deleteLater);
QTimer::singleShot(1000, explosion, &Explosion::handleExpire);
QList<QGraphicsItem*> adjacentItems = scene()->items(QRectF(x() - 50, y() - 50, 150, 150));
bool died = false;
Player* survivingPlayer = nullptr;
foreach (QGraphicsItem* item, adjacentItems) {
DestructibleWall* wall = dynamic_cast<DestructibleWall*>(item);
if (wall) {
scene()->removeItem(wall);
}
Player* player = dynamic_cast<Player*>(item);
if (player) {
died = true;
survivingPlayer = player;
scene()->removeItem(player);
}
}
if (died) {
resultScene = new QGraphicsScene();
resultScene->setBackgroundBrush(Qt::black);
QGraphicsTextItem* message = new QGraphicsTextItem();
message->setPlainText("The " + survivingPlayer->getPlayerName() + " survived!");
message->setDefaultTextColor(Qt::black);
message->setFont(QFont("Chilanka", 24));
message->setPos(100, 100);
resultScene->addItem(message);
playButton = new QPushButton();
playButton->setText("Play again?");
playButton->setGeometry(QRect(230,420,100,47));
connect(playButton, SIGNAL("&QPushButton::clicked"), this, SLOT("&Bomb::handlePlayButton"));
resultScene->addWidget(playButton);
// actionReboot = new QAction( this );
// actionReboot->setText( tr("Restart") );
// actionReboot->setStatusTip( tr("Restarts the application") );
// connect( actionReboot, SIGNAL (triggered()),
// this, SLOT (slotReboot())
// );
scene()->setParent(nullptr);
scene()->deleteLater();
scene()->views().first()->setScene(resultScene);
}
scene()->removeItem(this);
deleteLater();
}
void Bomb::handlePlayButton()
{
qDebug() << "Exit button clicked!";
QApplication::quit();
// resultScene->addWidget(actionReboot);
}
void Bomb::handleExitButtonClicked()
{
qDebug() << "Exit button clicked!";
QApplication::quit();
}
void Bomb::handleExplosionFinished()
{
if (explosion)
{
scene()->removeItem(explosion);
explosion->deleteLater();
explosion = nullptr;
}
emit expired();
deleteLater();
}
void Bomb::handleExplosionExpired()
{
emit expired();
Explosion* explosion = qobject_cast<Explosion*>(sender());
if (explosion)
{
explosion->deleteLater();
}
}