aboutsummaryrefslogtreecommitdiffhomepage
path: root/qml/pages/Game.qml
diff options
context:
space:
mode:
Diffstat (limited to 'qml/pages/Game.qml')
-rw-r--r--qml/pages/Game.qml124
1 files changed, 124 insertions, 0 deletions
diff --git a/qml/pages/Game.qml b/qml/pages/Game.qml
new file mode 100644
index 0000000..8f95f58
--- /dev/null
+++ b/qml/pages/Game.qml
@@ -0,0 +1,124 @@
+import QtQuick 2.2
+import Sailfish.Silica 1.0
+import ".."
+
+Page {
+ property int bits: 0 // gets passed by previous page
+
+ id: page
+ allowedOrientations: Orientation.All
+
+ SilicaFlickable {
+ anchors.fill: parent
+ contentHeight: root.height
+
+ /*PullDownMenu {
+ MenuItem {
+ text: qsTr("Leaderboard")
+ onClicked: pageStack.push(Qt.resolvedUrl("LeaderBoard.qml"))
+ }
+ }*/
+
+ Column {
+ property int bits: page.bits
+ property var correct: new Array(bits)
+ property var matrix: new Array(Math.pow(bits + 1, 2))
+ property var start_time: 0
+
+ id: root
+ width: page.width
+ height: page.height
+ spacing: Theme.paddingLarge
+
+ PageHeader {
+ title: qsTr("Binary Fun")
+ }
+
+ function nearest(number) {
+ if (number % (bits + 1) === 0) {
+ return number
+ } else {
+ return number - (number % (bits + 1))
+ }
+ }
+
+ function check(index) {
+ root.matrix[index] ^= 1;
+ var near = nearest(index);
+ var current_score = parseInt(info_label.text.substr(0, info_label.text.indexOf('/')))
+
+ if (Number(root.matrix.slice(near, near + bits).join("")).toString() === (root.matrix[near + bits] >>> 0).toString(2)) {
+ correct[near / (bits + 1) - 1] = 1;
+ info_label.text = current_score + 1 + " / " + root.bits;
+ } else {
+ if (correct[near / (bits + 1) - 1] === 1) {
+ info_label.text = current_score - 1 + " / " + root.bits;
+ }
+
+ correct[near / (bits + 1) - 1] = 0;
+ }
+
+ if (correct.filter(function(i) { return i === 1 }).length === bits) {
+ info_label.text = "Yeeehaaw!";
+ timer_label.text = ((new Date().getTime() - start_time) / 1000) + "s - Not bad!"
+ timer.running = false;
+ new_game.visible = true;
+ }
+ }
+
+ Grid {
+ property int row: 0
+
+ id: grid
+ anchors.bottom: page.bottom
+ columns: root.bits + 1
+ rows: root.bits + 1
+ Repeater {
+ id: repeater
+ model: Math.pow(root.bits + 1, 2)
+ delegate: Bit {
+ bits: root.bits
+ index: modelData
+ width: page.width / (root.bits + 1)
+ }
+ }
+ }
+
+ Label {
+ id: info_label
+ text: "0 / " + root.bits
+ anchors.horizontalCenter: parent.horizontalCenter
+ // anchors.top: grid.bottom
+ anchors.bottom: page.bottom
+ }
+
+ Label {
+ id: timer_label
+ text: "0s"
+ anchors.horizontalCenter: parent.horizontalCenter
+ // anchors.top: won.bottom
+ anchors.bottom: page.bottom
+ }
+
+ Timer {
+ id: timer
+ interval: 1000
+ running: true
+ repeat: true
+ onTriggered: {
+ if (root.start_time === 0)
+ root.start_time = (new Date()).getTime();
+ timer_label.text = parseInt(timer_label.text.substr(0, timer_label.text.indexOf('s'))) + 1 + "s";
+ }
+ }
+
+ Button {
+ id: new_game
+ text: qsTr("Play again!")
+ visible: false
+ anchors.horizontalCenter: parent.horizontalCenter
+ onClicked: pageStack.replace(Qt.resolvedUrl("Game.qml"), {bits: root.bits})
+ }
+ }
+ }
+}