import java.io.*; //----------------------------------------------------- // Klasse DistanzSpiel / Hauptprogramm //----------------------------------------------------- public class DistanzSpiel { // Attribute DistanzSpieler spielerWeiss, spielerSchwarz; DistanzBrett brett; DistanzRegeln regeln; // Methoden // Konstruktor (Initialisierung eines Spiels) public DistanzSpiel(DistanzSpieler a, DistanzSpieler b, DistanzBrett brett, DistanzRegeln regeln ) { this.spielerWeiss = a; this.spielerSchwarz = b; this.brett = brett; this.regeln = regeln; } // Durchfuehrung eines Spiels public void spielen() { // Spieler Weiss beginnt DistanzSpieler aktSpieler = this.spielerWeiss; DistanzSpielzug zug = null; this.brett.gebeSpielbrettAus(); // abwechselndes Ziehen bis Spielende erreicht ist do { if (aktSpieler == this.spielerWeiss) System.out.println("Spieler Weiss ist am Zug!"); else System.out.println("Spieler Schwarz ist am Zug!"); // legalen Spielzug ermitteln und ausfuehren zug = aktSpieler.liefereNaechstenSpielzug(zug); while (!this.regeln.spielzugOK(zug, aktSpieler)) { System.out.println("Ungueltig; neue Eingabe!"); zug=aktSpieler.liefereNaechstenSpielzug(zug); } this.brett.fuehreSpielzugAus(zug); this.brett.gebeSpielbrettAus(); // der andere Spieler ist nun am Zug if (aktSpieler == spielerWeiss) aktSpieler = this.spielerSchwarz; else aktSpieler = this.spielerWeiss; } while (!this.regeln.spielEnde(aktSpieler)); // Spiel ist zuende this.regeln.gebeSiegerBekannt(); } // Hauptprogramm; // hier startet das Distanz-Programm public static void main(String[] args) { DistanzSpieler weiss = new DistanzSpieler(DistanzFigur.WEISS); DistanzSpieler schwarz = new DistanzSpieler(DistanzFigur.SCHWARZ); DistanzBrett brett = new DistanzBrett(); DistanzRegeln regeln = new DistanzRegeln(brett, weiss, schwarz); DistanzSpiel parob = new DistanzSpiel(weiss,schwarz,brett,regeln); parob.spielen(); } } //----------------------------------------------------- // Klasse DistanzBrett //----------------------------------------------------- class DistanzBrett { /* gewaehlte Datenstruktur: 0 1 2 3 4 5 6 7 +-+-+-+-+-+-+-+-+ 0 | |h|k| |h|h| | | +-+-+-+-+-+-+-+-+ 1 | | | | | | | | | +-+-+-+-+-+-+-+-+ 2 | | | | | | | | | +-+-+-+-+-+-+-+-+ 3 | | | | | | | | | +-+-+-+-+-+-+-+-+ 4 | | | | | | | | | +-+-+-+-+-+-+-+-+ 5 | | | | | | | | | +-+-+-+-+-+-+-+-+ 6 | | | | | | | | | +-+-+-+-+-+-+-+-+ 7 | | |H|H| |K|H| | +-+-+-+-+-+-+-+-+ repraesentiert als 8 x 8 - Matrix; Schwarze Spielfiguren: h = Helfer k = Koenig g = Gefangener Weisse Spielfiguren: H = Helfer K = Koenig G = Gefangener */ // Konstanten public final static int GROESSE = 8; public final static int HELFER = 3; // Attribute DistanzFeld[][] brett; // Methoden // Konstruktor (Initialisierung des Distanz-Brettes) public DistanzBrett() { this.brett = new DistanzFeld[GROESSE][GROESSE]; for (int z=0; z= DistanzBrett.GROESSE || zug.vonWo().liefereSpalte() >= DistanzBrett.GROESSE || zug.nachWohin().liefereZeile() < 0 || zug.nachWohin().liefereSpalte() < 0 || zug.nachWohin().liefereZeile() >= DistanzBrett.GROESSE || zug.nachWohin().liefereSpalte() >= DistanzBrett.GROESSE) { return false; } // Figur darf nicht stehenbleiben ! if (zug.vonWo().identisch(zug.nachWohin())) { return false; } // steht auf dem angegebenen Feld eine korrekte Figur ? DistanzFeld vonFeld = this.brett.liefereFeld(zug.vonWo()); if (vonFeld.istLeer() || (spieler.istWeiss() != vonFeld.liefereFigur().istWeiss()) ) { return false; } // Gefangene koennen nicht verschoben werden if (vonFeld.liefereFigur().istGefangen()) { return false; } // stimmt die Distanz ? int zeilenDistanz = abs(zug.vonWo().liefereZeile() - zug.nachWohin().liefereZeile()); int spaltenDistanz = abs(zug.vonWo().liefereSpalte() - zug.nachWohin().liefereSpalte()); DistanzFigur[] figuren = this.brett.liefereFiguren(spieler); boolean distanzOk = false; distanzUeberpruefung: for (int erste=0; erste= 0 ? zahl : -zahl; } } //----------------------------------------------------- // Klasse DistanzSpieler //----------------------------------------------------- class DistanzSpieler { // Attribute boolean istWeiss; // Methoden // Konstruktor (Initialisierung eines Spielers) public DistanzSpieler(boolean istWeiss) { this.istWeiss = istWeiss; } // Ueberpruefung, ob es Spieler A ist public boolean istWeiss() { return this.istWeiss; } // erfragt und liefert naechsten Spielzug des // Spielers; uebergeben wird der letzte Zug des // Gegners public DistanzSpielzug liefereNaechstenSpielzug (DistanzSpielzug gegnerZug) { return this.erfrageNaechstenSpielzugBeimSpieler(); } // erfragt naechsten Spielzug beim Spieler public DistanzSpielzug erfrageNaechstenSpielzugBeimSpieler() { System.out.println("von Zeile (0-" + (DistanzBrett.GROESSE-1) + "): "); int vonZeile = this.readInt(); System.out.println("von Spalte (0-" + (DistanzBrett.GROESSE-1) + "): "); int vonSpalte = this.readInt(); System.out.println("nach Zeile (0-" + (DistanzBrett.GROESSE-1) + "): "); int nachZeile = this.readInt(); System.out.println("nach Spalte (0-" + (DistanzBrett.GROESSE-1) + "): "); int nachSpalte = this.readInt(); return new DistanzSpielzug(vonZeile, vonSpalte, nachZeile, nachSpalte); } // Zahl einlesen public static int readInt() { try { BufferedReader input = new BufferedReader(new InputStreamReader(System.in)); String eingabe = input.readLine(); Integer stringToInt = new Integer(eingabe); return stringToInt.intValue(); } catch (Exception e) { return 0; } } }