Liebe Java-Freunde,
nachdem ich mich jetzt ungelogen 3 Tage damit rumgeärgert habe, hoffe ich jetzt auf Hilfe von Euch
Zunächst eine ungefähre Beschreibung meines Problems:
Ich versuche mich zu Zeit an einer Art Advance Wars 2 (Gameboy Advance Spiel - Strategie, Rundenbasierend) für den PC. Nun mächte ich dem Spieler zeigen, welche Felder eine Einheit in diesem Zug betreten kann und vorallem möchte ich auch wissen, welche Felder dafür alle überschritten werden müssen. Entsprechend weise ich jedem der Felder eine Liste von Feldern zu, die dort hin überschritten werden müssen (beginn und ende eingeschlossen).
Dabei verwende ich folgenden Code für die Methode:
Allerdings ist der Output der Folgende (Im Beispiel eine Infantrieeinheit mit 3 moveDistance):
Aktuelle Länge: 0
Liste 1 0 mit Länge 2 ersetzt! Neuer Weg:
0 0
1 0
Aktuelle Länge: 0
Liste 2 0 mit Länge 3 ersetzt! Neuer Weg:
0 0
1 0
2 0
Aktuelle Länge: 0
Liste 1 1 mit Länge 4 ersetzt! Neuer Weg:
0 0
1 0
2 0
1 1
Aktuelle Länge: 0
Liste 0 1 mit Länge 5 ersetzt! Neuer Weg:
0 0
1 0
2 0
1 1
0 1
Aktuelle Länge: 0
Liste 2 1 mit Länge 6 ersetzt! Neuer Weg:
0 0
1 0
2 0
1 1
0 1
2 1
Aktuelle Länge: 6
Liste 1 0 mit Länge 7 ersetzt! Neuer Weg:
0 0
1 0
2 0
1 1
0 1
2 1
1 0
Aktuelle Länge: 0
Liste 1 2 mit Länge 8 ersetzt! Neuer Weg:
0 0
1 0
2 0
1 1
0 1
2 1
1 0
1 2
Aktuelle Länge: 8
Liste 0 1 mit Länge 9 ersetzt! Neuer Weg:
0 0
1 0
2 0
1 1
0 1
2 1
1 0
1 2
0 1
Aktuelle Länge: 9
Liste 1 1 mit Länge 10 ersetzt! Neuer Weg:
0 0
1 0
2 0
1 1
0 1
2 1
1 0
1 2
0 1
1 1
Aktuelle Länge: 10
Liste 0 1 mit Länge 11 ersetzt! Neuer Weg:
0 0
1 0
2 0
1 1
0 1
2 1
1 0
1 2
0 1
1 1
0 1
Aktuelle Länge: 11
Liste 2 1 mit Länge 12 ersetzt! Neuer Weg:
0 0
1 0
2 0
1 1
0 1
2 1
1 0
1 2
0 1
1 1
0 1
2 1
Aktuelle Länge: 12
Liste 1 0 mit Länge 13 ersetzt! Neuer Weg:
0 0
1 0
2 0
1 1
0 1
2 1
1 0
1 2
0 1
1 1
0 1
2 1
1 0
Aktuelle Länge: 13
Liste 1 2 mit Länge 14 ersetzt! Neuer Weg:
0 0
1 0
2 0
1 1
0 1
2 1
1 0
1 2
0 1
1 1
0 1
2 1
1 0
1 2
Aktuelle Länge: 0
Liste 0 2 mit Länge 15 ersetzt! Neuer Weg:
0 0
1 0
2 0
1 1
0 1
2 1
1 0
1 2
0 1
1 1
0 1
2 1
1 0
1 2
0 2
Aktuelle Länge: 15
Liste 1 2 mit Länge 16 ersetzt! Neuer Weg:
0 0
1 0
2 0
1 1
0 1
2 1
1 0
1 2
0 1
1 1
0 1
2 1
1 0
1 2
0 2
1 2
Aktuelle Länge: 16
Liste 0 1 mit Länge 17 ersetzt! Neuer Weg:
0 0
1 0
2 0
1 1
0 1
2 1
1 0
1 2
0 1
1 1
0 1
2 1
1 0
1 2
0 2
1 2
0 1
Erwarten würde ich jedoch einen Output, der 1. für jedes Feldunterschiedlich ist (gleicher Weg kann nicht zu unterschiedlichen Feldern führen) und, der 2. immer kürzer als 5 Felder ist.
Könnt ihr mir helfen? Falls ihr mehr Informationen braucht fragt, mir ist klar, dass es eine recht komplexe Frage ist.
Cheers
Gurke
nachdem ich mich jetzt ungelogen 3 Tage damit rumgeärgert habe, hoffe ich jetzt auf Hilfe von Euch
Zunächst eine ungefähre Beschreibung meines Problems:
Ich versuche mich zu Zeit an einer Art Advance Wars 2 (Gameboy Advance Spiel - Strategie, Rundenbasierend) für den PC. Nun mächte ich dem Spieler zeigen, welche Felder eine Einheit in diesem Zug betreten kann und vorallem möchte ich auch wissen, welche Felder dafür alle überschritten werden müssen. Entsprechend weise ich jedem der Felder eine Liste von Feldern zu, die dort hin überschritten werden müssen (beginn und ende eingeschlossen).
Dabei verwende ich folgenden Code für die Methode:
Java:
public void showPaths(Integer type, Integer moveDistance, Integer unitId, List <Field> fieldListGot) {
if (resistance[type] != -1) {
//WENN FELD FÜR DIE EINHEIT BEGEHBAR
moveDistance -= resistance[type];
//Vom verbliebenen Laufweg abziehen
if (this.getUnit() == null || (this.getUnit().getId() == unitId && this.getUnit().getHealth()<10)) {
//Wenn keine Einheit auf dem Feld oder eine Einheit gleichen Types (Unite-Funktion)
if (this.fieldList.size() >= fieldListGot.size()-1 || this.fieldList.isEmpty()) {
//Wenn die alte Liste länger als der neue Weg oder es keinen alten Weg gibt
System.out.println("Aktuelle Länge: "+this.fieldList.size());
fieldListGot.add(this);
this.setFieldList(fieldListGot);
System.out.println("Liste "+getFieldX()+" "+getFieldY()+" mit Länge "+this.fieldList.size()+" ersetzt! Neuer Weg:");
for (int i=0; i<fieldListGot.size();i++) {
System.out.println(fieldListGot.get(i).getFieldX()+" "+fieldListGot.get(i).getFieldY());
}
}
this.path.setVisible(true);
if (moveDistance >0) {
// WENN NOCH LAUFWEG ÜBRIG
if (this.getFieldX()>0) {
//WENN FELD LINKS EXISTIERT
screen.fieldCollection.getField(getFieldX()-1, getFieldY()).showPaths(type, moveDistance, unitId,this.getFieldList());
//Methode auf linkem Feld aufrufen...
}
// usw...
if (this.getFieldX()<screen.fieldCollection.getFieldLength()-1) {
screen.fieldCollection.getField(getFieldX()+1, getFieldY()).showPaths(type, moveDistance, unitId,this.getFieldList());
}
if (this.getFieldY()>0) {
screen.fieldCollection.getField(getFieldX(), getFieldY()-1).showPaths(type, moveDistance, unitId,this.getFieldList());
}
if (this.getFieldY()<screen.fieldCollection.getFieldHeight()-1) {
screen.fieldCollection.getField(getFieldX(), getFieldY()+1).showPaths(type, moveDistance, unitId,this.getFieldList());
}
}
}
}
}
Allerdings ist der Output der Folgende (Im Beispiel eine Infantrieeinheit mit 3 moveDistance):
Aktuelle Länge: 0
Liste 1 0 mit Länge 2 ersetzt! Neuer Weg:
0 0
1 0
Aktuelle Länge: 0
Liste 2 0 mit Länge 3 ersetzt! Neuer Weg:
0 0
1 0
2 0
Aktuelle Länge: 0
Liste 1 1 mit Länge 4 ersetzt! Neuer Weg:
0 0
1 0
2 0
1 1
Aktuelle Länge: 0
Liste 0 1 mit Länge 5 ersetzt! Neuer Weg:
0 0
1 0
2 0
1 1
0 1
Aktuelle Länge: 0
Liste 2 1 mit Länge 6 ersetzt! Neuer Weg:
0 0
1 0
2 0
1 1
0 1
2 1
Aktuelle Länge: 6
Liste 1 0 mit Länge 7 ersetzt! Neuer Weg:
0 0
1 0
2 0
1 1
0 1
2 1
1 0
Aktuelle Länge: 0
Liste 1 2 mit Länge 8 ersetzt! Neuer Weg:
0 0
1 0
2 0
1 1
0 1
2 1
1 0
1 2
Aktuelle Länge: 8
Liste 0 1 mit Länge 9 ersetzt! Neuer Weg:
0 0
1 0
2 0
1 1
0 1
2 1
1 0
1 2
0 1
Aktuelle Länge: 9
Liste 1 1 mit Länge 10 ersetzt! Neuer Weg:
0 0
1 0
2 0
1 1
0 1
2 1
1 0
1 2
0 1
1 1
Aktuelle Länge: 10
Liste 0 1 mit Länge 11 ersetzt! Neuer Weg:
0 0
1 0
2 0
1 1
0 1
2 1
1 0
1 2
0 1
1 1
0 1
Aktuelle Länge: 11
Liste 2 1 mit Länge 12 ersetzt! Neuer Weg:
0 0
1 0
2 0
1 1
0 1
2 1
1 0
1 2
0 1
1 1
0 1
2 1
Aktuelle Länge: 12
Liste 1 0 mit Länge 13 ersetzt! Neuer Weg:
0 0
1 0
2 0
1 1
0 1
2 1
1 0
1 2
0 1
1 1
0 1
2 1
1 0
Aktuelle Länge: 13
Liste 1 2 mit Länge 14 ersetzt! Neuer Weg:
0 0
1 0
2 0
1 1
0 1
2 1
1 0
1 2
0 1
1 1
0 1
2 1
1 0
1 2
Aktuelle Länge: 0
Liste 0 2 mit Länge 15 ersetzt! Neuer Weg:
0 0
1 0
2 0
1 1
0 1
2 1
1 0
1 2
0 1
1 1
0 1
2 1
1 0
1 2
0 2
Aktuelle Länge: 15
Liste 1 2 mit Länge 16 ersetzt! Neuer Weg:
0 0
1 0
2 0
1 1
0 1
2 1
1 0
1 2
0 1
1 1
0 1
2 1
1 0
1 2
0 2
1 2
Aktuelle Länge: 16
Liste 0 1 mit Länge 17 ersetzt! Neuer Weg:
0 0
1 0
2 0
1 1
0 1
2 1
1 0
1 2
0 1
1 1
0 1
2 1
1 0
1 2
0 2
1 2
0 1
Erwarten würde ich jedoch einen Output, der 1. für jedes Feldunterschiedlich ist (gleicher Weg kann nicht zu unterschiedlichen Feldern führen) und, der 2. immer kürzer als 5 Felder ist.
Könnt ihr mir helfen? Falls ihr mehr Informationen braucht fragt, mir ist klar, dass es eine recht komplexe Frage ist.
Cheers
Gurke