2009-12-15 5 views
0

Ci-dessous j'ai un tableau qui fonctionne mais c'est beaucoup trop long et je pense qu'il y a un moyen bien plus simple de générer le même résultat en utilisant une boucle mais je peux juste Ne me tournez pas la tête en ce moment. Le tableau est le suivant:Flash CS4 [AS3]: Générer un tableau en utilisant une boucle

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(); 

Quelqu'un peut-il me dire comment mettre cela ensemble dans une boucle qui va générer les mêmes résultats?

Merci Ben

+0

Vous avez créé une toute nouvelle classe pour chaque carte? Cela ne semble-t-il pas un peu long? Peut-être que vous pourriez créer une classe de carte unique et lui permettre d'avoir des propriétés qui ont suscité des valeurs pertinentes pour un jeu de cartes (ce qui résoudrait le problème que vous rencontrez, accessoirement). –

+0

Euh ... excessif, pas étendu. –

+0

Merci pour votre réponse Michael, comment allez-vous faire cela? Pouvez-vous me donner un exemple de code? C'est ma première vraie tentative à AS3 et comme vous pouvez probablement déjà le dire je n'ai aucune idée de ce que je fais. – Ben

Répondre

3

Vous pouvez utiliser getDefinitionByName pour obtenir des références aux classes de cartes numérotées, quelque chose comme ceci:

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

Ce code peut ne pas fonctionner comme il est (je suis un peu rouillé avec AS3), mais avec quelques ajustements, il devrait vous orienter dans la bonne direction:

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

maintenant Je ne suis pas sûr de la déclaration de la carte (je n'ai pas de copie de Flash à portée de main pour vérifier ma syntaxe lors de la compilation), mais de ce que la ligne "deck [x] = new Card ..." est supposée faire les 13 premières cartes correspondent à C, les secondes 13 à D, etc., et à définir les valeurs de 0 à 13 (Ace = 0, 2 = 1, 3 = 2, ..., K = 12). Espérons que cela a du sens (et j'espère que vous n'avez pas à le modifier trop pour le faire fonctionner pour vous).