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