In Hinblick auf Brettspiel-Realisierung

Alles rund um die Programmierung mit Qt
Antworten
TuxxxuT
Beiträge: 3
Registriert: 9. Mai 2012 09:43

In Hinblick auf Brettspiel-Realisierung

Beitrag 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
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: In Hinblick auf Brettspiel-Realisierung

Beitrag 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?
TuxxxuT
Beiträge: 3
Registriert: 9. Mai 2012 09:43

Re: In Hinblick auf Brettspiel-Realisierung

Beitrag von TuxxxuT »

Es ist dem Monopoly-Spielbrett sehr ähnlich. Innen ein großes Quadrat, darum die einzelnen Felder als Rechtecke.
TuxxxuT
Beiträge: 3
Registriert: 9. Mai 2012 09:43

Re: In Hinblick auf Brettspiel-Realisierung

Beitrag 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.
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: In Hinblick auf Brettspiel-Realisierung

Beitrag 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.
Antworten