--- /dev/null
+/**************************************************************************
+ Ghosts Overboard - a game for 'Meego 1.2 Harmattan'
+
+ Copyright (C) 2011 Heli Hyvättinen
+
+ This file is part of Ghosts Overboard
+
+ Ghosts Overboard is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+**************************************************************************/
+
+#include "levelset.h"
+#include <QSettings>
+#include <QDebug>
+
+Levelset::Levelset()
+{
+
+}
+
+Levelset::Levelset(QString name, QList<Level> levelList)
+{
+ name_ = name;
+
+ levels_ = levelList;
+}
+
+
+bool Levelset::isValid()
+{
+ if (name_.isEmpty())
+ return false;
+
+ if (levels_.isEmpty())
+ return false;
+
+ return true;
+}
+
+int Levelset::numberOfLevels()
+{
+ return levels_.length();
+}
+
+Level Levelset::getLevel(int index)
+{
+
+ return levels_.value(index); //Returns a default constructed Level if called with invalid index
+
+}
+
+int Levelset::getTotalHighScore()
+{
+ QSettings settings;
+ settings.beginGroup(name_);
+ return settings.value("TotalHighScore",900*1000*100).toInt();
+}
+
+void Levelset::setTotalHighScore(int highscore)
+{
+ QSettings settings;
+
+ settings.beginGroup(name_);
+ settings.setValue("TotalHighScore", highscore);
+
+}
+
+int Levelset::getLevelHighScore(int index)
+{
+ QSettings settings;
+ QString group = name_;
+ group.append("/LevelHighScore");
+ settings.beginGroup(group);
+
+ qDebug() << group;
+
+ return settings.value(QString(index),900*1000).toInt();
+}
+
+void Levelset::setLevelHighScore(int index, int highScore)
+{
+ QSettings settings;
+ QString group = name_;
+ group.append("/LevelHighScore");
+ settings.beginGroup(group);
+
+ qDebug() << group;
+
+ settings.setValue(QString(index),highScore);
+}
--- /dev/null
+/**************************************************************************
+ Ghosts Overboard - a game for 'Meego 1.2 Harmattan'
+
+ Copyright (C) 2011 Heli Hyvättinen
+
+ This file is part of Ghosts Overboard
+
+ Ghosts Overboard is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+**************************************************************************/
+
+#ifndef LEVELSET_H
+#define LEVELSET_H
+
+#include "level.h"
+#include <QList>
+#include <QString>
+
+class Levelset
+{
+public:
+ Levelset();
+
+ Levelset(QString name, QList<Level> levelList);
+
+ bool isValid();
+
+ QString getName();
+
+ Level getLevel(int index);
+
+ int numberOfLevels();
+
+ int getTotalHighScore();
+
+ void setTotalHighScore(int highScore);
+
+ int getLevelHighScore(int index);
+
+ void setLevelHighScore(int index, int highScore);
+
+
+private:
+
+ QString name_;
+
+ QList<Level> levels_;
+
+};
+
+#endif // LEVELSET_H
//Setup the level list
+ QList<Level> levelList;
Level level1(5,10);
- levelList_.append(level1);
+ levelList.append(level1);
Level level2(5,10,2,50);
- levelList_.append(level2);
+ levelList.append(level2);
Level level3(5,15,2,50);
- levelList_.append(level3);
+ levelList.append(level3);
Level level4(5,15,4,50);
- levelList_.append(level4);
+ levelList.append(level4);
Level level5(5,15,5,100);
- levelList_.append(level5);
+ levelList.append(level5);
+
+ Levelset set ("Original",levelList);
+ levelset_ = set;
currentLevel_ = 0;
+ totalScore_ = 0;
+
//This ensures that nextlevel will not be called until its safe to delete the Ship object.
//Leaving out Qt::QueuedConnection or calling nextlevel directly instead of emitting the signal will CRASH
connect(this,SIGNAL(allGhostsPicked()),this,SLOT(nextLevel()),Qt::QueuedConnection);
createAboutBoxItems();
createVictoryItems();
+ createLevelCompletedItems();
+
//empty the list of moving items
connect(pOctopus,SIGNAL(droppingGhosts()),pShip,SLOT(dropAllGhosts()));
}
delete pPosition;
-
-
}
void SeaScene::setupMap(Level level)
if (pPausetextItem_)
pPausetextItem_->hide();
+ scoreCounter_.start();
+
autopauseTimer.start(); //Start counting towards autopause
}
}
// else qDebug() << "No pause text available";
+ levelScore_ += scoreCounter_.elapsed();
+
autopauseTimer.stop(); //No need to count toward autopause when already paused
}
}
{
pAboutBoxItem_->hide();
pPausetextItem_->show();
+ return;
}
}
+ //If the game is paused, check if the level completed item is shown
+
+ if (pLevelCompletedItem_)
+ {
+ if (pLevelCompletedItem_->isVisible())
+ {
+ pLevelCompletedItem_->hide();
+ restartLevel(); //Current level has already been set to the next one before showing the level completed item
+ pPauseAction_->setChecked(false); //unpause
+ return;
+ }
+ }
//If the game is paused, check if the victory item is being shown
if(pVictoryCongratulationsItem_)
}
}
+
//If the game is paused and no victory or about box, check if menu item was selected
QList<QGraphicsItem *> items = selectedItems();
void SeaScene::restartLevel()
{
- setupMap(levelList_.value(currentLevel_)); //value() returns default constructor Level if index is invalid, so no risk of crash
+
+ levelScore_ = 0;
+
+ setupMap(levelset_.getLevel(currentLevel_)); //getLevel() returns default constructor Level if index is invalid, so no risk of crash
+
+ scoreCounter_.start();
+
vibrationActivate(pVibrateAction_->isChecked()); //Vibration effects are lost without this
// qDebug() << pVibrateAction_->isChecked();
autopauseTimer.start(); //reset counting towards autopause
+
+
}
void SeaScene::nextLevel()
{
- currentLevel_++;
+ //get score for previous level
+ levelScore_ += scoreCounter_.elapsed();
+ totalScore_ += levelScore_;
+ int highscore = levelset_.getLevelHighScore(currentLevel_);
- if (levelList_.empty())
- setupMap(Level());
+ qDebug() << highscore;
+ QString scoretext;
- if ( currentLevel_ < levelList_.size() )
+ if (levelScore_ >= highscore)
{
- restartLevel();
+ scoretext = tr("<font size=\"7\" color = darkorange>Your time: %1.%2 s<br>Best time: %3.%4 s").arg(levelScore_/1000).arg((levelScore_%1000)/100).arg(highscore/1000).arg((highscore%1000)/100);
}
- else //Victory!
+ else //New high score!
+
+ {
+ scoretext = tr("<font size=\"7\" color = darkorange>Your time %1.%2 s is<br>the new best time!").arg(levelScore_/1000).arg((levelScore_%1000)/100);
+ levelset_.setLevelHighScore(currentLevel_,levelScore_);
+ }
+
+ //pause to show the highscore or victory screen
+
+ turnPauseOn();
+ pPausetextItem_->hide();
+
+
+ //Go to the next level if available
+ currentLevel_++;
+
+ if ( currentLevel_ < levelset_.numberOfLevels() )
{
- pPauseAction_->setChecked(true); //Pause the game while showing the victory dialog
+ pLevelCompletedItem_->setHtml(scoretext);
+ pLevelCompletedItem_->show();
+// restartLevel();
+ }
- pPausetextItem_->hide();
+ else //Victory!
+ {
+ int totalHighsore = levelset_.getTotalHighScore();
+ if (totalScore_ >= totalHighsore)
+ {
+ scoretext.append(tr("<br>Your total time: %1.%2 s<br>Best total time: %3.%4 s").arg(totalScore_/1000).arg((totalScore_%1000)/100).arg(totalHighsore/1000).arg((totalHighsore%1000)/100));
+ }
+ else //new total high score
+ {
+ scoretext.append(tr("<br>Your total time %1.%2 s is<br>the new best time").arg(totalScore_/1000).arg((totalScore_%1000)/100));
+ levelset_.setTotalHighScore(totalScore_);
+ }
+ pVictoryScoreItem_->setHtml(scoretext);
pVictoryCongratulationsItem_->show();
-
}
}
void SeaScene::restartGame()
{
currentLevel_ = 0;
+ totalScore_ = 0;
restartLevel();
}
pVictoryCongratulationsItem_ = new QGraphicsTextItem;
pVictoryCongratulationsItem_->setHtml("<font size=\"7\" color = darkorange> <b> Victory!");
pVictoryCongratulationsItem_->hide();
- pVictoryCongratulationsItem_->setPos(355,50);
+ pVictoryCongratulationsItem_->setPos(315,30);
pVictoryCongratulationsItem_->setZValue(1000);
addItem(pVictoryCongratulationsItem_);
QGraphicsTextItem * pTextItem = new QGraphicsTextItem(pVictoryCongratulationsItem_);
pTextItem->setHtml("<font size=\"7\" color = darkorange> Congratulations!");
- pTextItem->setPos(-50,100);
+ pTextItem->setPos(-50,80);
pTextItem->setZValue(1000);
QGraphicsTextItem * pMiddleTextItem = new QGraphicsTextItem(pVictoryCongratulationsItem_);
pMiddleTextItem->setHtml("<font size=\"7\" color = darkorange> You have saved all the ghosts.");
- pMiddleTextItem->setPos(-145,140);
+ pMiddleTextItem->setPos(-145,120);
+ pMiddleTextItem->setZValue(1000);
+
+
+ pVictoryScoreItem_ = new QGraphicsTextItem(pVictoryCongratulationsItem_);
+ pVictoryScoreItem_->setPos(-50,180);
pMiddleTextItem->setZValue(1000);
+ //Text is set at usetime!
QGraphicsTextItem * pLowestTextItem = new QGraphicsTextItem(pVictoryCongratulationsItem_);
pLowestTextItem->setHtml("<font size=\"7\" color = darkorange> Tap to play again");
- pLowestTextItem->setPos(-50,220);
+ pLowestTextItem->setPos(-50,360);
pLowestTextItem->setZValue(1000);
}
// pMinimizeItem_ = NULL; //Fremantle spesific
pAboutBoxItem_ = NULL;
+ pLevelCompletedItem_ = NULL;
+ pVictoryScoreItem_ = NULL;
+
}
void SeaScene::turnPauseOn()
{
pPauseAction_->setChecked(true);
}
+
+
+
+void SeaScene::createLevelCompletedItems()
+{
+ pLevelCompletedItem_ = new QGraphicsTextItem;
+ addItem(pLevelCompletedItem_);
+ pLevelCompletedItem_->setPos(240,100);
+ pLevelCompletedItem_->setZValue(1000);
+ pLevelCompletedItem_->hide();
+ //The text is set at usetime
+
+ QGraphicsTextItem * pTapForNextLevelItem = new QGraphicsTextItem(pLevelCompletedItem_);
+ pTapForNextLevelItem->setPos(-60,100);
+ pTapForNextLevelItem->setZValue(1000);
+ pTapForNextLevelItem->setHtml("<font size=\"7\" color = darkorange>Tap to start the next level");
+}