Computerspiel in Haskell - Widget Toolkit wollte [geschlossen]

8

Ich schreibe ein kleines RTS-Spiel in Haskell, und die Zeit ist gekommen Erstellen Sie einige GUI dafür (Schaltflächen, Menüs und so). Aber ich nicht Ich habe Erfahrung mit der Erstellung von GUI-Werkzeugen, daher wäre ich dankbar für Ideen, wie man richtige Datentypen wählt, Routinen für die Ereignisbehandlung und so.

Gewünschte Funktionalität: Menü-Bildschirme (Haupt, Laden / Speichern, Einstellungen, Netzwerkspiel), Texteingaben, Spielschnittstelle (Hauptbildschirm (C & amp; C-ähnlich) mit Schaltflächen, Auswahl und Kontrollkästchen.

Mein aktueller Ansatz besteht darin, die gesamte GUI als Zustandsmaschine darzustellen Das hat eine Reihe von Zuständen und Übergängen zwischen ihnen ausgelöst, wenn ein Ereignis eintrifft:

%Vor%

Widget ist etwas wie

%Vor%

wo

%Vor%

Wenn ein Ereignis kommt und das passende Widget gefunden wird, schaut mein Programm für einen Handler für diese Art von Ereignis in wtEventHandlers für dieses Widget, und führt eine Aktion aus, wenn ein solcher Handler gefunden wird.

Wenn ein Widget erstellt wird, wird sein Rect zu QuadTree hinzugefügt, was abgefragt von findWidget . Die Struktur wird aktualisiert, wenn Widgets erstellt werden oder entfernt.

Es ist jedoch sehr schwierig, auf diese Weise zu programmieren, weil UI-Zustände sind bereits zahlreich (auch für eine einfache Benutzeroberfläche mit ein paar Tasten und keine Menüs).

Ich habe darüber nachgedacht, jedes Widget als Zustandsmaschine zu implementieren und Erstellen dieser Maschinen, so dass die Anzahl der Zustände und Übergänge wird reduziert. Vielleicht wäre es gut, es in eine Monade zu verpacken (wie es ist in XMonad getan).

Dinge, die ich angeschaut habe:

  • pygame dot org / tags / gui ← hat keine brauchbaren Ideen bekommen, weil alles da ist sehr objektorientiert;
  • Ссылка ← nicht anwendbar, weil sie verwenden Qt und ich wollen solche Abhängigkeit nicht;
  • Ссылка

Meine Fragen sind:

  • Ist die Beschreibung von Widgets als Zustandsautomaten, die auf bestimmte Ereignisse "reagieren" und alle anderen ignorieren, für einen Widget Toolkit Designer sinnvoll? Gibt es einen besseren (leichteren) Weg?
  • Organisiert die Schnittstellenbeschreibung in Monad eine gute Idee?

E. g.

%Vor%
  • Gibt es relevante Literatur, die ich lesen könnte, bevor ich weiterkomme? Die Betonung des funktionellen Ansatzes wäre schön.
  • Gibt es eine Möglichkeit zu vermeiden, ein Widget-Toolkit insgesamt zu schreiben? Ich möchte, dass mein Spiel im Vollbildmodus läuft, daher funktioniert Gtk2hs nicht.
Nikolas Wangyu 13.02.2012, 16:42
quelle

0 Antworten

Tags und Links