带有随机数的as3 2d数组,不会在行或列中产生3类
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了带有随机数的as3 2d数组,不会在行或列中产生3类相关的知识,希望对你有一定的参考价值。
标题几乎总结了我的目标。我在业余时间从事糖果粉碎克隆的工作。该表是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种或更多。
答案
[供以后使用随机数生成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;
}
通过在这里和那里修改值,您可以调整它想要的大小。
以上是关于带有随机数的as3 2d数组,不会在行或列中产生3类的主要内容,如果未能解决你的问题,请参考以下文章