Deklarieren Sie eine abstrakte Klasse MoveType
und eine abstrakte Klasse Monster
.
Geben Monster
Methode setPosition(int x, int y)
. Geben Sie MoveType
ein Feld, das eine Variable des Typs Monster
enthält. Make MoveType
haben abstrakte Methoden zur Bestimmung, wie und wo auf der aktuellen Position, Spielerposition, etc. zu bewegen. Monster
kann eine Methode namens move()
, die die abstrakten Methoden ruft und dann ruft Monster.setPosition()
, um die gewählte Bewegung zu implementieren.
Dann deklarieren Implementierungen von MoveType
wie MoveA
, MoveB
, etc. Die sollten ihre eigene interne Logik verwenden, um zu bestimmen, wie man sich bewegt.
Stellen Sie sicher, erlauben Monster
eine Methode zu haben, die Sie die Monster
‚s MoveType
festlegen können.
Dieser Ansatz gibt Ihnen die Flexibilität, weitere Monster hinzuzufügen oder Typen zu verschieben, ohne die zugrunde liegende Struktur zu ändern. Alles, was Sie tun müssen, ist eine neue MoveType
definieren, implementieren Sie die Logik für wohin zu verschieben, und übergeben Sie eine Instanz der neuen an eine Instanz von Monster
. Sie könnten sogar den Bewegungstyp eines Monster
in der Mitte des Spiels basierend auf einer Bedingung ändern (vielleicht, wenn es dem Spieler nahe genug kommt).
Ungeprüfte Beispiel unten, aber die Idee sollte fest sein:
public abstract class Monster {
public int xPosition;
public int yPosition;
public MoveType move;
public Monster(int x, int y, MoveType move) {
xPosition = x;
yPosition = y;
this.move = move;
}
public void setPosition(int x, int y) {
xPosition = x;
yPosition = y;
}
public void move() {
setPosition(move.determineXMove(), move.determineYMove());
}
}
-
public abstract class MoveType {
public Monster monster;
public MoveType(Monster monster) {
this.monster = monster;
}
public abstract void determineXMove();
public abstract void determineYMove();
}
-
public class MoveLeft extends MoveType() {
@Override
public void determineXMove() {
return monster.xPosition - 1;
}
@Override
public void determineYMove() {
return monster.yPosition;
}
}
Mit der oben würden Sie ein Monster erklären, es vorbei ein neue Startposition und MoveLeft
Objekt.Dann würden Sie fortwährend seine move()
Methode innerhalb Ihrer Spielschleife benennen.
Trotz der Tatsache, dass die anderen Antworten ziemlich handlich sind, akzeptiere ich diese wegen des ** ECS ** -Musters - das ich bereits durch Ashley verwende, wie ich weise erwähnte - Danke euch allen! – sonirico