hi,
ich stehe momentan vor einem kniffligen problem. Das ergebnis soll später einmal ein spiel werden. sinn des spieles ist, türme zu bauen, die unterschiedliche fähigkeiten haben, und auf gegner schießen.
also hab ich mich dran gemacht und erstmal eine abstrakte klasse Tower vorbereitet, die alle Türme abdeckt.
Extrem vereinfachtes Beispiel, um das wesentliche zu verdeutlichen:
der grund wieso ich jetzt RANGES statisch in die klasse LaserTower gesetzt habe, ist, dass ich nicht die ganzen arrays jedem objekt übergeben will. das wäre speicherplatzverschwendung. es reicht ja im prinzip, die nur einmal für jede unterklasse zu definieren.
was mir daran aber nicht gefällt ist, das ich die funktion getRangeValue in jeder Tower-UnterKlasse neu implementieren muss, und zwar immer mit dem selben code! die methode in der klasse Tower zu definieren bringt wieder das problem, das ich dann dort überprüfen muss, zu welcher turm-klasse das einzelne objekt gehört und das würde bedeuten, ich müsste bei jeder neuen tower-unterklasse die klasse Tower anpassen, was natürlich auch nicht der sinn der sache ist.
wie würdet ihr das designen? profesionelle meinungen?
ich stehe momentan vor einem kniffligen problem. Das ergebnis soll später einmal ein spiel werden. sinn des spieles ist, türme zu bauen, die unterschiedliche fähigkeiten haben, und auf gegner schießen.
also hab ich mich dran gemacht und erstmal eine abstrakte klasse Tower vorbereitet, die alle Türme abdeckt.
Extrem vereinfachtes Beispiel, um das wesentliche zu verdeutlichen:
Code:
public abstract class Tower { // Attributes private byte maxRangeLevel; private byte currentRangeLevel; private int[] position; // Constructor public Tower(byte pMaxRangeLevel) { this.maxRangeLevel = pMaxRangeLevel; } // Getter public int getRangeLevel() { return currentRangeLevel; } abstract int getRangeValue(); public int[] getPosition() { return this.position; } // Methods public boolean upgradeRangeLevel() { if (this.currentRangeLevel < this.maxRangeLevel) { this.currentRangeLevel++; return true; } return false; } }
Code:
public class LaserTower extends Tower { public static final int RANGES[] = {100, 150, 250, 300, 500}; //range für level x puvilc static final byte MAX_RANGE_LEVEL = 5; public Laser() { super(MAX_RANGE_LEVEL); } @Override int getRangeValue() { return ranges[this.getRangeLevel()-1]; } }
was mir daran aber nicht gefällt ist, das ich die funktion getRangeValue in jeder Tower-UnterKlasse neu implementieren muss, und zwar immer mit dem selben code! die methode in der klasse Tower zu definieren bringt wieder das problem, das ich dann dort überprüfen muss, zu welcher turm-klasse das einzelne objekt gehört und das würde bedeuten, ich müsste bei jeder neuen tower-unterklasse die klasse Tower anpassen, was natürlich auch nicht der sinn der sache ist.
wie würdet ihr das designen? profesionelle meinungen?
Comment