J'ai un peu triché. .. .. Nous n'implémenterons pas de deck ou de main cette fois.
Au lieu de cela, j'aimerais créer une classe abstraite qui contient les classes qui maintiennent les cartes ensemble.
Deck, main, cimetière, etc. contiennent tous plusieurs cartes dans une structure de données. J'ai donc créé un ensemble d'interfaces de cartes.
public interface CardSheaf {
/**
*Renvoie où se trouve l'objet carte transmis dans la structure de données.
*Veuillez vous assurer que la structure de données est une liste ou un tableau.
* @param card L'objet de la carte dont vous voulez connaître le numéro
* @return Number dans la structure de l'objet argument
*/
int indexOf(Card card);
/**
*Renvoie le nombre de cartes.
* @nombre de cartes de retour
*/
int cardSize();
/**
*Ajoutez une carte à la structure de données.
*/
void addCard(Card card);
/**
*Retirez la carte de la structure de données.
*/
void removeCard(Card card);
/**
*Retirez la carte de la structure de données.
*/
void removeCard(int index);
/**
*Renvoie une carte dont le numéro et la marque correspondent.
*/
Card find(int number, Card.Mark mark);
/**
*Renvoie le numéro de la carte dont le numéro et la marque correspondent.
*/
int indexOf(int number, Card.Mark mark);
/**
*Renvoie la carte au numéro spécifié.
*L'élément n'est pas supprimé.
* @param index Le numéro de la carte que vous voulez
*/
Card getCard(int index);
/**
*Retirez la carte au numéro spécifié.
*La carte est supprimée de la structure de données.
* @param index Le numéro de la carte que vous voulez
*/
Card takeCard(int index);
}
De plus, je veux que la structure de données soit un tableau ou une liste, j'ai donc créé une interface pour le faire autant que possible.
De plus, puisqu'il est possible que des fonctions telles que l'extraction et la recherche puissent être partagées, préparez-les avec des méthodes statiques. (Je n'en ai pas besoin, mais je ne veux pas écrire le même processus encore et encore plus tard)
De plus, comme il s'agit d'une méthode statique, j'ai pour le moment une liste en argument, et s'il y a un changement, je renvoie la liste.
Les paires et les taples ne sont pas dans la norme java, je les ai donc remplacés par Map.Entry.
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public interface CardSheaf {
//Abréviation
static int indexOf(List<Card> list, Card card){
int i;
for (i = 0; i < list.size(); i++) {
Card c = list.get(i);
if(c == null) continue;
if(c.equals(card)) break;
}
if(i == list.size()) return -1;
return i;
}
static List<Card> addCard(List<Card> list, Card card){
list.add(card);
return list;
}
static List<Card> removeCard(List<Card> list, Card card){
list.remove(card);
return list;
}
static List<Card> removeCard(List<Card> list, int index){
list.remove(index);
return list;
}
static Card find(List<Card> list, int number, Card.Mark mark){
for (Card card: list){
if(card == null) continue;
if(card.getMark() == mark && card.getNumber() == number) return card;
}
return null;
}
static int indexOf(List<Card> list, int number, Card.Mark mark){
int i;
for (i = 0; i < list.size(); i++){
Card card = list.get(i);
if(card == null) continue;
if(card.getMark() == mark && card.getNumber() == number) break;
}
if(i == list.size()) return -1;
return i;
}
static Card getCard(List<Card> list, int index){
return list.get(index);
}
static Map.Entry<List<Card>, Card> takeCard(List<Card> list, int index){
Card card = list.get(index);
list.remove(card);
return new HashMap.SimpleEntry<List<Card>, Card>(list, card);
}
Recommended Posts