Smeagle / dungeongame

Inspired by "Spar Wars"
2 stars 1 forks source link

Spielablauf #4

Closed Smeagle closed 8 years ago

Smeagle commented 8 years ago

to be defined

murchandamus commented 8 years ago

Entwurf:

Smeagle commented 8 years ago

Wegen den Benutzereingaben... wie stellst du dir das vor? Soll ich direkt Methoden der Agenten aufrufen wie z.B. step(Direction d)? Lass uns mal zusammen das Beispiel "spähen" (oder wie man das dann nennt) überlegen. Das ist eine Aktion, die ein Spieler später ausführen können soll. Dabei wählt er ein benachbartes Feld und sieht dann (für eine gewisse Zeit? bis er die Sicht abbricht?) das Sichtfeld, als stünde er auf dem Feld. Aber die Gegner sehen ihn nicht...

Was man hier schon herauslesen kann:

Hast du da Ideen?

Smeagle commented 8 years ago

Irgendwie denke ich, dass der Player, abhängig von seinem Zustand irgendwie der GUI sagen können muss, welche Aktionen gerade durchführbar sind (Spähen, Feld selektieren, Spähen abbrechen). Die GUI stellt dann die Eingabemöglichkeit dazu bereit (registriert Tastaturtasten, malt Knöpfe, schränkt die Selektionsmöglichkeit ein, ...). Wenn die entsprechende Eingabe passiert, gibt es eine Art "Callback" zum Player.

Wäre cool wenn wir das so Framework-artig hinbekämen.

murchandamus commented 8 years ago

An viele dieser Dinge habe ich schon gedacht. Können wir vielleihct mal skypen oder so? ;)

murchandamus commented 8 years ago

Sonst würde ich jetzt anfangen, alle deine Punkte zu beantworten. ;)

Smeagle commented 8 years ago

Ja, lass uns demnächst mal skypen oder treffen etc. ^^

murchandamus commented 8 years ago

Spielablauf, wie ich ihn mir bisher vorgestellt habe:

Vor dem Spiel

In der MVP wohl erst mal mit einem Spieler und nur einem Brett, so lange startet das Spiel wohl einfach direkt ins Level. Später kann man das natürlich noch aufbohren.

Spielvorbereitung

Es wird vorerst die Karte eingelesen, die Wachen gesetzt und die Spielerfigur gesetzt.

Spiel

Gameboard hat wie angedeutet eine Liste aller Spielsteine (Spieler +Wachen): LinkedList<Agent> gamePieces

Die Logik des Spielzugs ist Teil der Agent-Klasse bzw. entsprechend der Unterklassen Guard und Player wo es sich unterscheidet. Die Klassen haben jeweils auch Methoden um gültige Spielzüge zu generieren.

Das Spiel startet indem es sich die Liste der Agenten holt und immer reihum auf jedem Agent.takeTurn() aufruft. Die Spieler fangen an, danach die Wachen. Guard und Player erben von Agent und haben deswegen jedenfalls die takeTurn()Schnittstelle.

Spielende

Abgehaktes ist schon implementiert. :)

Smeagle commented 8 years ago

Ich fände es gut, wenn die Spielfigur dem Frontend die möglichen Aktionen mitteilt (hast du ja auch geschrieben). Schnittstelle definiere ich noch. D.h. wenn die Spielfigur dran kommt (takeTurn), dann macht diese sowas wie:

Action ist dann ein Objekt mit einer perform()-Methode (wird aufgerufen als Callback oder bei Tastatureingabe oder Knopfdruck) und einem Tastaturkürzel und weitere Informationen, um einen Knopf anzuzeigen.

Um die Schnittstellen kümmere ich mich als nächstes, damit du diese verwenden kannst...

murchandamus commented 8 years ago

Hatte heute leider doch weniger Zeit zum Programmieren als ich dachte. Morgen Abend bin ich voraussichtlich daheim. Dann geht es wieder etwas weiter. In meinem Player-backend Branch gibt es jetzt aber einen (hoffentlich) einigermaßen komfortablen Gameboard-Builder! Jetzt auch mit korrekter Felderadressierung. :)

Smeagle commented 8 years ago

Kein Stress! Ich möchte, dass ihr ganz entspannt an die Sache ran geht - und nur soviel ihr Lust habt. Es gibt wichtigeres als das Projekt. Z.B. auch mal nichts zu tun! Also: wenn mehrere Tage, Wochen, ... nichts am Projekt passiert, dann freue ich mich, weil ich weiß, dass ihr euch nicht selbst im Projekt verausgabt. Was schnell passieren kann. Ich kenne das.

murchandamus commented 8 years ago

Keine Sorge, mir hat es nur wirklich viel Spaß gemacht die letzte Woche. Ich hatte schon ewig nichts mehr mit Java gemacht und im Vergleich zu hardware-nahem C++ ist es fast als würde das Programm sich von alleine schreiben. ;)

Smeagle commented 8 years ago

Ich schließe das Issue, weil der Ablauf nun ziemlich klar ist. Für weitere Verbesserungen / Erweiterungen müssen neue Issues erstellt werden. Für Ablauf siehe GameState.finishTurn, Agent.takeTurn, Menu-Klasse, Action-Klasse und Selection-Klasse. Siehe Dummy-Agent oder "permanente Aktionen" im Menü für Beispiel-Implementierungen von Aktionen etc...