}
pack=0;
- QSettings settings("paul","vexed");
- settings.beginGroup("save");
- QString savedTitle=settings.value("pack","Classic Levels").toString();
- int savedLevelNo=settings.value("level",0).toInt();
- loadPack(savedTitle,savedLevelNo);
+ loadPack(Settings().savedPackName(),Settings().savedLevelNo());
}
MainWindow::~MainWindow()
PlayField *pf=pack->levelAt(levelNo);
ui->playwidget->setPlayField(pf);
QString title;
- QTextStream(&title)<<pf->title<<" ("<<levelNo+1<<"/"<<pack->levels.size()<<")";
+ QTextStream(&title)<<pf->title<<" ("<<levelNo+1<<" of "<<pack->levels.size()<<")";
+ levelHiscore=Settings().getHighscore(pack->getTitle(),pf->title);
ui->levelTitle->setText(title);
+ movesChanged(0);
}
void MainWindow::loadPack(const QString& packName, int levelToLoad)
PlayField *pf=pack->levelAt(levelNo);
const QString sol=pf->getSolution();
int total=sol.length()/2;
- int score=hiscore();
+ //int score=Settings().getHighscore(pack->getTitle(),pf->title);
QString q;
QTextStream movesBanner(&q);
movesBanner<<moves<<"/"<<total;
- if(score!=9999)
- movesBanner<<"<b>"<<score<<"</b>";
-
+ if(levelHiscore!=HS::NO_SCORE)
+ movesBanner<<"(<b>"<<levelHiscore<<"</b>)";
ui->moves->setText(q);
}
void MainWindow::solved(int moves)
{
- hiscore(moves);
- loadNextLevel();
-}
-
-int MainWindow::hiscore(int score)
-{
- QSettings settings("paul","vexed");
PlayField *pf=pack->levelAt(levelNo);
- QString title=pf->title;
- settings.beginGroup("score");
- settings.beginGroup(pack->getTitle());
- QString saved=settings.value(title,"9999").toString();
- bool ok;
- int savedMoves=saved.toInt(&ok);
- if(!ok) savedMoves=9999;
- if(score == -1)
- return savedMoves;
- if(score<savedMoves)
- settings.setValue(title,score);
- return score;
+ Settings().saveHiscore(pack->getTitle(),pf->title, moves);
+ loadNextLevel();
}
void MainWindow::openPreferences()
// TODO: save playfield (and undo?)
void MainWindow::saveState()
{
- QSettings settings("paul","vexed");
- settings.beginGroup("save");
- settings.setValue("pack",pack->getTitle());
- settings.setValue("level",levelNo);
+ Settings().saveGame(pack->getTitle(),levelNo);
+}
+
+void MainWindow::loadNextLevel()
+{
+ if(levelNo<(pack->size()-1))
+ {
+ levelNo++;
+ loadLevel();
+ }
}
#include <QMainWindow>
#include "levelpack.h"
+#include "settings.h"
namespace Ui {
class MainWindow;
protected:
LevelPack *pack;
int levelNo;
+ int levelHiscore;
QList<QString> packNames;
void changeEvent(QEvent *e);
- // get or set hiscore for current level
- int hiscore(int score=-1);
public slots:
void reorient();
void solved(int moves);
void howToPlay();
- void loadNextLevel()
- {
- if(levelNo<(pack->size()-1))
- {
- levelNo++;
- loadLevel();
- }
- }
+ void loadNextLevel();
void loadPrevLevel()
{
if(levelNo>0)
<x>9</x>
<y>9</y>
<width>761</width>
- <height>401</height>
+ <height>452</height>
</rect>
</property>
<layout class="QVBoxLayout" name="mainLayout">
</property>
<property name="minimumSize">
<size>
- <width>340</width>
- <height>272</height>
+ <width>450</width>
+ <height>360</height>
</size>
</property>
<property name="maximumSize">
<size>
- <width>340</width>
- <height>272</height>
+ <width>450</width>
+ <height>360</height>
</size>
</property>
<property name="palette">
<sender>playwidget</sender>
<signal>solved(int)</signal>
<receiver>MainWindow</receiver>
- <slot>loadNextLevel()</slot>
+ <slot>solved(int)</slot>
<hints>
<hint type="sourcelabel">
<x>177</x>
<slot>loadPrevLevel()</slot>
<hints>
<hint type="sourcelabel">
- <x>684</x>
- <y>172</y>
+ <x>697</x>
+ <y>227</y>
</hint>
<hint type="destinationlabel">
<x>553</x>
<slot>loadNextLevel()</slot>
<hints>
<hint type="sourcelabel">
- <x>747</x>
- <y>173</y>
+ <x>765</x>
+ <y>227</y>
</hint>
<hint type="destinationlabel">
<x>515</x>
<slot>loadLevel()</slot>
<hints>
<hint type="sourcelabel">
- <x>722</x>
- <y>170</y>
+ <x>731</x>
+ <y>227</y>
</hint>
<hint type="destinationlabel">
<x>584</x>
<slot>undo()</slot>
<hints>
<hint type="sourcelabel">
- <x>704</x>
- <y>208</y>
+ <x>765</x>
+ <y>259</y>
</hint>
<hint type="destinationlabel">
<x>321</x>
<slot>openPreferences()</slot>
<slot>howToPlay()</slot>
<slot>reorient()</slot>
+ <slot>solved(int)</slot>
</slots>
</ui>
#
#-------------------------------------------------
-QT += core gui
+QT += core gui svg
TARGET = qexed
TEMPLATE = app
levelpack.cpp \
iconset.cpp \
preferences.cpp \
- howtoplay.cpp
+ howtoplay.cpp \
+ settings.cpp
HEADERS += mainwindow.h \
playfield.h \
levelpack.h \
iconset.h \
preferences.h \
- howtoplay.h
+ howtoplay.h \
+ settings.h
FORMS += mainwindow.ui \
preferences.ui \
--- /dev/null
+#include "settings.h"
+#include <QtCore>
+
+Settings::Settings():QSettings("paul","vexed")
+{
+}
+
+void Settings::saveHiscore(const QString &packName, const QString &levelName, int score)
+{
+ hiscore(packName, levelName, score);
+}
+
+int Settings::getHighscore(const QString &packName, const QString &levelName)
+{
+ return hiscore(packName, levelName);
+}
+
+void Settings::saveGame(const QString &packName, int levelNo)
+{
+ beginGroup("save");
+ setValue("pack",packName);
+ setValue("level",levelNo);
+}
+QString Settings::savedPackName()
+{
+ beginGroup("save");
+ QString packName=value("pack","Classic Levels").toString();
+ return packName;
+}
+int Settings::savedLevelNo()
+{
+ beginGroup("save");
+ int levelNo=value("level",0).toInt();
+ return levelNo;
+}
+int Settings::hiscore(const QString &packName, const QString &levelName,int score)
+{
+
+ beginGroup("score");
+ beginGroup(packName);
+ QString saved=value(levelName,HS::NO_SCORE).toString();
+ bool ok;
+ int savedMoves=saved.toInt(&ok);
+ if(!ok)
+ savedMoves=HS::NO_SCORE;
+ if(score == -1)
+ {
+ return savedMoves;
+ }
+ if(score<savedMoves)
+ setValue(levelName,score);
+ return score;
+}
--- /dev/null
+#ifndef SETTINGS_H
+#define SETTINGS_H
+#include <QSettings>
+
+namespace HS
+{
+ const int NO_SCORE=9999;
+}
+class Settings : QSettings
+{
+public:
+ Settings();
+ void saveHiscore(const QString &packName, const QString &levelName, int score);
+ int getHighscore(const QString &packName, const QString &levelName);
+ void saveGame(const QString &packName, int levelNo);
+ QString savedPackName();
+ int savedLevelNo();
+private:
+ int hiscore(const QString &packName, const QString &levelName,int score=-1);
+};
+
+#endif // SETTINGS_H