Warning, /education/marble/examples/cpp/marble-game/CountryByShape.qml is written in an unsupported language. File is not indexed.
0001 // SPDX-License-Identifier: LGPL-2.1-or-later
0002 //
0003 // SPDX-FileCopyrightText: 2014 Abhinav Gangwar <abhgang@gmail.com>
0004 //
0005
0006
0007 import QtQuick 2.0
0008 import QtQuick.Controls 1.2
0009 import QtQuick.Controls.Styles 1.2
0010
0011 Rectangle {
0012
0013 id: countryByShape
0014 objectName: "countryByShape"
0015
0016 color: "#D6ADFF"
0017
0018 signal nextQuestionRequested()
0019 signal gameQuitRequested()
0020 signal questionsTimeout()
0021
0022 property int panelWidth: 200
0023 property int panelHeight: 600
0024
0025 width: panelWidth
0026 height: panelHeight
0027
0028 // No. of radio buttons in Column element
0029 property real nItemsInColumn: 4
0030
0031 // Button Width and Height
0032 property real labelWidth: countryByShape.panelWidth*4/5
0033 property real labelHeight: countryByShape.panelHeight/16
0034
0035 // Result Display
0036 property bool showResult: false
0037
0038 // Display the button to show correct Answer
0039 property bool showCorrectAnswer: false
0040 property string answerToShow: qsTr("View Answer")
0041
0042 property string result: qsTr("Undetermined")
0043 property int score: 0
0044 property bool scoreDetermined: false
0045 property int totalQuestionsAsked: 0 // Total no. of questions that have been asked to user
0046 property int maximumQuestions: 0
0047
0048 //property string userAnswer: "Undetermined"
0049 property string correctAnswer: qsTr("Undetermined")
0050
0051 Rectangle {
0052 id: gameDescription
0053 height: panelHeight*2/( 3 * ( nItemsInColumn + 2 ) )
0054 width: panelWidth
0055 anchors.top: parent.top
0056 anchors.topMargin: 5
0057 anchors.bottomMargin: 5
0058 color: "#D6ADFF"
0059
0060 Rectangle {
0061 id: gameName
0062 width: parent.width/2
0063 height: parent.height
0064 anchors.left: parent.left
0065 anchors.leftMargin: 5
0066
0067 border.width: 1
0068 border.color: "#000000"
0069 radius: 6
0070 smooth: true
0071 color: "#696969"
0072
0073 Text {
0074 width: parent.width
0075 wrapMode: Text.WordWrap
0076 horizontalAlignment: Text.AlignHCenter
0077 anchors.verticalCenter: parent.verticalCenter
0078 color: "white"
0079
0080 text: qsTr("Identify The Highlighted Country")
0081 }
0082 }
0083
0084 CustomButton {
0085 id: quitGameButton
0086 buttonWidth: parent.width/2
0087 buttonHeight: parent.height
0088
0089 normalColor: "#696969"
0090 borderColor: "#000000"
0091
0092 labelColor: "white"
0093 labelText: qsTr("Quit Game")
0094 labelSize: parent.width/15
0095
0096 anchors.left: gameName.right
0097 anchors.leftMargin: 5
0098
0099 anchors.top: parent.top
0100 anchors.right: parent.right
0101 anchors.rightMargin: 5
0102
0103 onButtonClick: {
0104 resetOptions();
0105 gameQuitRequested();
0106 }
0107 }
0108 }
0109
0110 Column {
0111 id: buttonArea
0112 anchors.top: gameDescription.bottom
0113 anchors.topMargin: 20
0114 spacing: 5
0115
0116 ExclusiveGroup { id: group }
0117 CustomRadioButton {
0118 id: answerOption1
0119 radioButtonWidth: labelWidth
0120 radioButtonHeight: labelHeight
0121
0122 normalColor: "#A9A9A9"
0123 labelColor: "white"
0124
0125 labelText: qsTr("Option1")
0126 buttonGroup: group
0127
0128 onRadioButtonClick: {
0129 showResult = true;
0130 if ( labelText == correctAnswer ) {
0131 if ( timer.running == false ) {
0132 timer.start();
0133 }
0134
0135 result = "<font face=\"verdana\" size=\"4\" color=\"#00ff00\"><b>Hooray !! Right Answer</b></font>";
0136 if ( !scoreDetermined &&
0137 !showCorrectAnswer )
0138 {
0139 ++score;
0140 scoreDetermined = true;
0141 }
0142 }
0143 else {
0144 /**
0145 * Stop timer ( so that the game
0146 * doesn't switch to next question
0147 * automatically ) and let the user
0148 * choose whether he/she wants
0149 * to see the correct answer.
0150 **/
0151 if ( timer.running == true ) {
0152 timer.stop();
0153 }
0154
0155 result = "<p align=\"center\"> <font face=\"verdana\" size=\"4\" color=\"#ff0000\"><b>Oops, Wrong Answer</b></font> </p>";
0156 showCorrectAnswer = true
0157 }
0158 }
0159 }
0160
0161 CustomRadioButton {
0162 id: answerOption2
0163 radioButtonWidth: labelWidth
0164 radioButtonHeight: labelHeight
0165
0166 normalColor: "#A9A9A9"
0167 labelColor: "white"
0168
0169 labelText: qsTr("Option2")
0170 buttonGroup: group
0171
0172 onRadioButtonClick: {
0173 showResult = true;
0174 if ( labelText == correctAnswer ) {
0175 if ( timer.running == false ) {
0176 timer.start();
0177 }
0178
0179 result = "<font face=\"verdana\" size=\"4\" color=\"#00ff00\"><b>Hooray !! Right Answer</b></font>";
0180 if ( !scoreDetermined &&
0181 !showCorrectAnswer )
0182 {
0183 ++score;
0184 scoreDetermined = true;
0185 }
0186 }
0187 else {
0188 /**
0189 * Stop timer ( so that the game
0190 * doesn't switch to next question
0191 * automatically ) and let the user
0192 * choose whether he/she wants
0193 * to see the correct answer.
0194 **/
0195
0196 if ( timer.running == true ) {
0197 timer.stop();
0198 }
0199
0200 result = "<p align=\"center\"> <font face=\"verdana\" size=\"4\" color=\"#ff0000\"><b>Oops, Wrong Answer</b></font> </p>";
0201 showCorrectAnswer = true
0202 }
0203 }
0204 }
0205
0206 CustomRadioButton {
0207 id: answerOption3
0208 radioButtonWidth: labelWidth
0209 radioButtonHeight: labelHeight
0210
0211 normalColor: "#A9A9A9"
0212 labelColor: "white"
0213
0214 labelText: qsTr("Option3")
0215 buttonGroup: group
0216
0217 onRadioButtonClick: {
0218 showResult = true;
0219 if ( labelText == correctAnswer ) {
0220 if ( timer.running == false ) {
0221 timer.start();
0222 }
0223
0224 result = "<font face=\"verdana\" size=\"4\" color=\"#00ff00\"><b>Hooray !! Right Answer</b></font>";
0225 if ( !scoreDetermined &&
0226 !showCorrectAnswer )
0227 {
0228 ++score;
0229 scoreDetermined = true;
0230 }
0231 }
0232 else {
0233 /**
0234 * Stop timer ( so that the game
0235 * doesn't switch to next question
0236 * automatically ) and let the user
0237 * choose whether he/she wants
0238 * to see the correct answer.
0239 **/
0240 if ( timer.running == true ) {
0241 timer.stop();
0242 }
0243
0244 result = "<p align=\"center\"> <font face=\"verdana\" size=\"4\" color=\"#ff0000\"><b>Oops, Wrong Answer</b></font> </p>";
0245 showCorrectAnswer = true
0246 }
0247 }
0248 }
0249
0250 CustomRadioButton {
0251 id: answerOption4
0252 radioButtonWidth: labelWidth
0253 radioButtonHeight: labelHeight
0254
0255 normalColor: "#A9A9A9"
0256 labelColor: "white"
0257
0258 labelText: qsTr("Option4")
0259 buttonGroup: group
0260
0261 onRadioButtonClick: {
0262 showResult = true;
0263 if ( labelText == correctAnswer ) {
0264 if ( timer.running == false ) {
0265 timer.start();
0266 }
0267
0268 result = "<font face=\"verdana\" size=\"4\" color=\"#00ff00\"><b>Hooray !! Right Answer</b></font>";
0269 if ( !scoreDetermined &&
0270 !showCorrectAnswer )
0271 {
0272 ++score;
0273 scoreDetermined = true;
0274 }
0275 }
0276 else {
0277 /**
0278 * Stop timer ( so that the game
0279 * doesn't switch to next question
0280 * automatically ) and let the user
0281 * choose whether he/she wants
0282 * to see the correct answer.
0283 **/
0284 if ( timer.running == true ) {
0285 timer.stop();
0286 }
0287
0288 result = "<p align=\"center\"> <font face=\"verdana\" size=\"4\" color=\"#ff0000\"><b>Oops, Wrong Answer</b></font> </p>";
0289 showCorrectAnswer = true
0290 }
0291 }
0292 }
0293 }
0294
0295 CustomButton {
0296 id: nextButton
0297 anchors.top: buttonArea.bottom
0298 anchors.topMargin: 20
0299 anchors.horizontalCenter: parent.horizontalCenter
0300 buttonWidth: labelWidth
0301 buttonHeight: labelHeight
0302
0303 normalColor: "#696969"
0304 borderColor: "#000000"
0305
0306 labelText: qsTr("Next")
0307 labelColor: "white"
0308 onButtonClick: {
0309 showCorrectAnswer = false;
0310 answerToShow = qsTr("View Answer");
0311 nextQuestionRequested();
0312 }
0313 }
0314
0315 Rectangle {
0316 id: resultDisplay
0317
0318 anchors.left: parent.left
0319 anchors.leftMargin: 20
0320 anchors.right: parent.right
0321 anchors.rightMargin: 20
0322 anchors.top: nextButton.bottom
0323 anchors.topMargin: 15
0324
0325 height: panelHeight/6
0326
0327 color: "#80FFFF"
0328 border.width: 1
0329 border.color: "#696969"
0330 radius: 40
0331
0332 visible: showResult
0333
0334 Text {
0335 id: resultContent
0336
0337 anchors.left: parent.left
0338 anchors.leftMargin: 25
0339 anchors.right: parent.right
0340 anchors.rightMargin: 5
0341 anchors.verticalCenter: parent.verticalCenter
0342
0343 wrapMode: Text.WordWrap
0344 text: qsTr(result)
0345 }
0346 }
0347
0348 CustomButton {
0349 id: viewCorrectAnswer
0350
0351 anchors.top: resultDisplay.bottom
0352 anchors.topMargin: 15
0353 anchors.left: parent.left
0354 anchors.leftMargin: 20
0355 anchors.right: parent.right
0356 anchors.rightMargin: 20
0357
0358 buttonHeight: labelHeight
0359 borderColor: "#696969"
0360 labelColor: "green"
0361 labelText: answerToShow
0362
0363 visible: showCorrectAnswer
0364
0365 onButtonClick: {
0366 answerToShow = correctAnswer;
0367 }
0368 }
0369
0370 Rectangle {
0371 id: scoreDisplay
0372
0373 anchors.left: parent.left
0374 anchors.leftMargin:10
0375 anchors.right: parent.right
0376 anchors.rightMargin: 10
0377 anchors.top: viewCorrectAnswer.bottom
0378 anchors.topMargin: 20
0379
0380 height: 2*labelHeight
0381
0382 border.width: 1
0383 border.color: "#696969"
0384 color: "darkgrey"
0385
0386 Text {
0387 id: scoreContent
0388 color: "white"
0389 width: parent.width
0390 horizontalAlignment: Text.AlignHCenter
0391 font.pixelSize: 18
0392 text: {
0393 qsTr("Your Progress \n\n" + score + "/" + totalQuestionsAsked)
0394 }
0395 }
0396 }
0397
0398 Timer {
0399 id: timer
0400 interval: 700
0401 repeat: false
0402 onTriggered: {
0403 questionsTimeout();
0404 }
0405 }
0406
0407 onQuestionsTimeout: {
0408 timer.stop();
0409 showCorrectAnswer = false;
0410 answerToShow = qsTr("View Answer");
0411 nextQuestionRequested();
0412 }
0413
0414 function initGame() {
0415 score = 0;
0416 totalQuestionsAsked = 0;
0417 }
0418
0419 function resetOptions() {
0420 for ( var i = 0; i < buttonArea.children.length; ++i ) {
0421 if ( buttonArea.children[i].checked == true ) {
0422 buttonArea.children[i].checked = false;
0423 }
0424 buttonArea.children[i].labelText = qsTr("NO_OPTION")
0425 result = "Undetermined";
0426 correctAnswer = "Undetermined";
0427 showResult = false;
0428
0429 showCorrectAnswer = false;
0430 answerToShow = "View Answer";
0431 }
0432 }
0433
0434 function setQuestion( answerOptions, rightAnswer ) {
0435 if ( maximumQuestions > 0 ) {
0436 resetOptions();
0437 ++totalQuestionsAsked;
0438 scoreDetermined = false;
0439 correctAnswer = rightAnswer;
0440 for ( var i = 0; i < buttonArea.children.length; ++i ) {
0441 buttonArea.children[i].labelText = answerOptions[i];
0442 }
0443 }
0444 else {
0445 gameQuitRequested()
0446 }
0447 maximumQuestions = maximumQuestions - 1;
0448 }
0449
0450 function setMaximumQuestions( questionsCount ) {
0451 maximumQuestions = questionsCount;
0452 }
0453 }