[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    playground/games/granatier/src
From:       Mathias Kraus <k.hias () gmx ! de>
Date:       2009-08-31 23:31:04
Message-ID: 1251761464.247936.32712.nullmailer () svn ! kde ! org
[Download RAW message or body]

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 <KGameTheme>
 #include <KLocale>
 
-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 <Kapman*> 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 <Kapman*> 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<KapmanItem*> m_playerItems;
         
+        /** The PlayerItem of each Player to be drawn */
+        QList<QGraphicsTextItem*> m_playerPointsLabels;
+        
         /** The BombItem of each Bomb to be drawn */
         QHash<BombItem*, QList<BombExplosionItem*> > 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:
 
 		/**


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic