À la fin du dernier article, j'ai montré un simple diagramme UML. Dans les prochains articles, j'aimerais l'implémenter du bas vers le haut de la figure.
Tout d'abord, faisons une classe de carte minimale. BlackPoker est un jeu qui utilise des cartes à jouer, vous aurez donc besoin de marques et de chiffres. Il existe quatre types de marques: ♠, ♦, ♥ et ♣, mais comme ce jeu utilise un joker, supposons qu'il existe cinq types de marques. Le type de marque peut être int, mais il est souhaitable de ne pas entrer autant que possible des valeurs invalides, nous allons donc définir une énumération.
public class Card {
public int number;
public Mark mark;
public Card(int number, Mark mark){
this.number = number;
this.mark = mark;
}
public enum Mark {
SPADE, DIAMOND, HEART, CLOVER, JOKER;
}
}
Ce n'est pas encore fini, non? Dans la classe des cartes, en plus des informations détenues par la carte Trump, il est également nécessaire de conserver les données virtuelles contenues dans le jeu.
Les paramètres requis pour chaque carte, tels que les barrières et les soldats, changeront en fonction de la situation. Cette fois, pour faciliter la mise en œuvre, nous vous demanderons d'avoir des paramètres dans toutes les situations. En effet, la barrière ne nécessite aucun paramètre autre que le numéro de carte, de sorte que la classe Card n'a au mieux que les paramètres pour les soldats.
Cette fois, nous conserverons les données suivantes.
Paramètres | Moule | Supplément |
---|---|---|
Puissance offensive | int | Il est possible que cela change lorsque le sort sera mis en œuvre dans le futur. |
Métier | Recenseur | Plus efficace que de comparer des nombres à chaque fois |
Est-il possible d'attaquer | boolean | |
Est-ce chargé | boolean | Utilisé à la fois par les barrières et les soldats |
Orientation de la carte | boolean | Si c'est le dos, c'est une barrière |
import static blackpoker.Card.Job.*;
public class Card {
public int number;
public int attack;
public boolean canAttack;
public Mark mark;
public boolean isCharge;
public boolean isFront;
public Job job;
public Card(int number, Mark mark) {
this.number = number;
this.attack = this.number;
this.canAttack = false;
this.mark = mark;
this.isCharge = true;
this.isFront = false;
this.job = null;
if (this.number >= 2 && this.number <= 10) {
this.job = SOLDIER;
} else if (this.number >= 11 && this.number <= 13) {
this.job = HERO;
} else if (this.number == 1) {
this.job = ACE;
this.canAttack = true;
} else if (this.number == 0) {
this.job = MAGICIAN;
this.canAttack = true;
}
}
enum Mark {
SPADE, DIAMOND, HEART, CLOVER, JOKER;
}
enum Job {
SOLDIER, HERO, ACE, MAGICIAN;
}
}
Après que toutes les variables publiques risquent de se fâcher, je vais donc les écrire correctement.
import static blackpoker.Card.Job.*;
public class Card {
private int number;
private int attack;
private boolean canAttack;
private Mark mark;
private boolean isCharge;
private boolean isFront;
private Job job;
//Abréviation
public int getNumber() {
return number;
}
private void setNumber(int number) {
this.number = number;
}
public int getAttack() {
return attack;
}
public void setAttack(int attack) {
this.attack = attack;
}
public boolean isCanAttack() {
return canAttack;
}
public void setCanAttack(boolean canAttack) {
this.canAttack = canAttack;
}
public Mark getMark() {
return mark;
}
private void setMark(Mark mark) {
this.mark = mark;
}
public boolean isCharge() {
return isCharge;
}
public void setCharge(boolean charge) {
isCharge = charge;
}
public boolean isFront() {
return isFront;
}
public void setFront(boolean front) {
isFront = front;
}
public Job getJob() {
return job;
}
private void setJob(Job job) {
this.job = job;
}
}
Mettez également en œuvre Clonable.
public class Card implements Cloneable {
//Abréviation
@Override
public Card clone(){
return new Card(number, attack, canAttack, mark, isCharge, isFront, job);
}
}
La prochaine fois, je le ferai dans ma main ou ma plate-forme.
Recommended Posts