Seite 1 von 1

In Hinblick auf Brettspiel-Realisierung

Verfasst: 9. Mai 2012 11:04
von TuxxxuT
Hallo Gemeinde.

Wie der Betreff schon vorweg nimmt, stehe ich am Anfang meiner ersten Qt-Anwendung. Ich habe mir zum Ziel gesetzt ein Brettspiel zu realisieren.

Das Spielbrett und dessen Felder ist von mir fertig gezeichnet worden und als QPixmap in einer QGraphicsScene als PNG platziert worden. Einen Spielstein habe ich mit einem einfachen addEllipse(710,710,20,20,blackPen,blueBrush) in die Szene und somit auf das Start-Feld gesetzt.

Nun meine Frage:
Der Spielstein muss ja nun in Abhängigkeit der erwürfelten Augenzahl um die Felder X vorwärts verrückt werden. Gibt es eine eleganter Möglichkeit dies zu tun, ohne direkt mit den Koordinaten der Szene/QPixmap arbeiten zu müssen? Zudem benötige ich eine Art Kollosionsdetektion für Felder auf deinen bereits ein Spielstein steht. Damit der bestehende Spielstein nicht überdeckt wird, ist soviel "Intelligenz" von Nöten, dass der Spielstand links oder rechts daneben gesetzt wird. Ich stelle mir die Realisierung gerade etwas schwierig vor...

Gibt es im Netz evtl. ein ähnliches Project mit SourceCode, wo ich mir die Platzierungen von Spielsteinen auf einem Spielfeld (basierend auf einem einfachen Hintergrund Bild via QPixmap) anschauen kann?

Vielen herzlichen Dank im Voraus für die Hilfe/Anregungen,
Tom

Re: In Hinblick auf Brettspiel-Realisierung

Verfasst: 9. Mai 2012 11:23
von franzf
Wie ist das Brett aufgebaut? Ist das wie beim Schach eine regelmäßige Anordnung von Quadraten, oder sind die Felder in einer geschwungenen, freien Linie durch Brett gezogen?

Re: In Hinblick auf Brettspiel-Realisierung

Verfasst: 9. Mai 2012 11:28
von TuxxxuT
Es ist dem Monopoly-Spielbrett sehr ähnlich. Innen ein großes Quadrat, darum die einzelnen Felder als Rechtecke.

Re: In Hinblick auf Brettspiel-Realisierung

Verfasst: 9. Mai 2012 11:38
von TuxxxuT
Oder sollte ich einen anderen Ansatz verfolgen.
Nicht das komplette Spielbrett als ein PNG, sonder eher für jedes Spielfeld eine QWidget-Instanz vorsehen und das Spielfeld darüber zusammensetzen.

Denn: Später benötige ich natürlich auch genaue Angaben darüber, wie der aktuelle des Spielfeldes ist. In OOP gedacht bedeutet dies wohl z.B. eine Elternklasse cSpielfeld:: mit den benötigten Membern.

Re: In Hinblick auf Brettspiel-Realisierung

Verfasst: 9. Mai 2012 12:36
von franzf
Wenn die Felder gleich groß sind, ist es wohl das einfachste, über die Grafik einzelne QGraphicsRectItems zu legen (Position/Größe rerrechnest du über Pixmap-Breite/Länge und Anzahl Felder pro Seite). Pro Spieler ein eigenes QGraphicsItem, welches sich durch die RectItems bewegt. Die Felder liegen dann in einem QVector, dadurch ist automatisch eine Reihenfolge gegeben, über die sich Spieler fortbewegen können. Um sechs Felder vorwärts zu ziehen, brauchst du nur das aktuelle Feld (und damit den Index im Vector) des Spielers, zählst $anzahl drauf, holst dir das neue Feld (wenn man mehrere Runden dreht wie bei Monopoly, musst du Grenzüberschreitungen einbeziehen) und legst die Spielfigur darüber -> fertig.

Wenn pro Feld weitere Informationen nötig sind, kannst du diese auch als separate Klasse unabhängig von QGraphicsItem o.Ä. ablegen und dann Beziehungen mit einer QMap<QGraphicsRectItem*, FieldState> o.Ä. machen. Natürlich kannst du dir auch gleich für die Felder einzelne GraphicsItems erstellen, die den state mit malen (z.B. Hotels in Monopoly), aber notwendig ist es nicht.