Ver código fonte

Add Shut the box

michtang 3 anos atrás
pai
commit
1c467e2738
1 arquivos alterados com 106 adições e 0 exclusões
  1. 106 0
      03-orange/10-shut-the-box.js

+ 106 - 0
03-orange/10-shut-the-box.js

@@ -0,0 +1,106 @@
+/** 
+This activity uses conditionals to provide instructions based on current state of the game. Loops are used to iterate through tiles.
+The player must roll the dice and select the tiles to reduce the total down to zero. The game is won when the total is zero
+and there are no tiles left. 
+ */
+
+//***********************************Scene - Initialize When Scene Starts Event*********************************************//
+// Tile creation
+if($this.scene.state() == "PLAY") {
+    // create an array to store available tiles
+    var availableTiles = [];
+    // start with a target amount of 0
+    var targetAmount = 0;
+    // create the cloned tiles
+    for (var t = 1; t < 10; t++) {
+        var clonedTile = numberedTile.clone();
+        var tileNumber = clonedTile.findName("number_" + t);
+        // update the text on the clone's label object
+        tileNumber.text(t);
+        // assign the number to the tile
+        clonedTile.number = t;
+        // add the tile to the availableTiles array
+        availableTiles.push(clonedTile); 
+        // place the cloned tile in the scene by setting its x value.
+        clonedTile.x(20 + 85 * (t - 1));
+    }
+    // remove the original tile
+    numberedTile.remove();
+}
+
+// run this function when a dice is clicked
+$this.rollDice = function()  {
+    // only allow rolls if targetAmount = 0
+    if(targetAmount === 0) {
+        // randomly roll the dic
+        var die1Value = random(1,6);
+        var die2Value = random(1,6);
+        // update the sprite frames
+        die1.frameIndex(die1Value);
+        die2.frameIndex(die2Value);
+        // set the target amount and update UI
+        targetAmount = die1Value + die2Value;
+        totalText.text(targetAmount);
+        // update message text
+        message.text("Click the tiles to subtract from the total.");
+        // check for valid moves after every roll
+        $this.checkForValidMoves();
+        
+    }
+};
+
+// run this function when a tile is clicked
+$this.processTile = function(clickedTile) {
+    // make sure the tile's number is smaller than targetAmount
+    if(clickedTile.number <= targetAmount) {
+        // subtract clicked number from targetAmount
+        targetAmount -= clickedTile.number;
+        // update the text
+        totalText.text(targetAmount);
+        // hide clicked number tile
+        clickedTile.visible(false);
+        // loop through the availableTiles array
+        for (var i = 0; i < availableTiles.length; i++) {
+            // find the clickedTile in the availableTiles array
+            if (availableTiles[i] == clickedTile) {
+                // and remove it with splice function
+                availableTiles.splice(i, 1);
+            }
+        }
+        if (availableTiles.length === 0) {
+            $this.checkForEndOfGame();
+        } else {
+            // if there are tiles, check for valid moves 
+            // check for valid moves after every clicked tile
+            $this.checkForValidMoves();
+        }
+       
+    }
+};
+
+$this.checkForValidMoves = function() {
+   if(targetAmount > 0) {
+       // find the smallest available tile
+       var smallestTile = availableTiles[0];
+       if (smallestTile.number > targetAmount) {
+           message.text("There are no valid moves. Play again!");
+       }
+   } else { 
+       message.text("Click the dice to roll again!")
+   } 
+};
+
+$this.checkForEndOfGame = function() {
+    if (targetAmount === 0) {
+        message.text("Good job! You win!");
+    } else {
+        message.text("Game over. Try again!");
+    }
+}
+
+//*********************************die 1 and die 2 Objects - Mouse Click Event*********************************************//
+$this.scene.rollDice();
+
+//****************************************numberedTile Object - Mouse Click***********************************************//
+$this.scene.processTile($this)
+