Aufgabenblatt für die Uni

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...
 
Zuletzt bearbeitet von einem Moderator:
J

Jana_berlin

Gast
Danke für die Antwort.

Ehrlich gesagt, weiß ich nicht genau wie ich an die Sache herangehen soll. Ich finde das alles sehr kompliziert...
Wäre super wenn mír jemand paar Ansätze dazugeben könnte.

LG
 

Andi_CH

Top Contributor
Tja da steht doch:

"Bevor Sie mit dem Programmieren beginnen, sollten Sie einige Analysen
durchführen"

Also analysieren wir mal

Es gibt ein Brett - was soll die Klasse Brett denn so für Attribute haben und was soll sie können?
Es gibt Felder - noch unklar was was wird
Es gibt Spielsteine - hm das gibt vermutlich keine Klasse aber ein Feld kann den zustand leer, schwarz weiss annehmen ...

und so weiter ....

Viel Spass mit UML oder was auch immer, aber JAVA braucht es da noch eine ganze Weile nicht.
 

darekkay

Bekanntes Mitglied
Das typische Schema:
- "ich versteh's nicht"
- was denn genau?
- "alles"

Hier werden keine Hausaufgaben gemacht. Ihr müsst euch erst selbst damit beschäftigen und danach konkrete Fragen stellen. Es kann nicht sein, dass du nichts davon kannst - ihr müsst schon einiges in der Vorlesung behandelt haben, was für den Anfang auch reicht. Und "der Prof ist sch***e, er kann uns nichts beibringen, niemand versteht etwas" kommt auch nicht als Begründung durch ;)
 
J

Jana_berlin

Gast
@ Andi_CH
Danke ersteinmal für die Antworten.

Ich kann ja verstehen, dass das blöd kommt, aber es ist wirklich so, dass wir noch garnichts in die Richtung gemacht haben und immer nur Haupttehmen angeschnitten haben und dann gleich aus den Basics, die wir selbst noch nie so richtig angewendet haben gleich ein ganzes Spiel programmieren müssen .... -.- die dozenten wissen auch nicht wirklich was sie da machen

trotzdem danke schön :)
 

Andi_CH

Top Contributor
Du bist an einer Schule - einer Hochschule sogar. Aus meiner eigenen Erfahrung weiss ich, dass man dort vor allem lernt wie man ein unbekanntes Problem anpackt. Also pack an!
Ich hab dir sehr direkt gesagt was zuerst zu tun ist und es steht auch so in der Aufgabenstellung! Beginn mit der Analyse des Problems und dazu brauchst du weder Java noch einen Compiler. Auch dieses Forum ist für den Anfang sicher nicht das geeignete.
 
S

sdlfkjsfdfldsk

Gast
ich hab das jetzt mal ausprogrammiert. Würdest Du es schaffen, ein Bewertungsfunktion zu schreiben, die ein Spielfeld der Größe n*n entgegennimmt und bewertet, wie die Spielsituation für Weiß/Schwarz ist? ;)
Dann würde ich's mal einstellen.
Gespeichert werden dabei allerdings alle Zugfolgen in immer einer bestimmten Tiefe (kein Tiefdurchgang der Züge, sondern flach).
 

Neue Themen


Oben