Ich codiere eine digitale Version des Brettspiels von Macao, die eine flache Karte ähnlich der folgenden hat. Spieler haben ein "Schiff", das in der blauen Box beginnt und den gestrichelten Linien in jede Richtung / Ausrichtung folgen kann. Die größeren Rechtecke repräsentieren die Standorte der Stadt.
Ich stecke in den folgenden Fragen fest.
Wie zeichne ich die Position jedes Schiffes auf? Ich denke an Koordinaten wie X, Y, aber das sagt mir nicht, dass das Segment aktiviert ist
Wie konstruiere ich die Routenpfade als Objekte? Platziere ich sie in einem Array?
Schließlich; Um den Abstand zwischen einem Rechteck und einem anderen zu messen, muss gezählt werden, wie viele Segmente vorhanden sind, um den kürzesten Abstand zu ermitteln. Ich glaube, dass dies über einen einfachen Pfadalgorithmus gelöst werden kann.
Ich habe noch nie zuvor eine solche Karte in einem Projekt erstellt, würde mich aber über jede Hilfe freuen, um dies voranzutreiben.
quelle
Antworten:
Ich würde vorschlagen, dass Sie zunächst ein Knotendiagramm erstellen (eine Reihe von Knoten und Bögen (manchmal auch Kanten genannt)).
Dann haben alle diese Knoten Informationen wie ihren 'physischen' Standort (x / y-Koordinaten auf der Karte).
So lösen Sie Ihre Probleme:
Dies sollte Ihnen den Einstieg erleichtern.
Bearbeiten
Das erzeugte Knotendiagramm könnte folgendermaßen aussehen:
Natürlich wären die im Bild dargestellten Bögen die Bögen, die die Knoten im Diagramm verbinden.
Aus der Frage geht nicht hervor, ob die Kreuzungsknoten Stellen sind, an denen die Schiffe bleiben könnten , aber da es sich um ein Brettspiel handelt, habe ich angenommen, dass mehr als ein Strich zwischen zwei Städten liegt, weil es kostet mehr, um von einer Stadt in eine andere zu reisen (zum Beispiel benötigen Sie eine 2 auf einem Würfel anstelle von nur 1). Vor diesem Hintergrund nahm ich an, dass ein Schiff an diesen Stellen bleiben könnte (aber nicht auf Bögen).
Ist dies jedoch nicht der Fall, können die Kreuzungsknoten weiterhin für Navigationszwecke zwischen Städten verwendet werden. Dies würde jedoch quadratische Schiffsspuren ergeben, weshalb möglicherweise ein anderer Ansatz gewählt werden sollte. Beispiel: Kanten können Daten enthalten, die beschreiben, wie sie zurückgelegt werden sollen (Spline, Punktserien usw.).
quelle
Alexandre gab eine gute Antwort. Ich dachte, ich würde ein konkretes Beispiel ausprobieren.
Das Beispiel ist C #, aber hoffentlich ist es allgemein genug, um in jeder Sprache implementiert zu werden, die Sie verwenden möchten.
Dies ist eine grafische Darstellung Ihrer Karte, wenn Sie die Städte folgendermaßen nummerieren:
Dann müssen Sie nur noch eine Ganzzahl von 0 bis 9 verfolgen, die den aktuellen Standort Ihres Schiffes darstellt, und sich mit den Methoden zurechtfinden.
quelle