Merge branch 'levelstructure'
authorHeli Hyvättinen <heli.hyvattinen@kymp.net>
Tue, 5 Jul 2011 15:56:37 +0000 (18:56 +0300)
committerHeli Hyvättinen <heli.hyvattinen@kymp.net>
Tue, 5 Jul 2011 15:56:37 +0000 (18:56 +0300)
Conflicts:
mainwindow.cpp

Multiple levels now supported. 5 levels now.
"Restart game" added to the menu.

1  2 
ghostsoverboard.pro
mainwindow.cpp
mainwindow.h
seascene.cpp
seascene.h

diff --combined ghostsoverboard.pro
@@@ -5,7 -5,6 +5,7 @@@
  #-------------------------------------------------
  
  QT       += core gui
 +QT      += dbus
  
  TARGET = ghostsoverboard
  TEMPLATE = app
@@@ -19,7 -18,8 +19,8 @@@ SOURCES += main.cpp
      ship.cpp \
      screenlitkeeper.cpp \
      timercontrolledgraphicspixmapobject.cpp \
-     octopus.cpp
+     octopus.cpp \
+     level.cpp
  
  HEADERS  += mainwindow.h \
      orientationcontrolledgraphicspixmapobject.h \
@@@ -28,7 -28,8 +29,8 @@@
      ship.h \
      screenlitkeeper.h \
      timercontrolledgraphicspixmapobject.h \
-     octopus.h
+     octopus.h \
+     level.h
  
  CONFIG += mobility
  MOBILITY = sensors
diff --combined mainwindow.cpp
@@@ -59,20 -59,30 +59,37 @@@ MainWindow::MainWindow(QWidget *parent
      connect(pRestartLevelAction,SIGNAL(triggered()),this,SLOT(restartLevel()));
      menuBar()->addAction(pRestartLevelAction);
  
 +    QAction * pVibrateAction = new QAction(tr("Vibration effects"),this);
 +    pVibrateAction->setCheckable(true);
 +    addAction(pVibrateAction);
 +    connect(pVibrateAction,SIGNAL(triggered(bool)),pScene_,SLOT(vibrationActivate(bool)));
 +    menuBar()->addAction(pVibrateAction);
 +
  
      QAction * pAboutAction = new QAction(tr("About"),this);
      addAction(pAboutAction);
      connect(pAboutAction,SIGNAL(triggered()),this,SLOT(about()));
      menuBar()->addAction(pAboutAction);
  
+     QAction * pRestartGameAction = new QAction(tr("Restart game"),this);
+     addAction(pRestartGameAction);
+     connect(pRestartGameAction,SIGNAL(triggered()),this,SLOT(restartGame()));
+     menuBar()->addAction(pRestartGameAction);
+     Level level1(5,10);
+     levelList_.append(level1);
+     Level level2(5,10,2,50);
+     levelList_.append(level2);
+     Level level3(5,15,3,50);
+     levelList_.append(level3);
+     Level level4(5,15,5,50);
+     levelList_.append(level4);
+     Level level5(5,15,5,100);
+     levelList_.append(level5);
+     currentLevel_ = 0;
  
 +
      //the boundaries of the scene are set to match the size of the view window, which is not
      //available in the constructor --> timer needed
      QTimer::singleShot(100,this,SLOT(initializeBoundaries()));
@@@ -107,7 -117,7 +124,7 @@@ void MainWindow::initializeBoundaries(
  
  void MainWindow::restartLevel()
  {
-     pScene_->setupMap(5,10,5);
+     pScene_->setupMap(levelList_.at(currentLevel_));
  }
  
  void MainWindow::about()
  void MainWindow::nextLevel()
  {
  
-     //for now, just the handling of last level is implemented, and there is just one level
+     currentLevel_++;
+     if (levelList_.empty())
+         pScene_->setupMap(Level());
  
  
+     if ( currentLevel_ < levelList_.size() )
+     {
+         pScene_->setupMap(levelList_.at(currentLevel_));
+     }
+     else //Victory!
+     {
  
         QDialog* pVictoryDialog = new QDialog(this);
         pVictoryDialog->setWindowTitle(tr("You won!"));
  
          //Never mind if the user cancels the dialog: restart the game anyway
  
-        restartLevel();
+        restartGame();
+     }
  }
  
  bool MainWindow::event(QEvent *event)
  
   }
  
+ void MainWindow::restartGame()
+ {
+     currentLevel_ = 0;
+     pScene_->setupMap(levelList_.value(currentLevel_)); //value() returns default constructor Level, so no need to check if list empty
+ }
diff --combined mainwindow.h
@@@ -27,7 -27,7 +27,7 @@@
  #include <QGraphicsView>
  #include "orientationcontrolledgraphicspixmapobject.h"
  #include "seascene.h"
+ #include "level.h"
  
  class MainWindow : public QMainWindow
  {
@@@ -44,17 -44,17 +44,19 @@@ public slots
      void restartLevel();
      void about();
      void nextLevel();
+     void restartGame();
  
  
 +
  private:
  
  SeaScene * pScene_;
  QGraphicsView * pView_;
  QAction* pPauseAction_;
+ QList<Level> levelList_;
+ int currentLevel_;
  
 +
  };
  
  #endif // MAINWINDOW_H
diff --combined seascene.cpp
@@@ -53,7 -53,7 +53,7 @@@ SeaScene::SeaScene(QObject *parent) 
  
  }
  
- void SeaScene::setupMap(int ghosts, int rocks, int octopuses)
+ void SeaScene::setupMap(int ghosts, int rocks, int octopuses, int octopusSpeed)
  {
      //empty the map
  
              break;
  
      QPixmap octopusPixmap (":/pix/tursas.png");
-     Octopus * pOctopus = new Octopus(octopusPixmap,100);
+     Octopus * pOctopus = new Octopus(octopusPixmap,octopusSpeed);
      pOctopus->setData(0,"octopus");
      pOctopus->setPos(*pPosition);
      addItem(pOctopus);
      addItem(pShip);
      connect(pShip,SIGNAL(pickingGhost(QGraphicsItem*)),this, SLOT(removeGhost(QGraphicsItem*)) );
      connect(pShip,SIGNAL(droppingGhosts(int)),this,SLOT(ghostsDropped(int)));
 +    connect(this,SIGNAL(vibrationActivated(bool)),pShip,SLOT(setVibrationActivate(bool)));
      pShip->startMoving();
      movingItems_.append(pShip);
      connect(this,SIGNAL(pauseOn()),pShip,SLOT(stopMoving()));
      delete pPosition;
  }
  
+ void SeaScene::setupMap(Level level)
+ {
+     setupMap(level.getNumberOfGhosts(),level.getNumberOfRocks(),level.getNumberOfOctopuses(),level.getOctopusSpeed());
+ }
  
  void SeaScene::spreadGhosts(int ghosts)
  {
@@@ -309,8 -312,3 +313,8 @@@ void SeaScene::pause(bool paused
              screenLitKeeper_.keepScreenLit(false);
          }
  }
 +
 +void SeaScene::vibrationActivate(bool on)
 +{
 +    emit vibrationActivated(on);
 +}
diff --combined seascene.h
@@@ -3,6 -3,7 +3,7 @@@
  
  #include <QGraphicsScene>
  #include "screenlitkeeper.h"
+ #include "level.h"
  
  class SeaScene : public QGraphicsScene
  {
@@@ -15,7 -16,6 +16,7 @@@ signals
      void allGhostsPicked();
      void pauseOn();
      void pauseOff();
 +    void vibrationActivated(bool on);
  
  public slots:
  
@@@ -25,7 -25,9 +26,9 @@@
      @param rocks the number of rocks to be placed on the map
      @param octopuses number of octopuses to be placed on the map
      */
-     void setupMap(int ghosts, int rocks, int octopuses);
+     void setupMap(int ghosts, int rocks, int octopuses, int octopusSpeed);
+     void setupMap(Level level);
  
      void spreadGhosts(int ghosts);
  
@@@ -35,8 -37,6 +38,8 @@@
  
      void pause (bool paused);
  
 +    void vibrationActivate(bool);
 +
  protected:
  
      /*! Gives a pointer to a random position if a free one is found. Otherwise returns NULL.