Flash CS4 [AS3]: создание массива с использованием цикла - PullRequest
0 голосов
/ 15 декабря 2009

Ниже у меня есть массив, который работает, но он слишком длинный, и я думаю, что есть гораздо более простой способ получить тот же результат, используя цикл, но я просто не могу обойти его сейчас. Массив выглядит следующим образом:

var CardDeck = new Array();
CardDeck[0] = new C1();
CardDeck[1] = new C2();
CardDeck[2] = new C3();
CardDeck[3] = new C4();
CardDeck[4] = new C5();
CardDeck[5] = new C6();
CardDeck[6] = new C7();
CardDeck[7] = new C8();
CardDeck[8] = new C9();
CardDeck[9] = new C10();
CardDeck[10] = new C11();
CardDeck[11] = new C12();
CardDeck[12] = new C13();
CardDeck[13] = new D1();
CardDeck[14] = new D2();
CardDeck[15] = new D3();
CardDeck[16] = new D4();
CardDeck[17] = new D5();
CardDeck[18] = new D6();
CardDeck[19] = new D7();
CardDeck[20] = new D8();
CardDeck[21] = new D9();
CardDeck[22] = new D10();
CardDeck[23] = new D11();
CardDeck[24] = new D12();
CardDeck[25] = new D13();
CardDeck[26] = new H1();
CardDeck[27] = new H2();
CardDeck[28] = new H3();
CardDeck[29] = new H4();
CardDeck[30] = new H5();
CardDeck[31] = new H6();
CardDeck[32] = new H7();
CardDeck[33] = new H8();
CardDeck[34] = new H9();
CardDeck[35] = new H10();
CardDeck[36] = new H11();
CardDeck[37] = new H12();
CardDeck[38] = new H13();
CardDeck[39] = new S1();
CardDeck[40] = new S2();
CardDeck[41] = new S3();
CardDeck[42] = new S4();
CardDeck[43] = new S5();
CardDeck[44] = new S6();
CardDeck[45] = new S7();
CardDeck[46] = new S8();
CardDeck[47] = new S9();
CardDeck[48] = new S10();
CardDeck[49] = new S11();
CardDeck[50] = new S12();
CardDeck[51] = new S13();

Может кто-нибудь сказать мне, как объединить это в цикл, который будет давать те же результаты?

Спасибо Ben

Ответы [ 2 ]

3 голосов
/ 16 декабря 2009

Вы можете использовать getDefinitionByName, чтобы получить ссылки на нумерованные классы карт, что-то вроде этого:

import flash.utils.getDefinitionByName;

var deck:Array = [];
var suits:Array = ['C', 'D', 'H', 'S'];
var card:Class;

for each(var suit:String in suits) {
    for(var i:int = 1; i <= 13; i++) {
        card = getDefinitionByName(suit + i) as Class;
        deck.push(new card());
    }
}
1 голос
/ 15 декабря 2009

Этот код может не работать как есть (я немного заржавел с AS3), но с некоторыми изменениями он должен направить вас в правильном направлении:

public class Card {
    var suit:String;
    var value:int;

    public Card(Suit:String, Value:int)
    {
        this.suit = Suit;
        this.value = Value;
    }
} 

public class Deck {
    var deck:Array = new Array();
    var suits:Array = new Array('C', 'D', 'H', 'S');

    for (var x = 0; x < 52; x++) {
        deck[x] = new Card(suits[x / 13], x % 13);
    }
}

Теперь я не уверен в объявлении карты (у меня нет копии Flash, удобной для проверки моего синтаксиса посредством компиляции), но что подразумевается под строкой "deck [x] = new Card ..." Для этого необходимо установить первые 13 мастей карт на C, вторые 13 на D и т. д. и установить значения от 0 до 13 (то есть Ace = 0, 2 = 1, 3 = 2, ..., K = 12).

Надеюсь, что это имеет смысл (и я надеюсь, что вам не нужно слишком сильно его настраивать, чтобы заставить его работать на вас).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...