2010-03-26 8 views
0

Je suis en train d'écrire un jeu de cartes en java où j'ai besoin d'étaler des cartes depuis un paquet en plusieurs colonnes jusqu'à ce que j'ai un nombre fixe de cartes restantes. C'est comme ça que je fais ça.Travailler avec des tableaux de modèle de java en Java

 
public class Column extends ArrayList {} 
List deck = Cards.createNewDeck(); 
Column[] columns = new Column[10]; 
int c = 0; 

while (deck.size() > 50) { 
    if (c == 10) { 
     c = 0; 
    } 
    if (columns[c] == null) { 
     columns[c] = new Column(); 
    } 
    columns[c].add(Cards.dealTopCard(deck)); 
    c += 1; 
} 

Cela semble quelque peu maladroit. Y a-t-il une façon plus lisible/complète de faire la même chose?

Répondre

1
public class Column extends ArrayList {} 
List deck = Cards.createNewDeck(); 
Column[] columns = new Column[10]; 
int c = 0; 

for (int i = 0; deck.size() > 50; i = (i+1)%10) 
{ 
    if (columns[i] == null) 
    columns[i] = new Column(); 

    columns[i].add(Cards.dealTopCard(deck)); 
} 

Le modulo opérateur (%) donne le reste de la division entière entre les deux chiffres que vous donnant effectivement un nombre qui remonte à 0 en atteignant 10.

Par ailleurs, vous devez décider: utiliser un tableau bidimensionnel ou juste ArrayLists, ne mélangez pas les choses.

Alors depuis génériques existent, utilisez-les à la place de ce qui prolonge les classes: c'est ce que le polymorphisme paramétrique est pour! Quelque chose comme:

ArrayList<Int, ArrayList<Card>> columns = new ArrayList<ArrayList<Card>>(); 
+0

Eh bien, tableau de listes semblait être la meilleure approche. J'ai un nombre fixe de colonnes, mais je ne sais pas combien de cartes seront dans chaque colonne. Une liste de listes est un peu plus verbeuse (colonnes [i] vs columns.get (i)). Ton exemple est sympa, mais je cherchais quelque chose de plus profond. En clojure j'écrirais quelque chose comme (def colonnes (partition 10 10 (liste) (prendre 54 (create-deck))) –

+0

Malheureusement, c'est Java, pas Clojure :) La verbosité fait partie du jeu. – Jack

0
  • Ne pas utiliser les types bruts.
  • Ne pas mélanger des tableaux avec des listes.

Ma suggestion est de définir List<Pile<Card>> columns, où Pile<Card> a une List<Card>.

Ensuite, définissez un type de revendeur qui convertit un Deck<Card> en plusieurs Pile<Card>. Cela rend plus facile de brancher différentes stratégies pont à pile au cas où.