Wie wir ein Brettspiel mit Fernbedienung gemacht haben - Teil 2

Das letzte Mal habe ich Ihnen von der technischen Komponente unseres „intelligenten“ Brettspiels erzählt, auf welche Probleme wir gestoßen sind und was am Ende passiert ist.

Bild

Heute möchte ich ausführlicher über die mobile Anwendung, das erste Spiel und das Erstellen von Miniaturansichten sprechen.

Der erste Artikel ist hier zu finden: Wie wir ein Brettspiel mit Fernbedienung gemacht haben - Teil 1

Achtung! Viele Bilder auf.

In den Kommentaren zum letzten Artikel haben sie richtig bemerkt, dass es besser ist, kein Spiel zu machen, sondern eine Plattform, auf deren Grundlage es bereits möglich ist, Spiele mit verfügbaren Mechaniken zu erstellen. Anfangs haben wir es geplant, aber als Ergebnis haben wir festgestellt, dass wir außer dem Spiel nichts anderes machen können. Nur wegen der mangelnden Erfahrung im Spieledesign oder der bekannten Spieledesigner, die uns sagen könnten, welche Mechanik unterstützt werden sollte.

Aus diesem Grund haben wir beschlossen, alle Grundfunktionen der Plattform (Bewegen, dynamisches Hervorheben, Eingabeaufforderungen) in unserem ersten Spiel zu implementieren, das wir uns selbst einfallen lassen werden. Und dann werden wir aus den gesammelten Erfahrungen einen vollwertigen Spieledesigner machen.

Mobile App


Wie ich bereits geschrieben habe, erfolgt die gesamte Plattformverwaltung über eine mobile Anwendung, die über das BLE-Protokoll eine Verbindung zu ihr herstellt.

Mehrere GIFs
GIF "" /

GIF

GIF

GIF "" /

Um ein Spiel zu implementieren, müssen Sie eine vollwertige mobile Anwendung dafür schreiben, in der Sie alle Regeln und Mechanismen beschreiben.

Während des Schreibens der Anwendung haben wir alle Tests durchgeführt, indem wir eine Verbindung zur Plattform hergestellt haben, was nicht sehr praktisch ist. Um das Debuggen zu vereinfachen, haben wir im Rahmen der Anwendung einen einfachen Software-Emulator erstellt, auf dem Daten auf die gleiche Weise angezeigt werden, wie sie auf dem Spielfeld angezeigt würden.


Ganz am Anfang ist ein Problem aufgetreten, dass die Daten, die die Anwendung verlassen, verloren gehen. Wir haben festgestellt, dass bei Verwendung von BLE eine maximale Paketgröße von 20 Byte gesendet werden kann. Daher teilen wir alle ausgehenden Daten auf BLE in Pakete von 20 Bytes auf. Der Parameter „Gate“ wird in den Header geschrieben. Dieser Parameter hilft Arduino zu verstehen, zu welcher Komponente der Plattform dieses Paket gehört. Von der Arduino-Seite ist die Verarbeitung dieser Pakete elementar:

if (NewCommandReady) { switch (CurrentGate) { case 1: processLEDCommand(); break; case 2: processDriverCommand(); break; case 3: processMagnetCommand(); case 4: // break; } //  NewCommandReady = false; } 

Nachdem wir das Daten-Streaming zwischen dem Smartphone und dem BLE-Modul in 20-Byte-Pakete aufgeteilt hatten, verschwanden die Daten nicht mehr, sondern kamen oft verzerrt zum Arduino. Es stellte sich heraus, dass wir nicht berücksichtigt haben, dass die serielle Arduino-Schnittstelle einen Puffer von 64 Bytes hat. Wenn der Puffer überläuft, gehen Daten verloren und nachfolgende werden verzerrt. Das Erhöhen der Größe und das Erstellen eines eigenen Puffers hat nicht immer geholfen. Ich musste ein Wrapper-Protokoll über den BLE-Transport schreiben, um zuverlässig Daten zu senden und zu empfangen.

Aufgrund der Verwendung eines solchen „Protokolls“ wurde der Datenaustausch durch die Überprüfung der Integrität der übertragenen Daten leicht verlangsamt. Die Zuverlässigkeit ist jedoch für das Spiel kritischer. Es ist eine Schande, wenn die AOE- Anzeige einiger Fähigkeiten unvollständig ist oder der Held bei der Bestätigung der Bewegung auf einem Mobiltelefon nicht bewegt wird.

Um Objekte auf dem Spielfeld anzuzeigen, haben wir das Prinzip der Ebenen in den Betriebssystem-Fenstersubsystemen verwendet:

  • Jedes hervorgehobene Objekt oder jede hervorgehobene Aktion (Helden, Hindernisse, Bewegungsart des Helden, verfügbarer Umfang der Fähigkeit und der Rest) verwendet eine eigene Ebene.
  • Wenn Ebenen angewendet werden (z. B. der AOE-Bereich über dem verfügbaren Bereich der Fähigkeit), wird der Anfangszustand der LEDs gespeichert. Infolgedessen ist es möglich, die ursprüngliche Farbe zurückzugeben, wenn die oberste Ebene verschwindet.

Der Großteil der zwischen der mobilen Anwendung und der Plattform übertragenen Daten ist das Neulackieren der LEDs. Zu Optimierungszwecken wurden einige Algorithmen hinzugefügt:

  • Zum Neulackieren von Dioden wird ein Puffer verwendet, in dem Änderungen vorgenommen werden, bis diese Änderungen auf der physischen Karte angezeigt werden sollen.
  • Das Neulackieren einer einzelnen LED innerhalb desselben Befehls ist ausgeschlossen.
  • Beim Neulackieren (z. B. die Verschiebung des Bereichs der AOE-Fähigkeit um 1 Zelle) wird der aktuelle Zustand der LED-Karte analysiert. Wenn sich die Farbe der LED im neuen Zustand nicht von der vorherigen unterscheidet, empfängt der Arduino keine Befehle zum Neulackieren.

Gameplay


Also hast du dich entschieden zu spielen. Im Folgenden werde ich beschreiben, wie es von der Seite aussieht:

  1. Wir stecken den Stecker in die Steckdose und schalten das Spiel ein.
  2. Bei jedem Start findet eine automatische Kalibrierung statt, um die genaue Anzahl der Schritte des Schrittmotors zum Bewegen von 1 Zelle zu bestimmen.
  3. Parallel dazu verbinden wir das Smartphone über Bluetooth mit dem Spiel.
  4. In der mobilen Anwendung wählt jeder Spieler den Charakter aus, den er spielen möchte. Nachdem alle ihre Wahl getroffen haben, drücken Sie "START".

  5. Jeder der Charaktere hat seine eigene Farbe. Das Spiel markiert automatisch die Zelle, in der Sie die Figur Ihres Helden platzieren müssen.
  6. Das Spiel findet nacheinander statt. Der erste Zug wird von dem Spieler gemacht, der zuerst den Helden ausgewählt hat, der zweite - der zweite usw.
  7. Jeder Held hat eine bestimmte Anzahl von Aktionspunkten (OD), mit denen er sich in der Arena bewegen oder Fähigkeiten anwenden kann.
  8. Jede Fähigkeit hat ihre eigene Erholungszeit, die in Runden berechnet wird. Im Rahmen der mobilen Anwendung gibt es zwei Konzepte: Verschieben - das Intervall vom Anfang bis zum Ende der aktuellen Aktionen des Spielers. Runde - die Summe der Züge aller am Spiel teilnehmenden Spieler. Derzeit ist der Zug eines Spielers auf 30 Sekunden begrenzt.
  9. Auf dem Spielfeld befinden sich Hindernisse, durch die der Spieler die meisten Fähigkeiten nicht passieren oder nutzen kann. Jetzt werden sie auf dem Spielfeld einfach rot hervorgehoben, aber in Zukunft werden sie eine physische Verkörperung haben.

  10. Sie können das Feld mit Hilfe spezieller Fähigkeiten bewegen, die jeder Held besitzt. Zum Beispiel die Teleportation eines Magiers. Im Gegensatz zur Standardbewegung gibt der Spieler bei Verwendung dieser Fähigkeiten nur den Endpunkt an, wenn ein Spieler die Route seines Helden Zelle für Zelle ebnet. Infolgedessen ist ein Algorithmus erforderlich, um den kürzesten Weg zu einem bestimmten Punkt zu finden und alle Objekte zu umgehen, mit denen eine Kollision möglich ist (Figuren anderer Helden, Figuren von Hindernissen usw.).


    Dieses Problem wird ganz einfach mit Hilfe von Graphen und BFS- Passage durch die Zellen gelöst.
    Kurz gesagt, das Wesentliche des Algorithmus besteht darin, die Zellen nach Entfernung von der aktuellen Position des Helden zu der angegebenen Zelle (orange markiert) zu markieren, in die der Held bewegt werden soll.

    Nach dem Auffinden der gewünschten Zelle wird in den Zellen nach dem Rückweg gesucht, so dass der Abstand vom Startpunkt zur nächsten Zelle 1 kleiner sein sollte als zur aktuellen Zelle (der Durchgang ist gelb markiert). Nach der Rückkehr in die Ausgangsposition (grüne Zelle) wird eine Folge von Punkten gebildet, die der kürzeste Weg ist. Es ist diese Sequenz, die als Team an Arduino übertragen wird, um den Helden zu bewegen.
  11. Nach dem Tod des Helden bewegt das Spiel seine Figur automatisch in die „Heimatzone“. Heimatzone - eine Zelle, in der sich die Figur zu Beginn des Spiels befindet. Jeder Spieler hat seine eigenen. Nach dem Start des Spiels können Sie die Fähigkeit in der Heimatzone nicht mehr betreten oder nutzen. Dies geschieht so, dass es unmöglich ist, den Spieler bei der Wiederbelebung zu fangen. Für einen Spieler, dessen Held besiegt ist, endet das Spiel in 1 Runde. Nachdem er sich der Schlacht wieder angeschlossen hat.

  12. Im Moment gewinnt der Spieler, dessen Held der letzte war, der auf dem Spielfeld blieb und die Gegner besiegte. Die Bedingung kann jedoch anders sein, zum Beispiel gewinnt derjenige, der zuerst N Frags erzielt hat.

Dies ist ein Gameplay, das in der aktuellen Version funktioniert. Aufgrund mangelnder Erfahrung im Spieledesign sehen wir möglicherweise keine offensichtlichen Schulen oder Möglichkeiten. Zum Beispiel ist es immer schmerzhaft, auf Ihren nächsten Schritt zu warten. In der aktuellen Implementierung kann die Wartezeit 1,5 Minuten erreichen. In der nächsten Version des Prototyps planen wir, RFID-Tag-Lesegeräte hinzuzufügen, um das Gameplay zu diversifizieren. Verwenden Sie beispielsweise Karten mit RFID-Tags, die Sie außerhalb Ihres Zuges anwenden können.

Vorschaubilder


Miniaturen lieben alles! Und wir sind keine Ausnahme. Daher haben wir parallel zur Sammlung von Mechanik und Programmierung unsere eigenen Miniaturen erfunden. Ich denke aus den Bildern ist klar, dass es in unserem Spiel um Fantasy-Katzen geht, die in der Arena kämpfen.
Weil Wir wissen überhaupt nicht, wie wir aus dem Wort zeichnen sollen. Wir wandten uns an unseren Freund, der mit großer Freude begann, "kämpfende Katzen" zu zeichnen.

Sie nahm unsere Haustiere als Grundlage. In ihrem Haus lebte also eine riesige und bösartige Katze mit dem Spitznamen "Pirat" - er ist es, der im Herzen des Miniaturkriegers liegt.

Nach ein paar Wochen haben wir unsere ersten Skizzen bekommen.


Aus den Artikeln über die Herstellung von Brettspielen ging hervor, dass die Herstellung von Miniaturen in Russland schon schlimm genug ist und viele sie in Finnland oder Deutschland bestellen.

Bevor wir uns mit der Herstellung von Miniaturen beschäftigten, mussten wir von jedem Helden Meistermodelle erstellen, die für einen Prototyp völlig ausreichen. Zuerst wollten wir sie aus Fimo herstellen, aber es stellte sich heraus, dass es unter unseren Freunden keine Miniaturisten gab und maßgeschneiderte Produkte zu teuer waren. Aus diesem Grund haben wir beschlossen, sie zunächst auf einem 3D-Drucker zu drucken. Zu diesem Zweck hat unser Freund uns 3D-Modelle unserer ersten Helden in Zbrush erstellt.


Mit Hilfe des FDM-Drucks war es nicht möglich, Zahlen von akzeptabler Qualität zu drucken, was durchaus zu erwarten war.

Glücklicherweise hat meine Frau SLA 3D-Drucker im Einsatz.

Stereolithographie (SLA) ist eine 3D-Drucktechnologie, mit der Sie flüssige Materialien mithilfe einer Lichtquelle Schicht für Schicht mithilfe des Photopolymerisationsprozesses in feste Objekte umwandeln können. Die Schichtdicke beim Drucken mit SLA-Technologie ist um ein Vielfaches geringer als beim Drucken mit FDM, daher ist die Qualität des Endprodukts höher.

Einige Tage später erhielten wir unsere ersten Miniaturen.


Die Qualität dieser Miniaturen ist viel höher, erreicht aber immer noch nicht die durch Kunststoffformen erzielte Produktion. Schuld daran ist die Unterstützung, die nach dem Entfernen spürbare Spuren hinterlässt. Theoretisch könnten wir die Figuren in separate Teile „schneiden“ und sie ohne Verwendung von Stützen einzeln drucken und dann kleben. Aber es würde viel Zeit in Anspruch nehmen und außerdem könnte es sich in Zukunft noch ändern.

Jede Figur steht auf einer eigenen Basis, die wir auch auf einem 3D-Drucker gedruckt haben. In der Basis befindet sich ein Neodym-Magnet. Die Größe und Dicke des Magneten wurden empirisch so ausgewählt, dass die Figur ruhig mit dem Elektromagneten auf dem Plattformwagen magnetisierte, aber nicht auf benachbarte Figuren reagierte.

Insgesamt


Derzeit arbeiten wir daran, die physikalischen Eigenschaften der Plattform und die Zuverlässigkeit aller Komponenten zu verbessern. Wir werden das Sperrholz durch Polycarbonat und ABS-Kunststoff ersetzen, die Befestigung der Plattformkomponenten aneinander verbessern und das Spielfeld abnehmbar machen, damit es in ein anderes Formfaktorfeld (z. B. sechseckig) geändert werden kann. Der nächste Schritt ist die Erstellung eines vollwertigen MVP, was keine Schande ist, Menschen zu zeigen.

Mit dem Spiel etwas schwieriger. Natürlich möchte ich mich ganz auf die Implementierung der Plattform konzentrieren, ohne auf ein bestimmtes Spiel Bezug zu nehmen. Wir sind uns jedoch bewusst, dass niemand an einer Plattform ohne Spiel interessiert ist.

Vielen Dank für Ihre Kritik / Beratung / Interesse. Wir hatten die Idee, eine Version ohne Mechanik zu erstellen, aber mit der Möglichkeit, die Position und den Typ der Figur auf dem Feld zu bestimmen. Ich denke, der nächste Artikel wird nach der Erstellung von MVP geschrieben .

Source: https://habr.com/ru/post/de427227/


All Articles