Hallo Leute,
ich habe vor einiger Zeit das Spiel Go für mich entdeckt.
Leider bin ich wohl noch nicht all zu gut in diesem Spiel. Daher würde ich ganz gerne ein kleines Programm mit euch entwickeln, in dem man ein Go-Spiel eintragen kann und das von Zug zu Zug die "vermutlichen" Teritorien / Punkte anzeigt. Vielleicht dazu auch noch einen Graph mit sowas wie einem Verlauf, wie sich die Teritorien usw. über den Spielverlauf verändert haben.
Hat da jemand Lust mitzumachen? Alleine ist mir das vermutlich zu aufwändig und ich würde die Lust daran verlieren. Zudem habe ich nicht die Zeit, das komplett umzusetzen.
Aber vielleicht ist ja jemand anderes ebenfalls daran interessiert und möchte das mit mir angehen?
Die Sprache ist mir dabei relativ egal, da allerdings relativ viel berechnet werden muss, würde ich vielleicht JavaScript ausschließen, da dort einfach die Performance zu gering sein würde. (oder nicht?)
Github: GoStatistics
Spiellogik:
Done:
Grafische Oberfläche:
Todo:
Statistiken:
Todo:
ich habe vor einiger Zeit das Spiel Go für mich entdeckt.
Leider bin ich wohl noch nicht all zu gut in diesem Spiel. Daher würde ich ganz gerne ein kleines Programm mit euch entwickeln, in dem man ein Go-Spiel eintragen kann und das von Zug zu Zug die "vermutlichen" Teritorien / Punkte anzeigt. Vielleicht dazu auch noch einen Graph mit sowas wie einem Verlauf, wie sich die Teritorien usw. über den Spielverlauf verändert haben.
Hat da jemand Lust mitzumachen? Alleine ist mir das vermutlich zu aufwändig und ich würde die Lust daran verlieren. Zudem habe ich nicht die Zeit, das komplett umzusetzen.
Aber vielleicht ist ja jemand anderes ebenfalls daran interessiert und möchte das mit mir angehen?
Die Sprache ist mir dabei relativ egal, da allerdings relativ viel berechnet werden muss, würde ich vielleicht JavaScript ausschließen, da dort einfach die Performance zu gering sein würde. (oder nicht?)
Hey,
verlinke doch das Github-Projekt im Startpost.
Ggf. auch (dann für später) eine Art Versionsnotiz im Startpost, also: "TODO: ... DONE: ..." usw., dann ist das ganze besser überschaubar.
Github: GoStatistics
Spiellogik:
Done:
- Coordinate Klasse erstellt. Sie beinhaltet die x und y Koordinaten. Sie stellt einen eigenen Datentypen dar.
- Group Klasse erstellt. Sie enthält eine Sammlung von Coordinate-Objekten, die zu einer Gruppe zusammengefasst werden.
- Turn Klasse Grundgerüst erstellt
- Board Klasse erstellt. Sie stellt die Dimensionen des Spielfeldes bereit und hält gelegte Gruppen und Züge. Zudem bietet es eine Möglichkeit Nachbarn der Coordinate / Gruppe zu bestimmen.
- Coordinate Klasse um Funktion erweitern, die die eigenen Nachbarn ermitteln kann. Nachbarn sind nur horizontale oder vertikale Nachbarn.
- Möglicherweise sollte die Coordinate Klasse statisch die Grenzen des Spielfeldes kennen, damit nur valide Nachbarn ermittelt werden.
- Group::getNeighbours() ist derzeit noch nicht implementiert.
- Möglicherweise sollte die Group Klasse statisch die Grenzen des Spielfeldes kennen, damit nur valide Nachbarn ermittelt werden. Die getNeighbours Funktion kann derzeit noch Coordinaten außerhalb des Spielfeldes zurückgeben.
- Die Funktion Group::add() benötigt ggf. noch eine Überprüfung, ob die hinzugefügte Coordinate überhaupt der Gruppe zuzuordnen ist. Möglicherweise über eine eigene Funktion, die überprüft, ob die Koordinate an einem Nachbarfeld der bisherigen Member liegt. (Coordinate-Nachbarn bestimmen und prüfen, ob mindestens einer davon ein bisheriger Member ist...)
- Datentyp von Group:_members überprüfen. Gibt es einen sinnvolleren Datentypen als einen Vector für dessen Aufgabe?
- Die Klasse Group könnte eine Funktion "merge(Group)" bekommen, um einfacher zwei Gruppen miteinander zu verbinden.
- Turn::isValid() muss noch implementiert werden. Wann ist ein Zug valide? Diese Funktion wurde durch die folgende ersetzt.
- Funktion Board::isValid(Turn) implementieren. Dabei ist nicht nur zu überprüfen, ob der Zug von dem richtigen Spieler ausgeführt wird (Color) sondern auch, ob das zu besetzende Feld frei ist sowie besetzt werden darf (Atari einen Zug zuvor ... oder die Zielgruppe sich selbst entfernen würde (Zielgruppe kann in diesem Fall auch der neu zu setzende Stein sein))
- Board::applyTurn(Turn) muss noch implementiert werden. Der übergebene Zug muss ein Element zu den entsprechenden Gruppen zuordnen, ggf Gruppen zusammenführen und den Zug dem Verlauf (m_turnHistory) zuordnen Das meiste hiervon wurde bereits getan. Es wird noch folgendes benötigt:
- Überprüfung, ob man sinnvoller auf die Gruppen zugreifen kann. Derzeit wird ein Vector<Group*> zwischengespeichert und entsprechend später überflüssige Gruppen gelöscht.
- Es wird noch eine Implementierung benötigt, die umzingelten Gruppen zu entfernt. (Ganz unten in applyTurn(Turn) )
- Es muss noch eine Regel für Atari hinzugefügt werden, bei denen auf ein vorherigen entfernten Stein in einem Atari nicht gesetzt werden darf, falls dadurch der letzte Gegnerstein gefangen wird. Falls mehr als der letzte Gegnerstein gefangen wird, darf der Stein gesetzt werden (da damit das Atari aufgelöst wird).
- Überprüfen, ob für die ein oder andere oben genannte Aufgabe ein verschieben von manchen Variablen/Attributen notwendig ist.
- Die Operatoren von Group könnten fehlerhaft sein. Kann da jemand einmal rübergucken?
- Hinzufügen von isNeighbour() Funktionen
- Überprüfen, ob isValid(Group) um die Funktion, zu überprüfen, ob alle Member miteinander verbunden sind, hinzugefügt werden sollte. (Die Funktion isValid(Group) hat nun auch eine Überprüfung, ob die Mitglieder der Gruppe miteinander verbunden sind)
- Funktionen oder Funktionsblöcke, die in Board::applyTurn(Turn) und Board::isValid(Turn) mehr oder minder gleich sind in entsprechende Funktionen auslagern.
- Board::getGroups() mit default-Parametern ausstatten und vereinfachen. Dopplung von Code vermeiden.
Grafische Oberfläche:
Todo:
- All
Statistiken:
Todo:
- All
Zuletzt bearbeitet: