带有随机数的as3 2d数组,不会在行或列中产生3类

问题描述 投票:1回答:1

标题几乎总结了我的目标。我在业余时间从事糖果粉碎克隆的工作。该表是7行8列,因此基本上是2d数组。我想用1-8的随机数填充2d数组,以避免在行和列中获得3,4,5种。这是必要的,以便使起始桌避免立即触发玩家的得分。

到目前为止,处理2d数组的代码看起来像这样:(对其进行了调整,使其看起来不那么la脚)

    private function getRandomSequence(min:int=1, max:int=8):Vector.<uint>{
        var values:Vector.<uint>=new Vector.<uint>;
        for (var i:int = min; i <= max; i++) values.push(i);
        var result:Vector.<uint>=new Vector.<uint>;
        while (values.length > 0) result = result.concat(values.splice(Math.floor(Math.random() * values.length), 1));
        return result;
    }


    private function getRandomArr():Vector.<Vector.<uint>>{
        var j:uint=0;
        var i:uint=0;
        var multiArray:Vector.<Vector.<uint>> = new Vector.<Vector.<uint>>(7, true);
        for(j = 0; j < 7; j++) multiArray[j] = getRandomSequence(1,8);

        for(i = 0; j < 5; j++){
            for(j = 0; j < 8; j++){
                if(multiArray[i][j] == multiArray[i+1][j] == multiArray[i+2][j]){
                    //3 of a kind detected
                    while(multiArray[i][j] == multiArray[i+1][j]) multiArray[i][j] = main.mein.rng(1,8);
                }
            }
        }
        return multiArray;
    }

问题是,给您一个随机序列的第一个函数避免得到3种,但是它也避免了2种。提供功能以提供可靠的随机数序列,需要进行进一步的测试,该序列的长度为8,允许2种但不允许3种或更多。

arrays actionscript-3 multidimensional-array air
1个回答
0
投票

[供以后使用随机数生成2d数组的人参考,我不允许您使用3种类型的2个函数。第一个函数创建行并检查/修复3种,第二个函数将它们加起来形成2d数组并检查/修复3种(rng函数只是基本的max-max数学.random会对其进行升级因此,产卵标记[数字]产生的机会更高,等等。]

    private function getRandomSequence(min:uint=1, max:uint=8, seqLength:uint=8):Vector.<uint>{
        var i:uint=0;
        var values:Vector.<uint>=new Vector.<uint>;
        for (i = 0; i < seqLength; i++) values.push(main.mein.rng(min,max));

        for (i = 0; i < seqLength-2; i++){
            if(values[i] == values[i+1] == values[i+2]){
                //3 of a kind detected (horizontal)
                while(values[i+1] == values[i+2]) values[i+1] = main.mein.rng(1,8);
            }
        }

        return values;
    }

    private function getRandomArr():Vector.<Vector.<uint>>{
        var j:uint=0;
        var i:uint=0;
        var multiArray:Vector.<Vector.<uint>> = new Vector.<Vector.<uint>>(7, true);
        for(j = 0; j < 7; j++) multiArray[j] = getRandomSequence();

        for(i = 0; j < 5; j++){
            for(j = 0; j < 8; j++){
                if(multiArray[i][j] == multiArray[i+1][j] == multiArray[i+2][j]){
                    //3 of a kind detected (vertical)
                    while(multiArray[i+1][j] == multiArray[i+2][j]) multiArray[i+1][j] = main.mein.rng(1,8);
                }
            }
        }
        return multiArray;
    }

通过在这里和那里修改值,您可以调整它想要的大小。

© www.soinside.com 2019 - 2024. All rights reserved.