Am Ende des letzten Artikels habe ich ein einfaches UML-Diagramm gezeigt. In zukünftigen Artikeln möchte ich es von unten nach oben in der Abbildung implementieren.
Lassen Sie uns zunächst eine Mindestkartenklasse erstellen. BlackPoker ist ein Spiel, das Spielkarten verwendet, daher benötigen Sie Markierungen und Zahlen. Es gibt vier Arten von Marken: ♠, ♦, ♥ und ♣, aber da dieses Spiel einen Joker verwendet, nehmen wir an, dass es fünf Arten von Marken gibt. Der Markentyp kann int sein, es ist jedoch wünschenswert, nicht so viele ungültige Werte wie möglich einzugeben. Daher definieren wir eine Aufzählung.
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;
}
}
Es ist noch nicht fertig, oder? In der Kartenklasse müssen zusätzlich zu den Informationen auf der Trump-Karte auch die im Spiel enthaltenen virtuellen Daten gespeichert werden.
Die für jede Karte erforderlichen Parameter wie Barrieren und Soldaten ändern sich je nach Situation. Dieses Mal bitten wir Sie zur Vereinfachung der Implementierung, Parameter in allen Situationen anzugeben. Dies liegt daran, dass für die Barriere keine anderen Parameter als die Kartennummer erforderlich sind, sodass die Kartenklasse bestenfalls nur die Parameter für Soldaten enthält.
Dieses Mal werden die folgenden Daten gespeichert.
Parameter | Schimmel | Ergänzung |
---|---|---|
Offensivkraft | int | Es ist möglich, dass es sich ändert, wenn der Zauber in der Zukunft implementiert wird. |
Beruf | Enumerator | Effizienter als jedes Mal Zahlen zu vergleichen |
Ist es möglich anzugreifen | boolean | |
Ist es aufgeladen | boolean | Wird sowohl von Barrieren als auch von Soldaten verwendet |
Kartenorientierung | boolean | Wenn es der Rücken ist, ist es eine Barriere |
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;
}
}
Nachdem alle öffentlichen Variablen wahrscheinlich wütend werden, werde ich sie richtig schreiben.
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;
//Abkürzung
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;
}
}
Implementieren Sie außerdem Clonable.
public class Card implements Cloneable {
//Abkürzung
@Override
public Card clone(){
return new Card(number, attack, canAttack, mark, isCharge, isFront, job);
}
}
Nächstes Mal werde ich es in meiner Hand oder meinem Deck schaffen.
Recommended Posts