SVN commit 1017936 by mkraus: show points of the players after a round is finished M +67 -50 game.cpp M +119 -69 gamescene.cpp M +11 -1 gamescene.h --- trunk/playground/games/granatier/src/game.cpp #1017935:1017936 @@ -439,42 +439,72 @@ } } -void Game::keyPressEvent(QKeyEvent* p_event) { - // At the beginning or when paused, we start the timer when a key is pressed - if (!m_timer->isActive()) { - // If paused - if (m_state == PAUSED_UNLOCKED) { - switchPause(); - } else if (m_state == RUNNING) { // At the game beginning - // Start the game - m_timer->start(); - emit(gameStarted()); - } - } - // Behaviour when the game has begun - switch (p_event->key()) { - case Qt::Key_P: - case Qt::Key_Escape: - switchPause(); +void Game::keyPressEvent(QKeyEvent* p_event) +{ + // At the beginning or when paused, we start the timer when a key is pressed + if (!m_timer->isActive()) + { + if(p_event->key() == Qt::Key_Space) + { + // If paused + if (m_state == PAUSED_UNLOCKED) + { + switchPause(); + } + else if (m_state == RUNNING) // At the game beginning + { + // Start the game + m_timer->start(); + emit(gameStarted()); + } + else if (m_state == PAUSED_LOCKED) + { + m_gameScene->cleanUp(); + cleanUp(); + init(); + m_gameScene->init(); + for(int i = 0; i < m_players.length(); i++) + { + m_players[i]->resurrect(); + if (m_players[i]->points() >= m_winPoints) + { + m_gameOver = true; + m_strWinner = m_players[i]->getImageId(); + emit(gameOver(true)); + return; + } + } + } + } + return; + } + // Behaviour when the game has begun + switch (p_event->key()) + { + case Qt::Key_P: + case Qt::Key_Escape: + switchPause(); return; - case Qt::Key_E: - // Cheat code to get one more life - if (p_event->modifiers() == (Qt::AltModifier | Qt::ControlModifier | Qt::ShiftModifier)) { - //m_lives++; - m_isCheater = true; - emit(dataChanged(LivesInfo)); - } + case Qt::Key_E: + // Cheat code to get one more life + if (p_event->modifiers() == (Qt::AltModifier | Qt::ControlModifier | Qt::ShiftModifier)) + { + //m_lives++; + m_isCheater = true; + emit(dataChanged(LivesInfo)); + } return; - case Qt::Key_N: - // Cheat code to go to the next level - if (p_event->modifiers() == (Qt::AltModifier | Qt::ControlModifier | Qt::ShiftModifier)) { - m_isCheater = true; - nextLevel(); - } + case Qt::Key_N: + // Cheat code to go to the next level + if (p_event->modifiers() == (Qt::AltModifier | Qt::ControlModifier | Qt::ShiftModifier)) + { + m_isCheater = true; + nextLevel(); + } return; - default: - break; - } + default: + break; + } for(int i = 0; i < m_players.size(); i++) { @@ -569,23 +599,10 @@ { m_players[nIndex]->addPoint(); } - if (m_players[nIndex]->points() >= m_winPoints) - { - m_gameOver = true; - m_strWinner = m_players[nIndex]->getImageId(); - emit(gameOver(true)); - } - else - { - m_gameScene->cleanUp(); - cleanUp(); - init(); - m_gameScene->init(); - for(int i = 0; i < m_players.length(); i++) - { - m_players[i]->resurrect(); - } - } + + pause(true); + m_gameScene->showPoints(m_winPoints); + } void Game::ghostDeath(Ghost* p_ghost) { --- trunk/playground/games/granatier/src/gamescene.cpp #1017935:1017936 @@ -25,28 +25,29 @@ #include #include -GameScene::GameScene(Game* p_game) : m_game(p_game) { - connect(p_game, SIGNAL(levelStarted(bool)), SLOT(intro(bool))); - connect(p_game, SIGNAL(gameStarted()), this, SLOT(start())); - connect(p_game, SIGNAL(pauseChanged(bool, bool)), this, SLOT(setPaused(bool, bool))); - connect(p_game, SIGNAL(elementEaten(qreal, qreal)), this, SLOT(hideElement(qreal, qreal))); - connect(p_game, SIGNAL(bonusOn()), this, SLOT(displayBonus())); - connect(p_game, SIGNAL(dataChanged(Game::InformationTypes)), this, SLOT(updateInfo(Game::InformationTypes))); +GameScene::GameScene(Game* p_game) : m_game(p_game) +{ + connect(p_game, SIGNAL(levelStarted(bool)), SLOT(intro(bool))); + connect(p_game, SIGNAL(gameStarted()), this, SLOT(start())); + connect(p_game, SIGNAL(pauseChanged(bool, bool)), this, SLOT(setPaused(bool, bool))); + connect(p_game, SIGNAL(elementEaten(qreal, qreal)), this, SLOT(hideElement(qreal, qreal))); + connect(p_game, SIGNAL(bonusOn()), this, SLOT(displayBonus())); + connect(p_game, SIGNAL(dataChanged(Game::InformationTypes)), this, SLOT(updateInfo(Game::InformationTypes))); connect(p_game, SIGNAL(bombCreated(Bomb*)), this, SLOT(createBombItem(Bomb*))); - // Connection between Game and GameScene for the display of won points when a bonus or a ghost is eaten - connect(p_game, SIGNAL(pointsToDisplay(long, qreal, qreal)), this, SLOT(displayPoints(long, qreal, qreal))); + // Connection between Game and GameScene for the display of won points when a bonus or a ghost is eaten + connect(p_game, SIGNAL(pointsToDisplay(long, qreal, qreal)), this, SLOT(displayPoints(long, qreal, qreal))); - // Set the pixmap cache limit to improve performance - setItemIndexMethod(NoIndex); - m_cache = new KPixmapCache("granatier_cache"); - m_cache->setCacheLimit(3 * 1024); + // Set the pixmap cache limit to improve performance + setItemIndexMethod(NoIndex); + m_cache = new KPixmapCache("granatier_cache"); + m_cache->setCacheLimit(3 * 1024); - // Load the SVG file - m_renderer = new KSvgRenderer(); - loadTheme(); + // Load the SVG file + m_renderer = new KSvgRenderer(); + loadTheme(); - // Create the PlayerItems + // Create the PlayerItems and the points labels QList players = p_game->getPlayers(); KapmanItem* kapmanItem; for(int i = 0; i < players.size(); i++) @@ -62,43 +63,52 @@ m_playerItems.append(kapmanItem); connect (kapmanItem, SIGNAL(bonusItemTaken(ElementItem*)), this, SLOT(removeBonusItem(ElementItem*))); + + m_playerPointsLabels.append(new QGraphicsTextItem(players[i]->getImageId())); + m_playerPointsLabels.last()->setFont(QFont("Helvetica", 15, QFont::Bold, false)); + m_playerPointsLabels.last()->setDefaultTextColor(QColor("#FFFF00")); + m_playerPointsLabels.last()->setZValue(1001); } // Create the labels background m_labelBackground = new QGraphicsRectItem(); m_labelBackground->setBrush(QBrush(QColor(0,0,0,175))); m_labelBackground->setZValue(1000); - // Create the introduction labels - m_introLabel = new QGraphicsTextItem(i18n("GET READY !!!")); - m_introLabel->setFont(QFont("Helvetica", 25, QFont::Bold, false)); - m_introLabel->setDefaultTextColor(QColor("#FFFF00")); - m_introLabel->setZValue(1001); - m_introLabel2 = new QGraphicsTextItem(i18n("Press any arrow key to start")); - m_introLabel2->setFont(QFont("Helvetica", 15, QFont::Bold, false)); - m_introLabel2->setDefaultTextColor(QColor("#FFFF00")); - m_introLabel2->setZValue(1001); - // Create the new level label - m_newLevelLabel = new QGraphicsTextItem(); - m_newLevelLabel->setFont(QFont("Helvetica", 35, QFont::Bold, false)); - m_newLevelLabel->setDefaultTextColor(QColor("#FFFF00")); - m_newLevelLabel->setZValue(1001); - // Create the pause label - m_pauseLabel = new QGraphicsTextItem(i18n("PAUSED")); - m_pauseLabel->setFont(QFont("Helvetica", 35, QFont::Bold, false)); - m_pauseLabel->setDefaultTextColor(QColor("#FFFF00")); - m_pauseLabel->setZValue(1001); - // Create the score label - m_scoreLabel = new QGraphicsTextItem(); - m_scoreLabel->setFont(QFont("Helvetica", 15, QFont::Bold, false)); - m_scoreLabel->setDefaultTextColor(QColor("#FFFFFF")); - // Create the lives label - m_livesLabel = new QGraphicsTextItem(); - m_livesLabel->setFont(QFont("Helvetica", 15, QFont::Bold, false)); - m_livesLabel->setDefaultTextColor(QColor("#FFFFFF")); - // Create the level label - m_levelLabel = new QGraphicsTextItem(); - m_levelLabel->setFont(QFont("Helvetica", 15, QFont::Bold, false)); - m_levelLabel->setDefaultTextColor(QColor("#FFFFFF")); + // Create the introduction labels + m_introLabel = new QGraphicsTextItem(i18n("GET READY !!!")); + m_introLabel->setFont(QFont("Helvetica", 25, QFont::Bold, false)); + m_introLabel->setDefaultTextColor(QColor("#FFFF00")); + m_introLabel->setZValue(1001); + m_introLabel2 = new QGraphicsTextItem(i18n("Press Space to start")); + m_introLabel2->setFont(QFont("Helvetica", 15, QFont::Bold, false)); + m_introLabel2->setDefaultTextColor(QColor("#FFFF00")); + m_introLabel2->setZValue(1001); + m_introLabel3 = new QGraphicsTextItem(i18n("Press Space to continue ...")); + m_introLabel3->setFont(QFont("Helvetica", 15, QFont::Bold, false)); + m_introLabel3->setDefaultTextColor(QColor("#FFFF00")); + m_introLabel3->setZValue(1001); + // Create the new level label + m_newLevelLabel = new QGraphicsTextItem(); + m_newLevelLabel->setFont(QFont("Helvetica", 35, QFont::Bold, false)); + m_newLevelLabel->setDefaultTextColor(QColor("#FFFF00")); + m_newLevelLabel->setZValue(1001); + // Create the pause label + m_pauseLabel = new QGraphicsTextItem(i18n("PAUSED")); + m_pauseLabel->setFont(QFont("Helvetica", 35, QFont::Bold, false)); + m_pauseLabel->setDefaultTextColor(QColor("#FFFF00")); + m_pauseLabel->setZValue(1001); + // Create the score label + m_scoreLabel = new QGraphicsTextItem(); + m_scoreLabel->setFont(QFont("Helvetica", 15, QFont::Bold, false)); + m_scoreLabel->setDefaultTextColor(QColor("#FFFFFF")); + // Create the lives label + m_livesLabel = new QGraphicsTextItem(); + m_livesLabel->setFont(QFont("Helvetica", 15, QFont::Bold, false)); + m_livesLabel->setDefaultTextColor(QColor("#FFFFFF")); + // Create the level label + m_levelLabel = new QGraphicsTextItem(); + m_levelLabel->setFont(QFont("Helvetica", 15, QFont::Bold, false)); + m_levelLabel->setDefaultTextColor(QColor("#FFFFFF")); // Display each PlayerItem for (int i = 0; i < m_playerItems.size(); i++) @@ -106,17 +116,17 @@ addItem(m_playerItems[i]); } - // Initialize the information labels (score, lives and label) - updateInfo(Game::AllInfo); - // Display the score label - //addItem(m_scoreLabel); - //m_scoreLabel->setPos(Cell::SIZE, height() + Cell::SIZE); - // Display the lives label - //addItem(m_livesLabel); - //m_livesLabel->setPos(width() - m_livesLabel->boundingRect().width() - 20 , height() - Cell::SIZE - m_livesLabel->boundingRect().height() / 2); - // Display the level label - //addItem(m_levelLabel); - //m_levelLabel->setPos((width() - m_levelLabel->boundingRect().width()) / 2 , height() - Cell::SIZE - m_levelLabel->boundingRect().height() / 2); + // Initialize the information labels (score, lives and label) + updateInfo(Game::AllInfo); + // Display the score label + //addItem(m_scoreLabel); + //m_scoreLabel->setPos(Cell::SIZE, height() + Cell::SIZE); + // Display the lives label + //addItem(m_livesLabel); + //m_livesLabel->setPos(width() - m_livesLabel->boundingRect().width() - 20 , height() - Cell::SIZE - m_livesLabel->boundingRect().height() / 2); + // Display the level label + //addItem(m_levelLabel); + //m_levelLabel->setPos((width() - m_levelLabel->boundingRect().width()) / 2 , height() - Cell::SIZE - m_levelLabel->boundingRect().height() / 2); init(); } @@ -233,11 +243,17 @@ for (int i = 0; i < m_playerItems.size(); i++) { + if(items().contains(m_playerItems[i])) + { + removeItem(m_playerItems[i]); + } delete m_playerItems[i]; + delete m_playerPointsLabels[i]; } delete m_introLabel; delete m_introLabel2; + delete m_introLabel3; delete m_newLevelLabel; delete m_scoreLabel; delete m_livesLabel; @@ -251,7 +267,6 @@ void GameScene::cleanUp() { - setPaused (true, false); // remove the arena items for (int i = 0; i < m_game->getArena()->getNbRows();++i) { @@ -319,8 +334,43 @@ } delete[] m_blockItems; delete[] m_bonusItems; + + // remove the player points labels from the gamescene + for (int i = 0; i < m_playerPointsLabels.size(); i++) + { + if(items().contains(m_playerPointsLabels[i])) + { + removeItem(m_playerPointsLabels[i]); + } + } + if(items().contains(m_introLabel3)) + { + removeItem(m_introLabel3); + } } +void GameScene::showPoints(int p_winPoints) +{ + QList players = m_game->getPlayers(); + for(int i = 0; i < players.length(); i++) + { + // If the label was not displayed yet + if (!items().contains(m_playerPointsLabels[i])) + { + // Display the pause label + addItem(m_playerPointsLabels[i]); + } + m_playerPointsLabels[i]->setPlainText(QString("%1 %2").arg(players[i]->getImageId()).arg(QString(players[i]->points(), QChar('X')), -p_winPoints, QChar('O'))); + m_playerPointsLabels[i]->setPos((width() - m_playerPointsLabels[i]->boundingRect().width()) / 2, (height() - (players.length() - i) * m_playerPointsLabels[i]->boundingRect().height()) / 2); + } + + if (!items().contains(m_introLabel3)) + { + addItem(m_introLabel3); + } + m_introLabel3->setPos((width() - m_introLabel3->boundingRect().width()) / 2, (height() + m_introLabel3->boundingRect().height()) / 2); +} + Game* GameScene::getGame() const { return m_game; @@ -452,12 +502,12 @@ addItem(m_pauseLabel); } m_pauseLabel->setPos((width() - m_pauseLabel->boundingRect().width()) / 2, (height() - m_pauseLabel->boundingRect().height()) / 2); - if (!items().contains(m_labelBackground)) - { - addItem(m_labelBackground); - } - m_labelBackground->setRect(0, 0, width(), height()); } + if (!items().contains(m_labelBackground)) + { + addItem(m_labelBackground); + } + m_labelBackground->setRect(0, 0, width(), height()); // Stop player animation for (int i = 0; i < m_playerItems.size(); i++) { @@ -480,11 +530,11 @@ { removeItem(m_pauseLabel); } - if (items().contains(m_labelBackground)) - { - removeItem(m_labelBackground); - } } + if (items().contains(m_labelBackground)) + { + removeItem(m_labelBackground); + } // Resume player animation for (int i = 0; i < m_playerItems.size(); i++) { --- trunk/playground/games/granatier/src/gamescene.h #1017935:1017936 @@ -50,6 +50,9 @@ /** The PlayerItem of each Player to be drawn */ QList m_playerItems; + /** The PlayerItem of each Player to be drawn */ + QList m_playerPointsLabels; + /** The BombItem of each Bomb to be drawn */ QHash > m_bombItems; @@ -68,6 +71,7 @@ /** The labels to be displayed during the game */ QGraphicsTextItem* m_introLabel; QGraphicsTextItem* m_introLabel2; + QGraphicsTextItem* m_introLabel3; QGraphicsTextItem* m_newLevelLabel; QGraphicsTextItem* m_scoreLabel; QGraphicsTextItem* m_livesLabel; @@ -112,7 +116,13 @@ * Cleans class */ void cleanUp(); - + + /** + * Shows the labels with the points. + * @param p_winPoints the points needed to win the game + */ + void showPoints(int p_winPoints); + private slots: /**