ProblemYou want to mimic rolling dice. SolutionUse the NumberUtilities.random( ) method to generate random numbers in the desired range. DiscussionYou can use the random( ) method from Recipe 4.7 to generate random integer values to simulate rolling a die or dice in your Flash movies. Mimicking the rolling of dice is an important feature in many games you might create using ActionScript, and the random( ) method makes your job easy.
It is not uncommon to want to generate a random number and then store it for later use. If you want to reuse an existing random number, be sure to save the result rather than generating a new random number. Note the difference in these two scenarios. In the first scenario, dice always is the sum of die1 plus die2: var die1:uint = NumberUtilities.random(1, 6); var die2:uint = NumberUtilities.random(1, 6); var dice:uint = die1 + die2; In the following scenario, there is no relation between the value of dice and the earlier random values stored in die1 and die2. In other words, even if die1 and die2 add up to 7, dice stores a completely different value between 2 and 12: var die1:uint = NumberUtilities.random(1, 6); var die2:uint = NumberUtilities.random(1, 6); var dice:uint = NumberUtilities.random(1, 6) + NumberUtilities.random(1, 6); You can call NumberUtilities.random( ) with any range to simulate a multisided die. Here it has a range from 1 to 15 and generates a random number as though the user is rolling a 15-sided die, as might be found in a role-playing game: var die1:uint = NumberUtilities.random(1, 15); The following code uses the NumberUtilities.random( ) method in conjunction with programmatic drawing to create a visual representation of a single die: package { import flash.display.Sprite; import flash.text.TextField; import flash.events.MouseEvent; import ascb.util.NumberUtilities; public class NumbersAndMath extends Sprite { var _die:Sprite; var _value:uint; public function NumbersAndMath( ) { _die = new Sprite( ); addChild(_die); _die.addEventListener(MouseEvent.CLICK, rollDie); rollDie(null); } private function rollDie(event:MouseEvent):void { _value = NumberUtilities.random(1, 6); _die.graphics.clear( ); _die.graphics.lineStyle( ); _die.graphics.beginFill(0xFFFFFF); _die.graphics.drawRect(0, 0, 50, 50); _die.graphics.endFill( ); _die.graphics.beginFill(0x000000); if(_value == 1 || _value == 3 || _value == 5) { _die.graphics.drawCircle(25, 25, 4); } if(_value == 2 || _value == 3 || _value == 4 || _value == 5 || _value == 6) { _die.graphics.drawCircle(11, 11, 4); _die.graphics.drawCircle(39, 39, 4); } if(_value == 4 || _value == 5 || _value == 6) { _die.graphics.drawCircle(11, 39, 4); _die.graphics.drawCircle(39, 11, 4); } if(_value == 6) { _die.graphics.drawCircle(11, 25, 4); _die.graphics.drawCircle(39, 25, 4); } } } } Running the preceding code results in a single, clickable die drawn on the stage. Each time the user clicks the die, the value changes. See AlsoRecipe 4.7 |