27 connect(p_game, SIGNAL(levelStarted(
bool)), SLOT(intro(
bool)));
28 connect(p_game, SIGNAL(gameStarted()),
this, SLOT(start()));
29 connect(p_game, SIGNAL(pauseChanged(
bool,
bool)),
this, SLOT(setPaused(
bool,
bool)));
30 connect(p_game, SIGNAL(elementEaten(qreal,qreal)),
this, SLOT(hideElement(qreal,qreal)));
31 connect(p_game, SIGNAL(bonusOn()),
this, SLOT(displayBonus()));
32 connect(p_game, SIGNAL(bonusOff()),
this, SLOT(hideBonus()));
35 connect(p_game, SIGNAL(pointsToDisplay(
long,qreal,qreal)),
this, SLOT(displayPoints(
long,qreal,qreal)));
38 m_theme =
new KGameTheme();
41 m_renderer =
new QSvgRenderer();
47 m_mazeItem->setSharedRenderer(m_renderer);
49 m_mazeItem->setElementId(
"maze");
50 m_mazeItem->setZValue(-2);
54 m_kapmanItem->setSharedRenderer(m_renderer);
55 m_kapmanItem->setElementId(
"kapman_0");
58 m_kapmanItem->setZValue(2);
63 for (
int i = 0; i < p_game->
getGhosts().size(); ++i) {
65 ghost->setSharedRenderer(m_renderer);
66 ghost->setElementId(p_game->
getGhosts()[i]->getImageId());
70 m_ghostItems.append(ghost);
80 element->setSharedRenderer(m_renderer);
83 m_elementItems[i][j] = element;
85 m_elementItems[i][j] = NULL;
91 m_bonusItem->setSharedRenderer(m_renderer);
92 m_bonusItem->setElementId(
"bonus1");
96 updateThemeProperties();
99 m_introLabel =
new QGraphicsTextItem(i18n(
"GET READY!!!"));
100 m_introLabel->setFont(QFont(
"Helvetica", 25, QFont::Bold,
false));
101 m_introLabel->setDefaultTextColor(QColor(
"#FFFF00"));
102 m_introLabel->setZValue(4);
103 m_introLabel2 =
new QGraphicsTextItem(i18n(
"Press any arrow key to start"));
104 m_introLabel2->setFont(QFont(
"Helvetica", 15, QFont::Bold,
false));
105 m_introLabel2->setDefaultTextColor(QColor(
"#FFFF00"));
106 m_introLabel2->setZValue(4);
108 m_newLevelLabel =
new QGraphicsTextItem();
109 m_newLevelLabel->setFont(QFont(
"Helvetica", 35, QFont::Bold,
false));
110 m_newLevelLabel->setDefaultTextColor(QColor(
"#FFFF00"));
111 m_newLevelLabel->setZValue(4);
113 m_pauseLabel =
new QGraphicsTextItem(i18n(
"PAUSED"));
114 m_pauseLabel->setFont(QFont(
"Helvetica", 35, QFont::Bold,
false));
115 m_pauseLabel->setDefaultTextColor(QColor(
"#FFFF00"));
116 m_pauseLabel->setZValue(4);
121 addItem(m_kapmanItem);
123 for (
int i = 0; i < m_ghostItems.size(); ++i) {
124 addItem(m_ghostItems[i]);
133 for (
int i = 0; i < m_ghostItems.size(); ++i) {
134 delete m_ghostItems[i];
138 if (m_elementItems[i][j] != NULL) {
139 delete m_elementItems[i][j];
142 delete[] m_elementItems[i];
144 delete[] m_elementItems;
147 delete m_introLabel2;
148 delete m_newLevelLabel;
162 if (!m_renderer->load(m_theme->graphics())) {
168 updateThemeProperties();
170 update(0, 0, width(), height());
176 void GameScene::updateSvgIds() {
179 if (!m_kapmanItem)
return;
182 m_mazeItem->setElementId(
"maze");
185 m_kapmanItem->setElementId(
"kapman_0");
189 for (
int i = 0; i < m_ghostItems.size(); ++i) {
191 ghost->setElementId(m_game->
getGhosts()[i]->getImageId());
196 if (m_elementItems[i][j] != NULL) {
205 void GameScene::updateThemeProperties() {
207 if (!m_kapmanItem)
return;
210 if (m_theme->themeProperty(
"RotateKapman")==
"0") {
217 void GameScene::intro(
const bool p_newLevel) {
223 if (m_elementItems[i][j] != NULL) {
224 if (!items().contains(m_elementItems[i][j])) {
225 addItem(m_elementItems[i][j]);
231 m_newLevelLabel->setPlainText(i18nc(
"The number of the game level",
"Level %1", m_game->
getLevel()));
232 if (!items().contains(m_newLevelLabel)) {
233 addItem(m_newLevelLabel);
234 m_newLevelLabel->setPos((width() - m_newLevelLabel->boundingRect().width()) / 2, (height() - m_newLevelLabel->boundingRect().height()) / 2);
237 if (!items().contains(m_introLabel2)) {
238 addItem(m_introLabel2);
239 m_introLabel2->setPos((width() - m_introLabel2->boundingRect().width()) / 2,
240 (height() - m_introLabel2->boundingRect().height() + m_newLevelLabel->boundingRect().height()) / 2);
244 if (!items().contains(m_introLabel)) {
245 addItem(m_introLabel);
246 m_introLabel->setPos((width() - m_introLabel->boundingRect().width()) / 2, (height() - m_introLabel->boundingRect().height()) / 2);
248 if (!items().contains(m_introLabel2)) {
249 addItem(m_introLabel2);
250 m_introLabel2->setPos((width() - m_introLabel2->boundingRect().width()) / 2,
251 (height() - m_introLabel2->boundingRect().height() + m_introLabel->boundingRect().height()) / 2);
256 void GameScene::start() {
258 if (items().contains(m_introLabel)) {
259 removeItem(m_introLabel);
261 if (items().contains(m_introLabel2)) {
262 removeItem(m_introLabel2);
264 if (items().contains(m_newLevelLabel)) {
265 removeItem(m_newLevelLabel);
269 void GameScene::setPaused(
const bool p_pause,
const bool p_fromUser) {
275 if (!items().contains(m_pauseLabel)) {
281 addItem(m_pauseLabel);
282 m_pauseLabel->setPos((width() - m_pauseLabel->boundingRect().width()) / 2, (height() - m_pauseLabel->boundingRect().height()) / 2);
291 if (items().contains(m_pauseLabel)) {
292 removeItem(m_pauseLabel);
300 void GameScene::hideElement(
const qreal p_x,
const qreal p_y) {
306 void GameScene::displayBonus() {
307 if (!items().contains(m_bonusItem)) {
310 m_bonusItem->setElementId(
"bonus1");
313 m_bonusItem->setElementId(
"bonus2");
316 m_bonusItem->setElementId(
"bonus3");
319 m_bonusItem->setElementId(
"bonus4");
322 m_bonusItem->setElementId(
"bonus5");
325 m_bonusItem->setElementId(
"bonus6");
328 m_bonusItem->setElementId(
"bonus7");
332 addItem(m_bonusItem);
336 void GameScene::hideBonus() {
337 if (items().contains(m_bonusItem)) {
338 removeItem(m_bonusItem);
343 void GameScene::displayPoints(
long p_wonPoints, qreal p_xPos, qreal p_yPos) {
345 QTimer::singleShot(1000,
this, SLOT(hidePoints()));
348 m_wonPointsLabels.prepend(
new QGraphicsTextItem(QString::number(p_wonPoints)));
349 addItem(m_wonPointsLabels.first());
352 QGraphicsTextItem* tempRef = m_wonPointsLabels.first();
355 tempRef->setDefaultTextColor(QColor(
"#FFFF00"));
356 tempRef->setFont(QFont(
"Helvetica", 15, QFont::Normal,
false));
357 tempRef->setPos(p_xPos-(tempRef->boundingRect().width() / 2), p_yPos-(tempRef->boundingRect().height() / 2));
358 tempRef->setZValue(-1);
361 void GameScene::hidePoints() {
363 removeItem(m_wonPointsLabels.last());
365 delete m_wonPointsLabels.takeLast();
Element * getElement() const
Gets the Element that is on the Cell.
Cell getCell(const int p_row, const int p_column) const
Gets the Cell at the given coordinates.
qreal getX() const
Gets the Element x-coordinate.
virtual void update(qreal p_x, qreal p_y)
Updates the ElementItem coordinates.
This class manage the display of the Kapman.
int getNbRows() const
Gets the number of rows of the Maze.
void pauseAnim()
Pauses the KapmanItem animation.
static QString theme()
Get The graphical theme to be used.
QString getImageId() const
Gets the path to the Element image.
void loadTheme()
Loads the game theme.
QList< Ghost * > getGhosts() const
~GameScene()
Deletes the Game instance.
Kapman * getKapman() const
void stopAnim()
Stops the KapmanItem animation.
void update(qreal p_x, qreal p_y)
Updates the KapmanItem coordinates.
static const qreal SIZE
The Cell side size.
void setRotationFlag(bool rotate)
Set if the KapmanItem should be rotated (set by theme flag RotateKapman).
This class manages the game main loop : it regularly checks the key press events, computes the charac...
void resumeAnim()
Resumes the KapmanItem animation.
This class is the graphical representation of a game Element.
int getNbColumns() const
Gets the number of columns of the Maze.
qreal getY() const
Gets the Element y-coordinate.
This class is the graphical representation of a Ghost.
GameScene(Game *p_game)
Creates a new GameScene instance.
This class is the graphical view of the Maze.
void update(qreal p_x, qreal p_y)
Updates the view coordinates.