Aufgabenstellung: LoopIt

Eine Variante des Spiels LoopIt ist umzusetzen. Hierbei werden auf einem Spielfeld Steine derart abgelegt, dass vorhandene Linien fortgesetzt werden. Dafür sind Punkte zu erwerben.

In einem Sack befinden sich 81 Spielsteine.

Auf das Spielfeld wird zu Beginn ein beliebiger Spielstein mittig abgelegt. Einer der zwei bis vier Spieler zieht fünf Spielsteine. Bis zu drei dieser Spielsteine darf er jetzt ablegen, die restlichen Spielsteine gehen zurück in den Sack und stehen dem nächsten Spieler wieder zur Verfügung.

Regeln zur Ablage

  • Ein Spielstein muss an einen bereits gelegten Stein angelegt werden (Seite an Seite). Mindestens eine Linie muss von einem bereits vorher gelegten Stein weitergeführt werden. Ein anzulegender Stein darf nie eine vorhandene Linie abtrennen (so könnte in obigem Spielaufbau kein Spielstein mit derselben Linienführung an den mittigen Stein gelegt werden).
  • Die Spielsteine dürfen zur Ablage nicht gedreht werden.
  • Ein Spieler darf pro Spielzug höchstens drei Steine auf das Spielfeld legen.
  • Kann ein Spieler keine Steine auf das Spielbrett legen, so setzt er aus.
  • Die drei Spielsteine dürfen in Reihe oder auch an verschiedene Stellen auf dem Spielfeld gelegt werden.
  • Ein Spielstein darf nicht so gelegt werden, dass eine Linie über den Spielfeldrand hinausführt.

Mit jedem gelegten Stein erwirbt der Spieler Punkte für sein Konto.

Punktezählung

  • Der Spieler erhält den auf dem gelegten Stein angegebenen Punktwert.
  • Legt der Spieler den Stein auf ein Prämienfeld, so wird der Punktwert mit dem Multiplikator des Feldes multipliziert.
  • Der Spieler erhält zusätzlich Punkte für alle schon auf dem Spielbrett liegenden Steine, mit denen sich der gelegte Stein über eine Linie verbindet. Diese Verbindung kann an mehreren Kanten entstehen und wird weiterverfolgt, bis die Linie an eine Kreuzung oder einen Endpunkt (nur auf 8er-Steinen) gelangt oder bis die Linie nicht weitergeführt wird (Verdeutlichung der Aufgabenstellung vom 23.9.2011). Eine Kreuzung kann dabei drei oder vier Linien zusammenführen. Für jeden so verbundenen Stein wird jeweils der Punktwert des liegenden Steines (ohne eine Prämie) addiert. 

Beispiel

Stein 331 soll in nebenstehender Situation abgelegt werden:

1. Hier darf kein Stein abgelegt werden, da mit keiner Kante ein anderer Stein berührt wird.
2. Stein 331 kann hier nicht angelegt werden, da sonst eine Linie unterbrochen/nicht fortgeführt werden würde bzw. keine Linienverbindung entstünde.
3. Die Ablage hier erbringt 3 (für den gelegten) + 2 (für den liegenden Stein mit fortgesetzter Linie) = 5 Punkte. Die Linie endet an der Kreuzung auf dem nebenliegenden Stein.
4. Die Ablage auf dem Prämienfeld ergibt (3 * 2) + 2 = 8 Punkte.
5. Hier ergibt die Ablage 3 + 7 = 10 Punkte.
6. Das Ablegen an dieser Stelle bringt 3 + 8 = 11 Punkte.
7. Mit diesem Prämienfeld erhält man (3 * 4) + 2 = 14 Punkte.
8. Hier werden zwei Linien fortgesetzt, so dass man 3 (für den gelegten) + 6 (für den Stein nördlich des Ablegeplatzes) + 2 (für den Stein westlich des nörlichen Ablegeplatzes) + 7 (für den Stein südlich des Ablegeplatzes = 18 Punkte erhält. Der nebenliegende 8-Punkte-Stein ergibt keine Zusatzpunkte, da mit ihm keine Linienverbindung aufgenommen wird.

Das Spiel endet, wenn alle Spielsteine abgelegt wurden oder kein Stein mehr ablegbar ist.

 

Implementierung

Zu Spielbeginn wird eingestellt, wie viele Spieler teilnehmen, wie die Spieler heißen (hier können auch Defaultwerte übernommen werden) und welche Spieler durch den Computer gespielt werden.

Die gezogenen Spielsteine sollen am Spielfeldrand (auf der "Bank") angezeigt und vom Spieler mit der Maus ausgewählt und auf einen Platz gelegt werden können. Dort müssen sie markiert sein (z.B. durch eine Umrandung), denn solange der Spieler am Zug ist, kann er seine Steinablage wieder zurücknehmen. Erst wenn er seinen Zug beendet hat (z.B. durch einen ButtonKlick), bleiben die Steine unwiderruflich liegen, die Markierungen werden aufgehoben und der nächste Spieler ist am Zug.

Während des gesamten Spiels ist der Punktestand jedes Spielers sichtbar. Während eines Zuges wird der Punktgewinn durch jede Steinablage angezeigt (also bis zu drei Zahlen, die am Zugende dem Punktestand hinzugefügt werden).

 

KI

Der Computer kann für einen oder mehrere der Spieler das Ziehen übernehmen. Die Züge sollen dabei nachvollziehbar dargestellt werden, z.B. indem auch hier die abgelegten Steine markiert werden und die Ablage durch eine Wartezeit verzögert wird.

Die Regeln zur Ablage seien dafür einfach gehalten: Es wird zunächst der Stein mit der höchsten Wertigkeit  so platziert, dass er am meisten Punkte erbringt, dann der mit der nächst niedrigeren Wertigkeit, usw... Existieren mehrere Steine mit gleicher Wertigkeit, so müssen sie alle geprüft werden und die gewinnbringendste Ablage gewählt werden. Stehen also drei Steine der Wertigkeit 6 zur Verfügung, einer mit der Wertigkeit 8 und einer mit 3, so wird erst der 8er versucht zu platzieren und dann folgen die zwei 6er.

 

Speicherung

Nach Spielende und nach Spielabbruch kann der aktuelle Spielstand in einer Datei gespeichert werden. Zu den Spielstandsinformationen gehört die aktuelle Spielfeldbelegung, die Namen der teilnehmenden Spieler, ihre Identität (Mensch oder Computer), ihre jeweils erreichten Punkte und wer am Zug ist. Eine derartige Datei kann zu Spielbeginn wieder geladen werden, so dass eine Spielpartie weitergespielt werden kann. 

 

Schummeln

Um bestimmte Situationen testen zu können, müssen ausgewählte statt zufällig gezogene Spielsteine auf der Bank platziert werden können. Über einen Haken im Einstellungsmenü kann jederzeit ein Schummelmodus eingestellt werden. Ist dieser eingestellt, so werden nach Doppelklick auf einen Stein auf der Bank mit Drehen des Mausrades die noch im Sack verbliebenen Steine (in der durch die Benennung gegebenen Reihenfolge)  angeboten. So kann der ursprünglich gezogene Stein mit einem noch im Sack verbliebenen Stein getauscht werden.

Das Schummeln muss (bei gesetztem Haken) auch für einen Computerzug möglich sein, um dessen Funktionalität zu prüfen.

 

Einstellungen

Das Verzeichnis für die Spielsteine, das Verzeichnis für die gespeicherten Spielstände und die Default-Spielernamen sollen in einer INI-Datei gespeichert sein. Sie liegt im selben Verzeichnis wie die Applikation und hat denselben Dateinamen (mit der Extension .INI).

Wird die INI-Datei bei Programmstart nicht gefunden, so werden im Programm verankerte Defaultwerte verwendet und in der INI-Datei abgelegt.

In einem Optionsmenü sollen jederzeit die Einstellungen der INI-Datei und zusätzlich das Einschalten vom Schummelmodus und die Wartezeit für die KI-Steinablage verändert werden können. Wurde ein zur INI-Datei gehöriger Wert verändert, wird dies sofort in die Datei geschrieben.

 

Grundsätzliches

Achtet auf eine übersichtliche Oberfläche, die intuitiv zu bedienen ist. Implementiert ein unter Windows übliches Programmverhalten. Dazu gehört auch, dass das Fenster per Ziehen vergrößer-/verkleinerbar ist, so dass das Spielfeld größer/kleiner dargestellt wird. Sorgt für einen guten Spielfluss, der nur durch die notwendigen Klicks unterbrochen wird.

 

 

Hilfe

Lest zu Programmbeginn alle Bitmaps der Spielsteine in eine ImageList ein. Tritt dabei ein Fehler auf, kann das Spiel nicht gestartet, aber das Verzeichnis im Optionenmenü angepasst werden.

Nutzt die Methoden von TIniFile oder TMemIniFile.

Im Ereignis OnMouseWheel des Formulars muss im Schummelmodus überprüft werden, ob sich der Mauszeiger über einem Spielstein auf der Bank befindet. Nutzt dafür einen Vergleich der Mausposition auf dem Bildschirm mit der Komponentenposition auf dem Bildschirm:

 if  (Mouse.CursorPos.X >= PntBx.ClientOrigin.x) and
     (Mouse.CursorPos.X <= (PntBx.ClientOrigin.x + PntBx.Width)) and
     (Mouse.CursorPos.Y >= PntBx.ClientOrigin.Y) and
     (Mouse.CursorPos.Y <= (PntBx.ClientOrigin.Y + PntBx.Height))...
 
 

 


Wie immer sind natürlich die generellen Richtlinien für die Seminaraufgabe Object-Pascal zu beachten.

Der letzte Abgabetermin für LoopIt ist der 13.01.2012. Der letzte Termin für die Abgabe inklusiv einmaliger Nachbesserung (siehe Richtlinien) ist der 16.12.2011.

Viel Erfolg!