0

as3を初めて使用し、Fisher-Yatesアルゴリズムを使用してシャッフルされたデッキを作成しようとしています。ctrl-enterを使用してコードを実行すると、エラーなしでコンパイルされますが、trace()を使用して出力しようとすると、それは戻ってきます:

シーン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);

私はそれがおそらくばかげていることを知っていますが、私は苦労しています。

前もって感謝します!

ポール

4

2 に答える 2

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);
}
于 2013-03-23T23:30:32.287 に答える
0

「shuffledArray」は、CardDeck オブジェクト内のプロパティです。その中のパブリック メソッドとプロパティにアクセスするには、ドット構文を使用する必要があります。

trace(deck.shuffleFisherYates());

ただし、実行している内容によっては、CardDeck オブジェクトがデッキ全体を制御することを意図している場合、実際に配列に直接アクセスする必要がない場合があります。

于 2013-03-23T23:50:30.033 に答える