J
Jana_berlin
Gast
Hallo an alle lieben Foren-Mitglieder,
wir behandeln in der Uni zurzeit Java Programmierung, es wäre super wenn mir jemand dabei helfen könnte.
Wir haben ein Aufgabenblatt, dass wirklich sehr schwierig ist und wäre wirklich lieb wenn ich ein paar Hilfe Stellungen zum Programmieren bekommen könnte.
Hier die Aufgaben:
Dodoku - oder 5 in einer Reihe
Auf einem 10x10 Felder großem Brett, dessen Felder ähnlich dem Schachbrett
benannt werden (a-j für die Spalten, 0 bis 9 für die Reihen) werden
abwechselnd weiße und schwarze Steine gesetzt. Derjenige, der zuerst 5
Steine in einer Reihe (horizontal, vertikal oder diagonal) gesetzt hat, hat
gewonnen. Die Ränder gelten als nicht-besetzt.
Weitere Informationen: Gobang ? Wikipedia
Es ist nun ein Programm zu schreiben, das gegen einen Menschen spielt.
Zum Beginn wird festgelegt, wer beginnt (und damit die weißen Steine hat)
und auf welchen Spielniveau das Programm laufen soll. Niveau „Schwach“
bedeutet, dass das Programm nur 2 Züge voraus berechnet, „Mittel“ 3 Züge
und „Stark“ 5 Züge.
Die Brettgröße und die Anzahl der vorausberechneten Züge bestimmen die
Rechenzeit; im Original ist es ein 19x19-Brett. Aber so ein großes Brett ist
vielleicht auch ein Angriff auf Ihre Geduld.
Bevor Sie mit dem Programmieren beginnen, sollten Sie einige Analysen
durchführen bzw. das Spiel ein paar Mal spielen, falls Sie es noch nicht kennen:
• Vier in einer Reihe (4er) zwingen den Gegner zu einem bestimmten Zug.
• Drei in einer Reihe sollten mit einem gegnerischen Stein beantwortet
werden, so dass keine 4er entstehen.
• Verteidigen heißt möglichst in der Nachbarschaft des Gegners Steine setzen;
Angreifen heißt, in der Nähe der eigenen Steine größere Flächen abdecken.
• Zum Beginn sollte möglichst in der Mitte des Bretts begonnen werden.
• Remis liegt dann vor, wenn es keinem der beiden Spieler gelingen kann,
eine 5er-Reihe zu setzen, z.B. weil die Ränder dies verhindern oder weil
kein freies Feld mehr existiert.
• Pfiffig sind 4er-Reihen, die gleichzeitig in einer anderen Richtung 3er oder
gar 4er entstehen lassen.
Nun ein paar Hinweise zum Programm:
1. Das Feld sollte als Weiß mit einem großem „O“, als Schwarz mit einem
großem „X“ und als freies Feld mit einem „.“ gekennzeichnet
werden. Der Mensch zieht, indem er wie beim Schach erst den Buchstaben
(Spalte) und dann mit einer Ziffer die Spalte eingibt.
Zum - 2 -
Einlesen können und sollen die Routinen aus dem 3. Aufgabenblatt
verwendet werden.
Ansonsten ist der Mechanismus derselbe wie beim 3. Aufgabenblatt.
2. Das Vorausberechnen sollte mit dem rekursiven Algorithmus des
Backtracking erfolgen; dabei kann eine Rekursion durch rekursiven
Prozeduraufruf erfolgen oder eine Simulation der Rekursion durch
Benutzung eines Stacks erfolgen, während die Routinen selbst iterativ
arbeiten.
Für jeden Gang in die nächste Rekursion sollten die Arrays mit der
clone-Operation dupliziert werden (es ginge auch mit For-Schleifen,
dies dauert aber etwas). Bei der Rückkehr wird eine Bewertung der
durchprobierten Stellungen zurück geliefert.
3. Entwickeln Sie einen Algorithmus, der feststellt, ob jemand gewonnen
hat. Dieser Algorithmus sollte unabhängig von der Feldgröße
sein. Dieser sollte auch feststellen, ob ein Remis vorliegt oder ob der
Spielausgang mit dem nächsten Zug festgelegt ist, um z.B. „Ich
gebe auf“ ausgeben zu können.
4. Ähnlich, aber mit einer anderen Zielsetzung ist das Verfahren zur
Bewertung einer Stellung. Hier könnten z.B. alle 4er, 3er und 2er gezählt
und zu einer Nummer zusammengefasst werden, die sich aus
der gewichteten Summe der Anzahlen ergibt. Sicherlich muss eine
Stellung, die Gewinn oder Verloren bedeutet, die höchsten Zahlen
ergeben. Diese Berechnung ist etwas diffizil, da davon die Spielstärke
des Programms abhängt.
5. Eine Stellung zu bewerten ist eine Sache, aber einen Zug, der zu
verschiedenen guten und schlechten Stellungen führt, ist eine andere.
Überlegen Sie sich, wie Sie einen Zug bewerten. Beachten Sie
dabei, dass eine Addition aller durch den Zug erreichbaren Stellungsbewertungen
nur dann sinnvoll ist, wenn für alle Züge die gleichen
Möglichkeiten bestehen, was sehr selten der Fall ist. Sie benötigen
so etwas, wie eine Klassifikation, z.B. von 1 bis 10, wobei 10
sehr gut und 1 sehr schlecht ist.
Jede Zugmöglichkeit bekommt eine Zahl zwischen 1 und 10, wobei
der Zug mit der höchsten Möglichkeit gewinnt; bei gleicher Zahl entscheidet
der Zufall.
Auch hier empfiehlt es sich, das Programm schrittweise aufzubauen und
nach jedem Schritt das bisher Implementierte zu testen.
Weitere Links (die diversen Angebote wegklicken):
• Extreme Gobang 1.0 Spiele Download auf Flashgames.de
• Gomuku - Gobang zum Download auf Freeware.de
• Gobang Download - free Software - Freeware kostenlos
- 3 -
• GoBang kostenloser download - FAZ.NET
Wenn Sie Lust haben, können Sie Ihr eigenes Gomoku-Spiel gegen eines
dieser Spiele antreten lassen...
wir behandeln in der Uni zurzeit Java Programmierung, es wäre super wenn mir jemand dabei helfen könnte.
Wir haben ein Aufgabenblatt, dass wirklich sehr schwierig ist und wäre wirklich lieb wenn ich ein paar Hilfe Stellungen zum Programmieren bekommen könnte.
Hier die Aufgaben:
Dodoku - oder 5 in einer Reihe
Auf einem 10x10 Felder großem Brett, dessen Felder ähnlich dem Schachbrett
benannt werden (a-j für die Spalten, 0 bis 9 für die Reihen) werden
abwechselnd weiße und schwarze Steine gesetzt. Derjenige, der zuerst 5
Steine in einer Reihe (horizontal, vertikal oder diagonal) gesetzt hat, hat
gewonnen. Die Ränder gelten als nicht-besetzt.
Weitere Informationen: Gobang ? Wikipedia
Es ist nun ein Programm zu schreiben, das gegen einen Menschen spielt.
Zum Beginn wird festgelegt, wer beginnt (und damit die weißen Steine hat)
und auf welchen Spielniveau das Programm laufen soll. Niveau „Schwach“
bedeutet, dass das Programm nur 2 Züge voraus berechnet, „Mittel“ 3 Züge
und „Stark“ 5 Züge.
Die Brettgröße und die Anzahl der vorausberechneten Züge bestimmen die
Rechenzeit; im Original ist es ein 19x19-Brett. Aber so ein großes Brett ist
vielleicht auch ein Angriff auf Ihre Geduld.
Bevor Sie mit dem Programmieren beginnen, sollten Sie einige Analysen
durchführen bzw. das Spiel ein paar Mal spielen, falls Sie es noch nicht kennen:
• Vier in einer Reihe (4er) zwingen den Gegner zu einem bestimmten Zug.
• Drei in einer Reihe sollten mit einem gegnerischen Stein beantwortet
werden, so dass keine 4er entstehen.
• Verteidigen heißt möglichst in der Nachbarschaft des Gegners Steine setzen;
Angreifen heißt, in der Nähe der eigenen Steine größere Flächen abdecken.
• Zum Beginn sollte möglichst in der Mitte des Bretts begonnen werden.
• Remis liegt dann vor, wenn es keinem der beiden Spieler gelingen kann,
eine 5er-Reihe zu setzen, z.B. weil die Ränder dies verhindern oder weil
kein freies Feld mehr existiert.
• Pfiffig sind 4er-Reihen, die gleichzeitig in einer anderen Richtung 3er oder
gar 4er entstehen lassen.
Nun ein paar Hinweise zum Programm:
1. Das Feld sollte als Weiß mit einem großem „O“, als Schwarz mit einem
großem „X“ und als freies Feld mit einem „.“ gekennzeichnet
werden. Der Mensch zieht, indem er wie beim Schach erst den Buchstaben
(Spalte) und dann mit einer Ziffer die Spalte eingibt.
Zum - 2 -
Einlesen können und sollen die Routinen aus dem 3. Aufgabenblatt
verwendet werden.
Ansonsten ist der Mechanismus derselbe wie beim 3. Aufgabenblatt.
2. Das Vorausberechnen sollte mit dem rekursiven Algorithmus des
Backtracking erfolgen; dabei kann eine Rekursion durch rekursiven
Prozeduraufruf erfolgen oder eine Simulation der Rekursion durch
Benutzung eines Stacks erfolgen, während die Routinen selbst iterativ
arbeiten.
Für jeden Gang in die nächste Rekursion sollten die Arrays mit der
clone-Operation dupliziert werden (es ginge auch mit For-Schleifen,
dies dauert aber etwas). Bei der Rückkehr wird eine Bewertung der
durchprobierten Stellungen zurück geliefert.
3. Entwickeln Sie einen Algorithmus, der feststellt, ob jemand gewonnen
hat. Dieser Algorithmus sollte unabhängig von der Feldgröße
sein. Dieser sollte auch feststellen, ob ein Remis vorliegt oder ob der
Spielausgang mit dem nächsten Zug festgelegt ist, um z.B. „Ich
gebe auf“ ausgeben zu können.
4. Ähnlich, aber mit einer anderen Zielsetzung ist das Verfahren zur
Bewertung einer Stellung. Hier könnten z.B. alle 4er, 3er und 2er gezählt
und zu einer Nummer zusammengefasst werden, die sich aus
der gewichteten Summe der Anzahlen ergibt. Sicherlich muss eine
Stellung, die Gewinn oder Verloren bedeutet, die höchsten Zahlen
ergeben. Diese Berechnung ist etwas diffizil, da davon die Spielstärke
des Programms abhängt.
5. Eine Stellung zu bewerten ist eine Sache, aber einen Zug, der zu
verschiedenen guten und schlechten Stellungen führt, ist eine andere.
Überlegen Sie sich, wie Sie einen Zug bewerten. Beachten Sie
dabei, dass eine Addition aller durch den Zug erreichbaren Stellungsbewertungen
nur dann sinnvoll ist, wenn für alle Züge die gleichen
Möglichkeiten bestehen, was sehr selten der Fall ist. Sie benötigen
so etwas, wie eine Klassifikation, z.B. von 1 bis 10, wobei 10
sehr gut und 1 sehr schlecht ist.
Jede Zugmöglichkeit bekommt eine Zahl zwischen 1 und 10, wobei
der Zug mit der höchsten Möglichkeit gewinnt; bei gleicher Zahl entscheidet
der Zufall.
Auch hier empfiehlt es sich, das Programm schrittweise aufzubauen und
nach jedem Schritt das bisher Implementierte zu testen.
Weitere Links (die diversen Angebote wegklicken):
• Extreme Gobang 1.0 Spiele Download auf Flashgames.de
• Gomuku - Gobang zum Download auf Freeware.de
• Gobang Download - free Software - Freeware kostenlos
- 3 -
• GoBang kostenloser download - FAZ.NET
Wenn Sie Lust haben, können Sie Ihr eigenes Gomoku-Spiel gegen eines
dieser Spiele antreten lassen...
Zuletzt bearbeitet von einem Moderator: