added Settings function. The best score is saved on disk

master
Qiaoyong Zhong 11 years ago
parent 6bd460f88c
commit 8f2378ada1

@ -3,7 +3,8 @@ TEMPLATE = app
QT += qml quick widgets QT += qml quick widgets
SOURCES += main.cpp \ SOURCES += main.cpp \
myclass.cpp myclass.cpp \
settings.cpp
lupdate_only { lupdate_only {
SOURCES += qml/main.qml \ SOURCES += qml/main.qml \
@ -23,6 +24,7 @@ RC_ICONS = 2048.ico # On Windows
ICON = 2048.ico # On Mac OSX ICON = 2048.ico # On Mac OSX
HEADERS += \ HEADERS += \
myclass.h myclass.h \
settings.h
TRANSLATIONS = 2048-qt_zh_CN.ts TRANSLATIONS = 2048-qt_zh_CN.ts

@ -4,6 +4,7 @@
#include <QTranslator> #include <QTranslator>
#include <QDebug> #include <QDebug>
#include "myclass.h" #include "myclass.h"
#include "settings.h"
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
@ -18,11 +19,16 @@ int main(int argc, char *argv[])
app.installTranslator(&translator); app.installTranslator(&translator);
QQmlApplicationEngine engine; QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:///qml/main.qml")));
MyClass myClass;
// Access C++ object "myClass" from QML as "myClass" // Access C++ object "myClass" from QML as "myClass"
MyClass myClass;
engine.rootContext()->setContextProperty("myClass", &myClass); engine.rootContext()->setContextProperty("myClass", &myClass);
// Access C++ object "settings" from QML as "settings"
Settings settings(0, "xiaoyong", "2048-Qt");
engine.rootContext()->setContextProperty("settings", &settings);
engine.load(QUrl(QStringLiteral("qrc:///qml/main.qml")));
return app.exec(); return app.exec();
} }

@ -1,5 +1,6 @@
var score = 0; var score = 0;
var bestScore = 0; var bestScore = settings.value("bestScore", 0);
var gridSize = 4; var gridSize = 4;
var cellValues; var cellValues;
var tileItems = []; var tileItems = [];
@ -9,6 +10,7 @@ var labels = "2048";
var labelFunc; var labelFunc;
var targetLevel = 11; var targetLevel = 11;
var checkTargetFlag = true; var checkTargetFlag = true;
var tileComponent = Qt.createComponent("Tile.qml");
switch (labels) { switch (labels) {
case "2048": case "2048":
@ -51,6 +53,13 @@ function startupFunction() {
createNewTileItems(true); createNewTileItems(true);
updateScore(0); updateScore(0);
addScoreText.parent = scoreBoard.itemAt(0); addScoreText.parent = scoreBoard.itemAt(0);
// Save the currently achieved best score
if (bestScore > settings.value("bestScore", 0)) {
console.log("Updating new high score...");
settings.setValue("bestScore", bestScore);
}
console.log("Started a new game"); console.log("Started a new game");
} }
@ -339,13 +348,11 @@ function maxTileValue() {
} }
function createTileObject(ind, n, isStartup) { function createTileObject(ind, n, isStartup) {
var component;
var tile; var tile;
var sty = computeTileStyle(n); var sty = computeTileStyle(n);
var tileText = labelFunc(n); var tileText = labelFunc(n);
component = Qt.createComponent("Tile.qml"); tile = tileComponent.createObject(tileGrid, {"x": cells.itemAt(ind).x, "y": cells.itemAt(ind).y, "color": sty.bgColor, "tileColor": sty.fgColor, "tileFontSize": sty.fontSize, "tileText": tileText});
tile = component.createObject(tileGrid, {"x": cells.itemAt(ind).x, "y": cells.itemAt(ind).y, "color": sty.bgColor, "tileColor": sty.fgColor, "tileFontSize": sty.fontSize, "tileText": tileText});
if (! isStartup) { if (! isStartup) {
tile.runNewTileAnim = true; tile.runNewTileAnim = true;
} }
@ -423,3 +430,11 @@ function moveMergeTilesUpDown(i, v, v2, indices, up) {
} }
} }
} }
function cleanUpAndQuit() {
if (bestScore > settings.value("bestScore", 0)) {
console.log("Updating new high score...");
settings.setValue("bestScore", bestScore);
}
Qt.quit();
}

@ -22,7 +22,10 @@ Rectangle {
font.bold: true font.bold: true
anchors.centerIn: parent anchors.centerIn: parent
Behavior on text { Behavior on text {
PropertyAnimation { PropertyAnimation { target: tileContainer
property: "opacity"
from: 0.5
to: 1
duration: moveAnimTime duration: moveAnimTime
} }
} }

@ -27,7 +27,7 @@ ApplicationWindow {
MenuItem { MenuItem {
text: qsTr("Exit") text: qsTr("Exit")
shortcut: "Ctrl+Q" shortcut: "Ctrl+Q"
onTriggered: Qt.quit(); onTriggered: MyScript.cleanUpAndQuit();
} }
} }
Menu { Menu {
@ -201,9 +201,7 @@ ApplicationWindow {
onAccepted: { onAccepted: {
MyScript.startupFunction(); MyScript.startupFunction();
} }
onRejected: { onRejected: MyScript.cleanUpAndQuit();
Qt.quit();
}
} }
MessageDialog { MessageDialog {
@ -222,6 +220,7 @@ ApplicationWindow {
} }
} }
Component.onCompleted: MyScript.startupFunction()
} }
Component.onCompleted: MyScript.startupFunction();
} }

@ -0,0 +1,17 @@
#include "settings.h"
Settings::Settings(QObject *parent, const QString &organization, const QString &application) :
QObject(parent), settings_(new QSettings(organization, application)) {
}
Settings::~Settings() {
delete settings_;
}
void Settings::setValue(const QString &key, const QVariant &value) {
settings_->setValue(key, value);
}
QVariant Settings::value(const QString &key, const QVariant &defaultValue) const {
return settings_->value(key, defaultValue);
}

@ -0,0 +1,26 @@
#ifndef SETTINGS_H
#define SETTINGS_H
#include <QObject>
#include <QSettings>
class Settings : public QObject
{
Q_OBJECT
public:
explicit Settings(QObject *parent = 0, const QString &organization = QString(), const QString &application = QString());
~Settings();
Q_INVOKABLE void setValue(const QString &key, const QVariant &value);
Q_INVOKABLE QVariant value(const QString &key, const QVariant &defaultValue = QVariant()) const;
signals:
public slots:
private:
QSettings *settings_;
};
#endif // SETTINGS_H
Loading…
Cancel
Save