2013-03-23 91 views
0

请你能帮我一下我是新来的as3,我正尝试使用Fisher-Yates算法创建一个洗牌的套牌。当我用ctrl运行代码时输入它没有错误编译,但是当我尝试用trace()输出时,它回来了:1120:未定义财产shuffledArray的访问

场景1,图层'操作',第1帧,第6行1120:访问未定义的属性shuffledArray。

就像我说过的,我是新来的,这将是我做一些非常愚蠢的事情,但都一样我卡住了。

下面是代码

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; 


     } 
    } 
} 

而这里的.fla行动层

import src.CardDeck.CardDeck; 

var deck:CardDeck = new CardDeck("texasholdem"); 
trace(shuffledArray); 

我知道它可能是一些愚蠢,但我挣扎。

在此先感谢!

保罗

回答

1
var deck:CardDeck = new CardDeck("texasholdem"); 
trace(shuffledArray); 

因为shuffledArray是没有定义这是行不通的。

尝试:

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); 
} 
+0

非常感谢你的工作,但现在我得到[对象对象],52倍? – user2203250 2013-03-23 23:42:50

+0

[对象对象]是通用对象打印出来的东西。如果你在你的代码中创建一个卡片对象,你使用的是一个通用对象。我所指的代码行是:“card = {};” – mitim 2013-03-23 23:52:00

+0

就像@mitim说的那样,你需要跟踪该数组中的实际元素。 – 2013-03-23 23:55:53

0

“shuffledArray” 是你CardDeck对象的内部属性。要访问在它的公共方法和属性,您需要使用点语法:

trace(deck.shuffleFisherYates()); 

但是,这取决于你在做什么,你可能并不需要真正直接访问数组,如果你的CardDeck对象意图控制整个甲板。

+0

这让我疯狂,我做错了什么,我一直在这个小时没有快乐(会提示头发拉,但没有剩下)。你能帮助我们吗?我已经完成了你们所说的一切,并且仍然是血腥的[对象对象] – user2203250 2013-03-24 02:25:42

+0

你需要进入实际对象并访问它的属性。看看你的代码,你创建的每个“卡”对象都给它一个“cardType”,“cardName”和“cardValue”属性。对于每个“卡”对象,可以使用点符号(如cardObject.cardType,cardObject.cardName和cardObject.cardValue)访问每个属性。我猜这是你想要打印出来的。 – mitim 2013-03-24 02:35:26

+0

对不起,我应该指定我只想测试已创建的混洗功能,并确保它正在发送一个混洗甲板。当我注释掉洗牌功能和跟踪(我的卡片对象);它通过52张牌返回黑桃王牌的卡牌列表。我只是想通过shuffle函数打印出相同的列表。 – user2203250 2013-03-24 03:20:11