Keksicle

Game

Aug 17th, 2017
321
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Haxe 6.92 KB | None | 0 0
  1. package;
  2.  
  3. import openfl.display.Sprite;
  4. import openfl.Lib;
  5. import sys.db.Mysql;
  6.  
  7.  
  8. import openfl.text.TextField;
  9. import openfl.text.TextFormat;
  10. import openfl.text.TextFieldAutoSize;
  11.  
  12. import openfl.events.MouseEvent;
  13. import openfl.events.Event;
  14. import openfl.events.TextEvent;
  15.  
  16.  
  17. /**
  18.  * ...
  19.  * @author Reka
  20.  */
  21. class Game extends Sprite
  22. {
  23.     private var myTextFormat:TextFormat;
  24.     private var amGameOver:Bool = false;
  25.    
  26.     var tf:TextField = new TextField();
  27.    
  28.     // this keeps track of the score
  29.     var score:Int = 0;
  30.     // the textfield that displays the score
  31.     var scoreDisplay:TextField;
  32.     // the fields for question and options
  33.     var questionDisplay:TextField;
  34.     var answers:Array<TextField>;
  35.     // the index of the correct answer (0, 1 or 2)
  36.     var correctAnswer:Int;
  37.    
  38.     // display of the time
  39.     var timerField:TextField;
  40.     // the actual time left (starts at 10 sec. or 10000 milli sec)
  41.     var timer:Int = 19000;
  42.     // the last time the update loop ran (subtract the current time from this number to get the time passed)
  43.     var lastTime:Int;
  44.    
  45.     // Clean previous screen and setup the current screen
  46.     public function new()
  47.     {
  48.         super();
  49.        
  50.         removeChildren();   // Clean previous screen
  51.         setup();
  52.         start();
  53.     }
  54.  
  55.     // Setup the current screen
  56.     public function setup()
  57.     {
  58.         // Setup a default text format
  59.         myTextFormat = new TextFormat("_sans", 14, 0xAA2023, true);
  60.        
  61.         // Add the neccessary elements
  62.         addScoreField();   
  63.         addTimerField();
  64.         addQuestion();
  65.         addAnswers();
  66.        
  67.         // Start the game
  68.         start();
  69.     }
  70.    
  71.     // Start the game from the start
  72.     public function start()
  73.     {
  74.         // Reset Values and text
  75.         amGameOver = false;
  76.         score = 0;
  77.         scoreDisplay.text = "SCORE: " + Std.string(score);
  78.         Database.resetQuestionID();
  79.         updateText();
  80.        
  81.         // Activate the update loop
  82.         addEventListener(Event.ENTER_FRAME, update);
  83.     }
  84.    
  85.     // Adds the Player Input field
  86.     function addPlayerName()
  87.     {
  88.         var tformat = new openfl.text.TextFormat( "_sans", 24, 0xAA2023, true );
  89.         tf = new TextField();
  90.         tf.border = true;
  91.         tf.defaultTextFormat = tformat;
  92.         tf.text = "Type your nickname here";
  93.         tf.type = openfl.text.TextFieldType.INPUT;
  94.         tf.width = 400;
  95.         tf.height = 50;
  96.         tf.x = 10;
  97.         tf.y = 10;
  98.         addChild( tf );
  99.     }
  100.    
  101.     // Adds the Score textfield
  102.     function addScoreField()
  103.     {
  104.         scoreDisplay = new TextField();
  105.         scoreDisplay.autoSize = TextFieldAutoSize.LEFT;
  106.         scoreDisplay.defaultTextFormat = myTextFormat;
  107.         scoreDisplay.selectable = false;
  108.         scoreDisplay.text = "SCORE: " + Std.string(score);
  109.         scoreDisplay.x = 10;
  110.         scoreDisplay.y = 60;
  111.         addChild( scoreDisplay );
  112.     }
  113.    
  114.     // Adds the timer textfield
  115.     function addTimerField()
  116.     {
  117.         timerField = new TextField();
  118.         timerField.defaultTextFormat = myTextFormat;
  119.         timerField.width = 300;
  120.         timerField.x = scoreDisplay.x + 100;
  121.         timerField.y = scoreDisplay.y;
  122.         addChild( timerField );
  123.     }
  124.    
  125.     // Adds the Question textfield
  126.     function addQuestion()
  127.     {
  128.         questionDisplay = new TextField();
  129.         questionDisplay.x = 10;
  130.         questionDisplay.y = 100;
  131.         questionDisplay.defaultTextFormat = myTextFormat;
  132.         questionDisplay.autoSize = TextFieldAutoSize.LEFT;
  133.         addChild(questionDisplay);
  134.     }
  135.    
  136.     // Adds the 4 Answer textfields
  137.     function addAnswers()
  138.     {
  139.         answers = new Array<TextField>();
  140.         for (i in 0...3)
  141.         {
  142.             var answerText:TextField = new TextField();
  143.             answerText.autoSize = TextFieldAutoSize.LEFT;
  144.             answerText.defaultTextFormat = myTextFormat;
  145.             answerText.x = questionDisplay.x;
  146.             answerText.y = questionDisplay.y + questionDisplay.height + (i * 50);
  147.             addChild( answerText );
  148.             answerText.addEventListener( MouseEvent.CLICK, answerQuestion);
  149.            
  150.             // Add the answer textfield to the array list
  151.             answers.push(answerText);
  152.         }
  153.     }
  154.    
  155.     // Update loop gets called every frame
  156.     function update(e:Event):Void
  157.     {
  158.         // Countdown until 0
  159.         if (timer > 0)
  160.         {
  161.             // Subtract 1 of timer every frame
  162.             var now:Int = Lib.getTimer();
  163.             var deltaTime:Int = now - lastTime;
  164.             lastTime = now;
  165.             timer -= deltaTime;
  166.             timerField.text = Std.string(timer);
  167.         }
  168.         else
  169.         {
  170.             // Stop the update and show game over screen
  171.             gameOver();
  172.         }
  173.     }
  174.    
  175.     // Stops the update loop and show game over screen
  176.     function gameOver()
  177.     {
  178.         // Stop the update loop and activate Game Over mode
  179.         removeEventListener(Event.ENTER_FRAME, update);
  180.         amGameOver = true;
  181.        
  182.         // Hide questions and answers
  183.         questionDisplay.text = "";
  184.         for (row in answers)
  185.         {
  186.             row.text = "";
  187.         }
  188.        
  189.         // Show message
  190.         timerField.text = "GAME OVER! - Click here to restart the game";
  191.         timerField.addEventListener( MouseEvent.CLICK, restart);
  192.     }
  193.    
  194.     function gameWin()
  195.     {
  196.         // Stop the update loop and activate Game Over mode
  197.         removeEventListener(Event.ENTER_FRAME, update);
  198.         amGameOver = true;
  199.        
  200.         // Hide questions and answers
  201.         questionDisplay.text = "";
  202.         for (row in answers)
  203.         {
  204.             row.text = "";
  205.         }
  206.        
  207.         // Show message
  208.         addPlayerName();
  209.         timerField.text = "Submit Score!";
  210.         timerField.addEventListener( MouseEvent.CLICK, submitScore);
  211.     }
  212.    
  213.     // Cause the game to restart
  214.     function restart(event:MouseEvent)
  215.     {
  216.         start();
  217.         timerField.removeEventListener( MouseEvent.CLICK, restart);
  218.     }
  219.    
  220.     // Submit score to leaderboard and switch to hall of fame
  221.     function submitScore(event:MouseEvent)
  222.     {
  223.         // Clean up current scene and database
  224.         removeEventListener(Event.ENTER_FRAME, update);
  225.         removeChildren();
  226.        
  227.         // Submit score
  228.         Database.PostScore(tf.text, score);
  229.        
  230.         // Change screens
  231.         var changeScreen = new HallofFame();
  232.         addChild(changeScreen);
  233.     }
  234.    
  235.     // Update the question and answer texts
  236.     function updateText()
  237.     {
  238.         // Reset the timer
  239.         lastTime = Lib.getTimer();
  240.         timer = 19000;
  241.        
  242.         // Get the answers from the database
  243.         var myAnswers = Database.loadQuestion();
  244.         if (myAnswers.question == "")   // Reached an ending, activate GameWin sequence
  245.         {
  246.             if (score > 0)
  247.             {
  248.                 gameWin();
  249.             }
  250.             else
  251.             {
  252.                 gameOver();
  253.             }
  254.         }
  255.         else
  256.         {
  257.             // Update the question and answer texts
  258.             questionDisplay.text = myAnswers.question;
  259.             if (answers[0] != null){
  260.                 answers[0].text = myAnswers.answer1;
  261.                 answers[1].text = myAnswers.answer2;
  262.                 answers[2].text = myAnswers.answer3;
  263.                 correctAnswer = myAnswers.correctAnswer;
  264.             }
  265.                
  266.         }
  267.     }
  268.    
  269.     // When one of the answer option textfields is clicked. Index of returns the position of the clicked answer in the array
  270.     public function answerQuestion(e:MouseEvent):Void
  271.     {
  272.         if (amGameOver == false)
  273.         {
  274.             // Retrieve the clicked answer index
  275.             var fieldIndex:Int = answers.indexOf( cast e.currentTarget );
  276.            
  277.             // Add score if answered correctly
  278.             if (fieldIndex == correctAnswer)
  279.             {
  280.                 score += 100;
  281.             }
  282.             else
  283.             {
  284.                 score -= 10;
  285.             }
  286.             scoreDisplay.text = "SCORE: " + Std.string(score);
  287.            
  288.             // Submit answer to the Database and retrieve the new question and answers
  289.             Database.checkAnswer(fieldIndex + 1);
  290.             updateText();
  291.         }
  292.     }
  293. }
Add Comment
Please, Sign In to add comment