Hey Leute,
haben über die Weihnachts"ferien" eine etwas größere Aufgabe aufgekommen und ich weiß leider erstmal nicht so recht, wie ich anfangen soll. Habe wegen des Themas schon etwas gegoogelt und auch schon hier mit der Forensuche mir ein paar Sachen durchgelesen, aber im Enddefekt hat es mir nichts gebracht, da ich nur auf zu komplizierte Sachen gestoßen bin, die ich noch nicht verstehe und die auch Teilweise mit Applet und so'n Zeugs sind und davon habe ich bisher leider NULL Ahnung. (würde mir wünschen, das schon alles zu verstehen.)
Könntet ihr mir vielleicht ein paar Tipps zum Herangehen an die Aufgabe geben? Das wäre echt supi nett.
Hier nun die Aufgabe:
Aufgabe 1 (20 Punkte) Projekt: XXO
Diese Aufgabe soll zeigen, dass man mit dem bisher in dieser Veranstaltung gelernten Wissen
auch gr¨ oßere Projekte realisieren kann.
Sie sollen nun das bekannte Spiel XXO programmieren. Dieses ist auch unter weiteren Namen,
wie “Drei gewinnt”, “Tic, Tac, Toe”, “Kreis und Kreuz” oder “Noughts and Crosses” bekannt.
Falls Ihnen die Regeln nicht bekannt sind, so sind diese f¨ ur Sie hier kurz zusammmengefasst:
1. Gespielt wird auf einem Feld in der Gr¨ oße 3x3, das zu Anfang noch leer ist.
2. Es gibt 2 Parteien: “X” und “O”
3. Jede Partei darf abwechselnd auf ein noch nicht besetztes Feld sein Zeichen setzen.
4. Der Spieler mit dem “X” beginnt.
5. Wer zuerst 3 Felder in einer Reihe hat gewinnt. (Dies ist in den 3 waagerechten Zeilen,
den 3 senkrechten Spalten und den beiden Diagonalen m¨ oglich.)
6. Sind alle 9 Felder besetzt und hat kein Spieler einen Sieg erringen k¨ onnen, so endet das
Spiel unentschieden.
Da diese Aufgabe etwas umfangreicher ist, haben Sie f¨ ur die L¨ osung insgesamt drei Wochen Zeit.
Um Ihren Fortschritt zu kontrollieren, haben wir zwei Unteraufgaben abgegrenzt. Sie k¨ onnen die
Vorgabe-L¨ osungen der Unteraufgaben von der ISIS-Seite der Veranstaltung als .class-Dateien
herunterladen, um die von Ihnen entwickelte L¨ osung der jeweils anderen Aufgabe zu testen. Da
die Schnittstelle zwischen beiden Teilen durch ein Interface eindeutig spezifiziert ist, m¨ ussen
Ihre Teill¨ osungen mit Teilen der Musterl¨ osung zu einem funktionsf¨ ahigen Programm kombiniert
werden k¨ onnen.
1 Frontend - 8 Punkte
Als erstes sollten Sie das Frontend (Benutzerschnittstelle) des Spiels implementieren und dabei
f¨ ur das Backend (Spiellogik) auf die vorgegebene Klasse zur¨ uckgreifen. Laden Sie sich zun¨ achst
die Vorgaben-Dateien von der ISIS-Seite der Veranstaltung herunter. In ihnen finden Sie die
bereits kompilierte Klasse Spielbrett, sowie die Quelldatei des SpielbrettInterface, das
von ihr implementiert wird. Durch dieses wird die Spiellogik in die folgenden drei Methoden
gekapselt:
1. public void ausgeben();
Diese Methode gibt das Spielbrett auf der Konsole aus.
2. public boolean setzen(String partei, int zeile, int spalte);
Mit dieser Methode wird ein neuer Stein auf das Spielfeld gesetzt. Dabei muss partei
entweder “X” oder “O” sein. zeile und spalte geben zusammen die Position des Steines
an, wobei das Feld links oben die Position (0,0) darstellt. Konnte der Stein erfolgreich
gesetzt werden, liefert die Methode true zur¨ uck. Gab es Probleme, z.B. falls ein Parame-
ter unzul¨ assig war, das Feld bereits belegt ist oder das Spiel bereits geendet hat, ist die
R¨ uckgabe false.
3. public boolean checkSieg();
Diese Methode liefert genau dann true zur¨ uck, wenn einer der Spieler eine Siegbedingung
erf¨ ullt. (Hinweis: Um festzustellen, welche Partei gewonnen hat, sollte man pr¨ ufen, wer
zuletzt einen Stein gesetzt hat.)
4. public boolean checkUnentschieden();
Diese Methode liefert genau dann true zur¨ uck, wenn das Spiel unentschieden geendet hat.
Ihre Aufgabe besteht nun darin, eine Klasse XXO zu implementieren, in deren main-Methode ein
Spielablauf gekapselt wird. Sie k¨ onnen sich dabei an der folgenden Vorgehensweise orientieren:
1. Erzeugen Sie ein Objekt der Klasse Spielbrett und speichern Sie es in einer Variable vom
Typ SpielbrettInterface. Neue Spielbretter werden vom Konstruktor automatisch mit
leeren Feldern initialisiert.
2. Zeigen Sie das aktuelle Spielbrett auf der Konsole.
3. Fragen Sie nun den Benutzer nach der Zeile und Spalte, in die das n¨ achste Zeichen gesetzt
werden soll. Sie k¨ onnen die statische Methode public int askInt(String frage) der
Klasse Terminal aus der Vorgabe dazu benutzen. Sie gibt den Parameterstring als Auf-
forderung auf der Konsole aus, liest dann alle Zeichen bis zum n¨ achsten Zeilenumbruch
(“Enter”) von der Tastatur ein und gibt dies als int zur¨ uck. (Hinweis: Um die Fehlerbe-
handlung bei nicht-Interger Eingabe m¨ ussen Sie sich nicht k ¨ ummern.)
4. Setzen Sie das Zeichen des aktuellen Spielers an der gew¨ unschten Position auf das Spielfeld.
Bei Erfolg schalten Sie den aktuellen Spieler um, bei Fehlschlag geben Sie eine Fehlermel-
dung aus.
5. ¨ Uberpr¨ ufen Sie, ob das Spiel zu Ende ist. Wenn ja, geben Sie das Ergebnis und das aktuelle
Spielbrett auf der Konsole aus und beenden Sie das Programm. Wenn nein, gehen Sie
zur¨ uck zu Punkt 2.
2 Backend - 8 Punkte
Im zweiten Teil sollen Sie das Backend (Spiellogik) des Spiels implementieren, f¨ ur das Sie im ers-
ten Teil die Vorgabe-Klasse verwendet haben. Es soll aus einer Klasse Spielbrett bestehen, welche
das SpielbrettInterface aus der Vorgabe implementiert. Die Spezifikation der Methoden sollte
Ihnen aus der ersten Aufgabe bereits bekannt sein. Ihre Methoden m¨ ussen diese so erf¨ ullen, dass
eine Kombination aus Ihrem Spielbrett und der Klasse XXO aus der Vorgabe ein lau ¨ ahiges,
korrektes Spiel ergibt. Sie d¨ urfen allerdings die Ausgabe nach Ihren W¨ unschen gestalten und
versch¨ onern, so lange das Spielbrett grunds¨ atzlich erkennbar ist. Ihre Klasse Spielbrett muss
auch einen parameterlosen Konstruktor besitzen, der das Spielfeld leer initialisiert. Sie d¨ urfen
bei Bedarf ¨ uber die Spezifikation hinaus nat¨ urlich beliebige Attribute und Hilfsmethoden dekla-
rieren, m¨ ussen diese dann aber vor direktem Zugri von ausserhalb der Klasse verstecken.
3 Kommentare - 4 Punkte
Je gr¨ oßer das Software-Projekt, desto wichtiger ist eine gute Dokumentation des Codes mit
Kommentaren. H¨ aufig m¨ ussen Programme von Entwicklern ausgebaut oder repariert werden,
die sie nicht selbst geschrieben haben. Achten Sie deshalb in diesem Aufgabenblatt besonders
darauf, Ihren Code so verst¨ andlich und vollst¨ andig zu kommentieren, dass ein fremder Pro-
grammierer auf Ihrem Wissensstand ihn nur anhand des Quellcodes sofort nachvollziehen und
an den richtigen Stellen modifizieren k¨ onnte. Zu einer guten Beschreibung mit Kommentaren
geh¨ oren die zul¨ assigen Zust¨ ande und Bedeutungen von Variablen, Attributen und Parametern,
die Auswirkungen von Methoden und nachvollziehbare Erkl¨ arungen von nicht-trivialen Pro-
grammabl¨ aufen.
___
Wer diese Aufgabe auf Grund des Unicodes nicht so gut lesen kann, für den habe ich sie als jpg nochmal im Anhang hinzugefügt.
Die Vorgaben, habe ich ebenso als Anhang hinzugefügt.
Ich bin für jede Hilfe echt sehr, sehr dankbar.
Schon einmal vielen Dank im Voraus.
Liebe Grüße,
schnosi.
P.S: Euch allen eine frohe Weihnachtszeit!
haben über die Weihnachts"ferien" eine etwas größere Aufgabe aufgekommen und ich weiß leider erstmal nicht so recht, wie ich anfangen soll. Habe wegen des Themas schon etwas gegoogelt und auch schon hier mit der Forensuche mir ein paar Sachen durchgelesen, aber im Enddefekt hat es mir nichts gebracht, da ich nur auf zu komplizierte Sachen gestoßen bin, die ich noch nicht verstehe und die auch Teilweise mit Applet und so'n Zeugs sind und davon habe ich bisher leider NULL Ahnung. (würde mir wünschen, das schon alles zu verstehen.)
Könntet ihr mir vielleicht ein paar Tipps zum Herangehen an die Aufgabe geben? Das wäre echt supi nett.
Hier nun die Aufgabe:
Aufgabe 1 (20 Punkte) Projekt: XXO
Diese Aufgabe soll zeigen, dass man mit dem bisher in dieser Veranstaltung gelernten Wissen
auch gr¨ oßere Projekte realisieren kann.
Sie sollen nun das bekannte Spiel XXO programmieren. Dieses ist auch unter weiteren Namen,
wie “Drei gewinnt”, “Tic, Tac, Toe”, “Kreis und Kreuz” oder “Noughts and Crosses” bekannt.
Falls Ihnen die Regeln nicht bekannt sind, so sind diese f¨ ur Sie hier kurz zusammmengefasst:
1. Gespielt wird auf einem Feld in der Gr¨ oße 3x3, das zu Anfang noch leer ist.
2. Es gibt 2 Parteien: “X” und “O”
3. Jede Partei darf abwechselnd auf ein noch nicht besetztes Feld sein Zeichen setzen.
4. Der Spieler mit dem “X” beginnt.
5. Wer zuerst 3 Felder in einer Reihe hat gewinnt. (Dies ist in den 3 waagerechten Zeilen,
den 3 senkrechten Spalten und den beiden Diagonalen m¨ oglich.)
6. Sind alle 9 Felder besetzt und hat kein Spieler einen Sieg erringen k¨ onnen, so endet das
Spiel unentschieden.
Da diese Aufgabe etwas umfangreicher ist, haben Sie f¨ ur die L¨ osung insgesamt drei Wochen Zeit.
Um Ihren Fortschritt zu kontrollieren, haben wir zwei Unteraufgaben abgegrenzt. Sie k¨ onnen die
Vorgabe-L¨ osungen der Unteraufgaben von der ISIS-Seite der Veranstaltung als .class-Dateien
herunterladen, um die von Ihnen entwickelte L¨ osung der jeweils anderen Aufgabe zu testen. Da
die Schnittstelle zwischen beiden Teilen durch ein Interface eindeutig spezifiziert ist, m¨ ussen
Ihre Teill¨ osungen mit Teilen der Musterl¨ osung zu einem funktionsf¨ ahigen Programm kombiniert
werden k¨ onnen.
1 Frontend - 8 Punkte
Als erstes sollten Sie das Frontend (Benutzerschnittstelle) des Spiels implementieren und dabei
f¨ ur das Backend (Spiellogik) auf die vorgegebene Klasse zur¨ uckgreifen. Laden Sie sich zun¨ achst
die Vorgaben-Dateien von der ISIS-Seite der Veranstaltung herunter. In ihnen finden Sie die
bereits kompilierte Klasse Spielbrett, sowie die Quelldatei des SpielbrettInterface, das
von ihr implementiert wird. Durch dieses wird die Spiellogik in die folgenden drei Methoden
gekapselt:
1. public void ausgeben();
Diese Methode gibt das Spielbrett auf der Konsole aus.
2. public boolean setzen(String partei, int zeile, int spalte);
Mit dieser Methode wird ein neuer Stein auf das Spielfeld gesetzt. Dabei muss partei
entweder “X” oder “O” sein. zeile und spalte geben zusammen die Position des Steines
an, wobei das Feld links oben die Position (0,0) darstellt. Konnte der Stein erfolgreich
gesetzt werden, liefert die Methode true zur¨ uck. Gab es Probleme, z.B. falls ein Parame-
ter unzul¨ assig war, das Feld bereits belegt ist oder das Spiel bereits geendet hat, ist die
R¨ uckgabe false.
3. public boolean checkSieg();
Diese Methode liefert genau dann true zur¨ uck, wenn einer der Spieler eine Siegbedingung
erf¨ ullt. (Hinweis: Um festzustellen, welche Partei gewonnen hat, sollte man pr¨ ufen, wer
zuletzt einen Stein gesetzt hat.)
4. public boolean checkUnentschieden();
Diese Methode liefert genau dann true zur¨ uck, wenn das Spiel unentschieden geendet hat.
Ihre Aufgabe besteht nun darin, eine Klasse XXO zu implementieren, in deren main-Methode ein
Spielablauf gekapselt wird. Sie k¨ onnen sich dabei an der folgenden Vorgehensweise orientieren:
1. Erzeugen Sie ein Objekt der Klasse Spielbrett und speichern Sie es in einer Variable vom
Typ SpielbrettInterface. Neue Spielbretter werden vom Konstruktor automatisch mit
leeren Feldern initialisiert.
2. Zeigen Sie das aktuelle Spielbrett auf der Konsole.
3. Fragen Sie nun den Benutzer nach der Zeile und Spalte, in die das n¨ achste Zeichen gesetzt
werden soll. Sie k¨ onnen die statische Methode public int askInt(String frage) der
Klasse Terminal aus der Vorgabe dazu benutzen. Sie gibt den Parameterstring als Auf-
forderung auf der Konsole aus, liest dann alle Zeichen bis zum n¨ achsten Zeilenumbruch
(“Enter”) von der Tastatur ein und gibt dies als int zur¨ uck. (Hinweis: Um die Fehlerbe-
handlung bei nicht-Interger Eingabe m¨ ussen Sie sich nicht k ¨ ummern.)
4. Setzen Sie das Zeichen des aktuellen Spielers an der gew¨ unschten Position auf das Spielfeld.
Bei Erfolg schalten Sie den aktuellen Spieler um, bei Fehlschlag geben Sie eine Fehlermel-
dung aus.
5. ¨ Uberpr¨ ufen Sie, ob das Spiel zu Ende ist. Wenn ja, geben Sie das Ergebnis und das aktuelle
Spielbrett auf der Konsole aus und beenden Sie das Programm. Wenn nein, gehen Sie
zur¨ uck zu Punkt 2.
2 Backend - 8 Punkte
Im zweiten Teil sollen Sie das Backend (Spiellogik) des Spiels implementieren, f¨ ur das Sie im ers-
ten Teil die Vorgabe-Klasse verwendet haben. Es soll aus einer Klasse Spielbrett bestehen, welche
das SpielbrettInterface aus der Vorgabe implementiert. Die Spezifikation der Methoden sollte
Ihnen aus der ersten Aufgabe bereits bekannt sein. Ihre Methoden m¨ ussen diese so erf¨ ullen, dass
eine Kombination aus Ihrem Spielbrett und der Klasse XXO aus der Vorgabe ein lau ¨ ahiges,
korrektes Spiel ergibt. Sie d¨ urfen allerdings die Ausgabe nach Ihren W¨ unschen gestalten und
versch¨ onern, so lange das Spielbrett grunds¨ atzlich erkennbar ist. Ihre Klasse Spielbrett muss
auch einen parameterlosen Konstruktor besitzen, der das Spielfeld leer initialisiert. Sie d¨ urfen
bei Bedarf ¨ uber die Spezifikation hinaus nat¨ urlich beliebige Attribute und Hilfsmethoden dekla-
rieren, m¨ ussen diese dann aber vor direktem Zugri von ausserhalb der Klasse verstecken.
3 Kommentare - 4 Punkte
Je gr¨ oßer das Software-Projekt, desto wichtiger ist eine gute Dokumentation des Codes mit
Kommentaren. H¨ aufig m¨ ussen Programme von Entwicklern ausgebaut oder repariert werden,
die sie nicht selbst geschrieben haben. Achten Sie deshalb in diesem Aufgabenblatt besonders
darauf, Ihren Code so verst¨ andlich und vollst¨ andig zu kommentieren, dass ein fremder Pro-
grammierer auf Ihrem Wissensstand ihn nur anhand des Quellcodes sofort nachvollziehen und
an den richtigen Stellen modifizieren k¨ onnte. Zu einer guten Beschreibung mit Kommentaren
geh¨ oren die zul¨ assigen Zust¨ ande und Bedeutungen von Variablen, Attributen und Parametern,
die Auswirkungen von Methoden und nachvollziehbare Erkl¨ arungen von nicht-trivialen Pro-
grammabl¨ aufen.
___
Wer diese Aufgabe auf Grund des Unicodes nicht so gut lesen kann, für den habe ich sie als jpg nochmal im Anhang hinzugefügt.
Die Vorgaben, habe ich ebenso als Anhang hinzugefügt.
Ich bin für jede Hilfe echt sehr, sehr dankbar.
Schon einmal vielen Dank im Voraus.
Liebe Grüße,
schnosi.
P.S: Euch allen eine frohe Weihnachtszeit!