Hallo,
wir sollen ein kleines Spiel programmieren, bei dem mit Schachfiguren über ein Schachbrett gezogen werden muss. Die Angabe des Zugs erfolgt allerdings nicht normal mit "von E 6 auf A 2" sondern mit einer Richtungsangabe im Sinne von "/" (nach rechts oben oder links unten) und einer Reichweite (-int würde nach links unten, +int nach rechts oben ziehen). Eine Methode soll Züge, die außerhalb des Schachbretts führen würden korrigieren, indem sie die Figur auf das im Zug letztmöglich Feld setzt.
Nun mein Problem:
Die Methode für vertikale/horizontale Züge ist recht einfach umzusetzen. Allerdings finde ich keinen Weg, es für diagonale Züge zu implementieren. Habt ihr Anregungen?
Mal die Zug-Methode der Dame und der Anfang der Korrigierungsmethode:
Ist mein Ansatz so überhaupt sinnvoll oder kann das nur gegen den Baum laufen?
wir sollen ein kleines Spiel programmieren, bei dem mit Schachfiguren über ein Schachbrett gezogen werden muss. Die Angabe des Zugs erfolgt allerdings nicht normal mit "von E 6 auf A 2" sondern mit einer Richtungsangabe im Sinne von "/" (nach rechts oben oder links unten) und einer Reichweite (-int würde nach links unten, +int nach rechts oben ziehen). Eine Methode soll Züge, die außerhalb des Schachbretts führen würden korrigieren, indem sie die Figur auf das im Zug letztmöglich Feld setzt.
Nun mein Problem:
Die Methode für vertikale/horizontale Züge ist recht einfach umzusetzen. Allerdings finde ich keinen Weg, es für diagonale Züge zu implementieren. Habt ihr Anregungen?
Mal die Zug-Methode der Dame und der Anfang der Korrigierungsmethode:
Java:
private String[] möglicheRichtungen = {"/", "\\", "-", "|"};
Java:
public void ziehe(String richtung, int weite, Spielfeld brett)
{
boolean inputOk = false;
int auswahl = 10;
for(int i = 0; i < möglicheRichtungen.length; i++)
if(möglicheRichtungen[i].equals(richtung))
{
inputOk = true;
auswahl = i;
}
if(inputOk)
{
switch(auswahl)
{
case 0:
setxPosition(getxPosition() + weite);
setyPosition(getyPosition() + weite);
break;
case 1:
setxPosition(getxPosition() - weite);
setyPosition(getyPosition() + weite);
break;
case 2:
setxPosition(getxPosition() + weite);
korrigiere(brett, true, false, false);
break;
case 3:
setyPosition(getyPosition() + weite);
korrigiere(brett, false, true, false);
break;
default:
System.out.println("Zug nicht moeglich!");
break;
}
}
else
{
System.out.println("Zug nicht moeglich!");
}
Java:
public void korrigiere(Spielfeld brett, boolean horizontal, boolean vertikal,
boolean diagonal)
{
if(horizontal)
{
while(getxPosition() < 0)
setxPosition(getxPosition() + 1);
while(getxPosition() > brett.getZeilen())
setxPosition(getxPosition() - 1);
}
if(vertikal)
{
while(getyPosition() < 0)
setyPosition(getyPosition() + 1);
while(getyPosition() > brett.getSpalten())
setyPosition(getyPosition() - 1);
}
}
Ist mein Ansatz so überhaupt sinnvoll oder kann das nur gegen den Baum laufen?