AS3随机算法

时间:2013-09-15 19:02:25

标签: algorithm actionscript-3

我需要一个建议。我想要一个函数,从1到100返回随机数,条件不重复所选的数字。像棋桌这样的东西会被随机的东西填充,而不是另一件东西......如果有人能说出一个建议,我会非常高兴。感谢。

2 个答案:

答案 0 :(得分:1)

创建一个100个数字的Array(1..100),然后按“随机”排序数组。然后,您可以一次一个地拉出数字。

我没有测试下面的代码,但是我有这些片段,你可以拼凑起来以达到预期的效果。

public static function randomNumber(min:Number, max:Number):Number{
    var rnd:Number = Math.floor((Math.random()*((max+1)-min))+min);
    return rnd;
}

public static function randomize(arr:Array):Array{
    var len:Number = arr.length;
    var rnd:Number;
    var tmp:Object;
    for(var i:Number=0;i<len;i++){
        rnd = randomNumber(0,(len-1));
        tmp = arr[i];
        arr[i] = arr[rnd];
        arr[rnd] = tmp;
    }
    return arr;
}

var setOfNumbers:Array = new Array();
for(var i:int=0;i<100;i++){
    setOfNumbers[i] = (i+1);
}
var shuffledSetOfNumbers:Array = randomize(setOfNumbers);

注意:

  • 对于纯粹主义者而言,这种“随机化”并非“真正”随机(如果您正在为拉斯维加斯赌博机器编写卡牌洗牌机,您将需要使用不同的东西 - case in point!
  • 我上面的randomNumberrandomize函数是static,因为我通常会将这些函数包含在我需要它们的应用中,但您不必使用它方式
  • 我的原始lib使用Number vs intuint获取更多选项的某些变量,但可以随意清理

答案 1 :(得分:1)

也喜欢......

package 
{
    import flash.display.Sprite;
    import flash.events.Event;

    /**
     * ...
     * @author Vadym Gordiienko
     */
    public class Main extends Sprite 
    {

        public function Main():void 
        {
            if (stage) init();
            else addEventListener(Event.ADDED_TO_STAGE, init);
        }

        private function init(e:Event = null):void 
        {
            removeEventListener(Event.ADDED_TO_STAGE, init);
            // entry point

            var startArray:Array = generateNumberArray(100);
            var randomArray:Array = randomArray(startArray);
            trace("startArray = " + startArray);
            trace("randomArray = " + randomArray);
        }
        /**
         * generate Array of numbers by length
         * @param   length
         * @return Array of numbers
         */
        public static function generateNumberArray(length:int):Array 
        {
            var numberArray:Array = [];
            for (var i:int = 0; i < length; i++) 
            {
                numberArray[i] = i+1;
            }

            return numberArray;
        }

        /**
         * generate randomly mixed array by input array
         * @param   inputArray - simple not mixed array
         * @return Array - mixed array
         */
        public static function randomArray(inputArray:Array):Array 
        {
            var randomArray:Array = [];
            var tempArray:Array = [];
            for (var i:int = 0; i < inputArray.length; i++) 
            {
                tempArray.push(inputArray[i]);
            }
            while (tempArray.length)
            {
                var randomNumber:int = Math.round(Math.random() * (tempArray.length - 1));// get random number of left array
                randomArray.push( tempArray[randomNumber] );
                tempArray.splice(randomNumber, 1); // remove randomed element from temporary aarray
            }
            tempArray = null;
            delete [tempArray];

            return randomArray;
        }

    }

}