非常感谢你的时间!
function shuffleDeck()
{
var chosenCard:int = 0;
trace("DECK LENGTH " + deck.length);
for (var i = 0; i < deck.length; i++)
{
chosenCard = int(Math.random() * deck.length);
while (shuffledDeck[chosenCard] != null)
{
chosenCard = int(Math.random() * deck.length);
}
shuffledDeck[chosenCard] = deck[i];
trace(shuffledDeck[chosenCard]);
if (shuffledDeck.length == deck.length)
{
break;
}
}
trace(shuffledDeck);
} //End ShuffleDeck
如果我删除调用break的if语句,程序将挂起并卡住。我不明白......你可以看到下面的洗牌过程是乱七八糟的,由于某种原因,改组后的牌组变得“空白”.... 更糟糕的是,是洗牌( )函数以某种方式被称为TWICE,事件虽然我删除了eventlistener,并且找不到任何其他地方它被调用--- 跟踪语句低于
Shuffling Now
DECK LENGTH 7
1
2
3
4
5
3,1,,,2,4,5
Shuffling Now
DECK LENGTH 7
1
3,1,1,,2,4,5
**EDIT**
Shuffling Now
DECK LENGTH 7
DECK: 37,38,39,40,41,42,43
Shuffled Deck: 38,37,,41,39,40,42
Shuffling Now
DECK LENGTH 7
DECK: 37,38,39,40,41,42,43
Shuffled Deck: 38,37,37,41,39,40,42
如您所见,我跟踪了deck.length,然后是甲板阵列本身。然后是shuffledDeck数组。第一次通过它忽略最后一个元素,然后函数重复(不知道为什么)并在shuffledDeck [1]和[2]中插入一个37。
再次选择不同的卡片。
DECK LENGTH 7
DECK: 41,42,43,44,45,46,47
Shuffled Deck: ,,,,,41,42
Shuffling Now
DECK LENGTH 7
DECK: 41,42,43,44,45,46,47
Shuffled Deck: ,,41,,,41,42
没有if语句导致中断;
Shuffling Now
DECK LENGTH 7
DECK: 1,2,3,9,10,11,18
Shuffled Deck: ,,1
Shuffled Deck: ,2,1
Shuffled Deck: ,2,1,,3
Shuffled Deck: 9,2,1,,3
Shuffled Deck: 9,2,1,10,3
Shuffled Deck: 9,2,1,10,3,,11
Shuffled Deck: 9,2,1,10,3,18,11
所以这里:它完全符合我的要求(有点),但是HANGS(冻结)。
答案 0 :(得分:0)
我建议以不同的方式随机化顺序。不要在for循环中使用while循环,而是使用单个while循环和数组切片。
这是一篇讨论这个和其他分类技术的文章:
http://code.tutsplus.com/tutorials/quick-tip-how-to-randomly-shuffle-an-array-in-as3--active-8776