请你帮我出我新的AS3,我试图创建使用费雪耶茨算法的一个洗牌的甲板。当我运行code使用Ctrl-输入没有错误编译,但是当我尝试将它输出与跟踪();它回来了:
场景1,图层'行动',第1帧,6号线1120:未定义的属性shuffledArray的访问
就像我说我是新来这个,这将是我做的事情非常愚蠢的,但都是一样的我是被卡住。
下面是code
包src.CardDeck
{
公共类CardDeck
{
公共变种allCards:数组= [];
公共变种cardNames:阵列;
公共变种cardValues:阵列;
公共变种游戏类型:字符串;
公共变种drawnCards:UINT = 0;
公共职能CardDeck(游戏:字符串)
{
游戏类型=游戏;
cardNames = [王牌,二,三,
四,五个一,六个一,
七,八,九,
十,杰克,皇后,王];
如果(游戏类型==texasholdem)
{
cardValues = [1,2,3,4,5,6,7,8,9,10,10,10,10]
}
makeSuit(铲);
makeSuit(心);
makeSuit(金刚);
makeSuit(俱乐部);
}
功能makeSuit(suitString:字符串):无效
{
VAR卡:对象;
对于(VAR我:UINT = 0; I< cardNames.length;我++)
{
卡= {};
card.cardType = suitString;
card.cardName = cardNames [I]
card.cardValue = cardValues [I]
card.isDrawn = FALSE;
allCards.push(卡);
}
}
公共职能shuffleFisherYates():数组
{
VAR shuffledArray:数组= [];
VAR randomCardIndex:INT;
做
{
randomCardIndex = Math.floor(的Math.random()* allCards.length);
shuffledArray.push(allCards [randomCardIndex]); //添加混合
allCards.splice(randomCardIndex,1); //从甲板上删除
}而(allCards.length); //含义而allCards.length!= 0
返回shuffledArray;
}
}
}
和这里是.fla文件操作层
进口src.CardDeck.CardDeck;
VAR甲板:CardDeck =新CardDeck(texasholdem);
跟踪(shuffledArray);
我知道它可能是一些愚蠢,但我挣扎。
在此先感谢!
保
解决方案 VAR甲板:CardDeck =新CardDeck(texasholdem);
跟踪(shuffledArray);
这不起作用,因为 shuffledArray
未在此处定义。
尝试:
VAR甲板:CardDeck =新CardDeck(texasholdem);
VAR数组:数组= deck.shuffleFisherYates();
对于(VAR我:= 0; I< array.length;我++)
{
跟踪(数组[我] .cardName);
跟踪(数组[我] .cardType);
跟踪(数组[我] .cardValue);
跟踪(数组[我] .isDrawn);
}
Please can you help me out I am new to as3 and I am trying to create a shuffled deck using the Fisher-Yates Algorithm. When I run the code with ctrl-enter it compiles with no errors but when I try to output it with trace(); it comes back with:
Scene 1, Layer 'actions', Frame 1, Line 6 1120: Access of undefined property shuffledArray.
Like I said I am new to this and it will be me doing something very stupid but all the same i'm stuck.
Here is the code
package src.CardDeck
{
public class CardDeck
{
public var allCards:Array = [];
public var cardNames:Array;
public var cardValues:Array;
public var gameType:String;
public var drawnCards:uint = 0;
public function CardDeck(game:String)
{
gameType = game;
cardNames = ["Ace","Two","Three",
"Four","Five","Six",
"Seven","Eight","Nine",
"Ten","Jack","Queen","King"];
if(gameType == "texasholdem")
{
cardValues = [1,2,3,4,5,6,7,8,9,10,10,10,10];
}
makeSuit("Spade");
makeSuit("Heart");
makeSuit("Diamond");
makeSuit("Club");
}
function makeSuit(suitString:String):void
{
var card:Object;
for(var i:uint = 0; i < cardNames.length; i++)
{
card = {};
card.cardType = suitString;
card.cardName = cardNames[i];
card.cardValue = cardValues[i];
card.isDrawn = false;
allCards.push(card);
}
}
public function shuffleFisherYates():Array
{
var shuffledArray:Array = [];
var randomCardIndex: int;
do
{
randomCardIndex = Math.floor(Math.random()* allCards.length);
shuffledArray.push(allCards[randomCardIndex]); // add to mix
allCards.splice(randomCardIndex,1); // remove from deck
}while(allCards.length); // Meaning while allCards.length != 0
return shuffledArray;
}
}
}
and here is the .fla actions layer
import src.CardDeck.CardDeck;
var deck:CardDeck = new CardDeck("texasholdem");
trace(shuffledArray);
I know its probably something silly but i'm struggling.
Thanks in advance!
Paul
解决方案var deck:CardDeck = new CardDeck("texasholdem");
trace(shuffledArray);
This doesn't work because shuffledArray
isn't defined there.
Try :
var deck:CardDeck = new CardDeck("texasholdem");
var array:Array = deck.shuffleFisherYates();
for(var i:int=0; i<array.length; i++)
{
trace(array[i].cardName);
trace(array[i].cardType);
trace(array[i].cardValue);
trace(array[i].isDrawn);
}