Kann ich verhindern, dass diagonale Bewegungen einen größeren Teil der Karte erkunden?

57

Kann ich in einem Kachelnetz, in dem Bewegungen in 8 Richtungen genau die gleiche Anzahl von Umdrehungen erfordern (Schachbrettregeln), verhindern, dass bei diagonalen Bewegungen mehr neue Kacheln als bei orthogonalen Bewegungen angezeigt werden?

Zum Beispiel: Sie sind das rote Kästchen im Bild unten. Die grünen Zellen sind derzeit für Sie sichtbar (quadratisches Sichtfeld). Sie können eine Strecke von einem Plättchen in eine der acht Richtungen zurücklegen.

Wenn Sie nach Nordosten ziehen , werden Sie 13 neue Kacheln (blau dargestellt) erkunden. Wenn Sie sich stattdessen nach Süden bewegen , werden Sie nur 7 neue Kacheln (violett dargestellt) erkunden.

Gitter mit ortsabhängigen Sichtbarkeiten

Wie kann ich das Reisen in jede Richtung für die Erkundung gleich günstig gestalten?

Herr smith
quelle
27
Dies ist ein grundlegender Fehler bei der Gestaltung eines solchen Spiels. Sie müssen entweder keine diagonale Bewegung zulassen oder zu einem Hex-Gitter wechseln, das dieses Problem nicht hat.
Tetrad
1
@Tetrad Du liegst nicht falsch, dass es ein Fehler ist, aber du merkst wahrscheinlich nicht, wie häufig es in Spielen wie diesem ist .
Mr. Smith
8
In jedem Spiel, in dem orthogonale und diagonale Bewegungen gleich schnell sind, gibt es immer Dinge, für die diagonale Bewegungen besser sind als orthogonale Bewegungen und umgekehrt. Es ist einfach nicht lösbar - wenn Sie ein Loch stecken, öffnet sich ein anderes.
Patashu
3
Keine vollständige Antwort, aber ist es in Ihrem Spiel möglich, dass ein diagonaler Zug proportional zur diagonalen Länge länger dauert als ein orthogonaler? Zweitens können Sie eine gemischte Lösung haben, bei der für die Bewegung das Rautenmuster und für die Sichtentfernung das Quadrat verwendet wird.
Vality
2
Eine weitere, nicht ganz zutreffende Antwort: Orthogonale Bewegungen verhalten sich wie jetzt, aber diagonale Bewegungen lassen die Lichtquelle "verschwommen" werden - es werden nicht alle 13 Felder angezeigt, die gerade in Reichweite gekommen sind, sondern nur 7 (oder so) von ihnen, zufällig bestimmt.
Snowbody

Antworten:

67

Dungeons and Dragons 3.5 (Pen-and-Paper-RPG) bietet eine Lösung, die sowohl für Bewegungsberechnungen als auch für gitterbasierte Radiusberechnungen verwendet wird: Die diagonale Bewegung kostet 1,5, die orthogonalen Kosten. Da die Diagonale eines Einheitsquadrats ungefähr 1,414 beträgt, ist 1,5 ziemlich nahe.

Da D & D 3.5 nur ganzzahlige Bewegungen unterstützt, wird dies tatsächlich so berechnet, dass orthogonale Bewegungen "ein Quadrat" kosten. Deine erste Diagonale kostet ebenfalls nur "ein Quadrat", aber die zweite Diagonale kostet "zwei Quadrate". Sie wechseln ein und zwei Felder für jede diagonale Bewegung. Das Implementieren dieser Bewegungsregel in Ihrem Spiel wird verschiedene Probleme mit diagonalen Bewegungen lösen.

Wie dieses Diagramm zeigt, erstellt diese Bewegungsregel eine sinnvolle Annäherung an Kreise und ist im Vergleich zur tatsächlichen Entfernung (innerhalb von 15 Einheiten vor dem Start) auch nicht um mehr als 1 versetzt.

Bildbeschreibung hier eingeben

Wenn Ihr Sicht- / Erkundungsradius ebenfalls auf diese Weise berechnet wird, sind diagonale Bewegungen und diagonale Entdeckungen in etwa so nah oder so weit wie orthogonale.

Däne
quelle
Genau das, was ich vorschlagen wollte. Obwohl es erwähnenswert ist, dass diese Strategie die Bewegung einschränkt, wenn der Charakter sich nur um ein Feld pro Runde bewegen kann (was scheint aus dem Diagramm der Frage der Fall zu sein?). Sie können sich "erinnern", ob sie sich zwischen den Zügen auf geraden / ungeraden Diagonalen befinden, obwohl dies für den Spieler verwirrend / frustrierend sein kann. Unabhängig davon funktioniert dies gut für das Thema Sichtbarkeit.
Alexis Beingessner
5
@AlexisBeingessner, stimmt. Und der Fragesteller gab an, dass er eine Bewegung wie bei einem Schachkönig wollte, aber ich denke, da dies eine Entwicklungssite für Computerspiele ist, würde ich auf eine gute Gameplay-Lösung hinweisen. Wenn dies eher ein Rätsel oder eine reine mathematische Frage ist, würde ich es auf einer anderen Seite erwarten. Wenn dies für ein Schurkenspiel ist, unterstützen einige von ihnen bereits unterschiedliche Bewegungsgeschwindigkeiten.
Däne
Die meisten Roguelike-Spiele scheinen rundenbasiert zu sein, haben jedoch eine Zeitkomponente. Wenn Sie sich also diagonal bewegen, haben andere Objekte mehr Zeit, um zu reagieren, bevor Sie einen weiteren Zug ausführen können.
Kos
67

Sie müssen die Form des Sichtfelds ändern.

Wenn Sie sich also in eine beliebige Richtung bewegen, wird die gleiche Anzahl neuer Quadrate sichtbar.

Hier ist eine Möglichkeit:

Gitter Beispiel

ChargingPun
quelle
5
Interessant; Ich habe noch nie über ein Diamant-Sichtfeld nachgedacht. Es gibt jedoch auch ein Problem mit dieser Ansicht; Es ist eine schreckliche Idee, jetzt diagonal zu reisen, denn wenn Sie einen Feind auf einer diagonalen Reise entdecken, ist er Ihnen deutlich näher als wenn Sie orthogonal gereist wären.
Mr. Smith
43
@ mr.smith, ja, das ist ein neues Problem, aber ich habe Ihr altes gelöst ...
ChargingPun
In der Tat hast du getan; Anscheinend war ich mit der Frage nicht spezifisch genug.
Mr. Smith
8
Wäre hier eine Kreisform hilfreich?
amitp
3
@amitp Dies ist eine Kreisform - vorausgesetzt, Ihre Distanzfunktion ist die Manhattan-Distanz.
Daniel Wagner
27

Damit diagonale und orthogonale Bewegungen ungefähr den gleichen Bereich anzeigen, benötigen Sie zwei Dinge (von denen jede für sich bereits in einer anderen Antwort oder einem anderen Kommentar vorgeschlagen wurde):

  1. Ungefähr kreisförmige Sichtweite :

    Bild des pseudokreisförmigen Sichtbereichs

    Für sich allein ergibt dies nicht genau den gleichen sichtbaren Bereich für beide Bewegungsarten. In der obigen Abbildung werden bei einer orthogonalen Bewegung 9 Quadrate und bei einer diagonalen Bewegung 13 Quadrate angezeigt. Es ist jedoch immer noch besser als das Verhältnis 13/7 für den quadratischen Ansichtsbereich in Ihrem Beispiel.

    Tatsächlich tendiert das Verhältnis der offenbarten Flächen pro diagonaler / orthogonaler Stufe mit zunehmendem Sichtradius zu √2 1.414 für eine kreisförmige Fläche, während das gleiche Verhältnis für eine quadratische Sichtfläche zu 2 tendiert.

  2. Langsamere diagonale Bewegung :

    Im wirklichen Leben dauert es länger, diagonal über ein quadratisches Feld zu gehen, als über eine der Seiten. Tatsächlich dauert es ungefähr √2 ≈ 1.414 mal länger. Wenn Sie möchten, dass sich Bewegungen in Ihrem Spiel realistisch anfühlen, sollten Sie dies auch in Ihrem Spiel tun.

    In der Praxis ist 3/2 = 1,5 eine ziemlich gute Näherung von √2. Auf diese Weise kann jeder orthogonale Schritt nur zwei Zeiteinheiten und jeder diagonale Schritt drei Zeiteinheiten umfassen. Im obigen Beispielansichtsbereich ergibt dies 9/2 = 4,5 offenbarte Quadrate pro Zeiteinheit für orthogonale Bewegung und 13/3 = 4,33 offenbarte Quadrate pro Zeiteinheit für diagonale Bewegung. Ziemlich nah, was?

    Wenn Sie sich für orthogonale Bewegungen an "1 Schritt = 1 Zeiteinheit" halten möchten, können Sie auch das vorgeschlagene D & D-System Dane verwenden und für jeden zweiten diagonalen Schritt eine zusätzliche Umdrehung ausführen . (In diesem Fall müssen Sie jedoch jeder Einheit einen expliziten Zähler für die Anzahl der diagonalen Schritte zuweisen. Andernfalls können Exploits wie E, NE, E, NE usw. auftreten.) . Bewegungsablauf es einem Spieler erlaubt zu erkunden schneller als gedacht.)

Ilmari Karonen
quelle
Eine einfache Möglichkeit, solche Exploits zu verhindern, besteht darin, dass die Kosten einer diagonalen Bewegung zwei Ticks betragen, es sei denn, es geht eine Bewegung in dieselbe Richtung voraus, die zwei Ticks benötigt.
Supercat
1
@supercat: Stimmt, aber das würde die Sequenz E, NE, E, NE, ... für die Erkundung merklich weniger effizient machen als eine geradlinige orthogonale / diagonale Bewegung, was auch nicht wünschenswert sein könnte.
Ilmari Karonen
Es würde diese Sequenz weniger effizient lassen, aber was nun? Nicht alle Explorationsmethoden sollten gleich effizient sein. Tatsächlich ist es vielleicht nicht schlecht, eine Zeitstrafe für Orientierungsänderungen zu haben, mit einer Ausnahme für Fälle, in denen der Zug davor oder danach eine doppelt geladene Diagonale war.
Supercat
2
Ich habe vor einiger Zeit etwas Ähnliches gemacht und es gelöst, indem orthogonale Bewegungen zwei "Ticks" pro Quadrat und diagonale Bewegungen drei kosten.
Mason Wheeler
11

Da Sie ein Raster verwenden und wissen, in welche Richtung der Benutzer gerade fährt, müssen Sie die vorherige Antwort nicht anpassen und je nach Richtung ein anderes Sichtfeld verwenden.

Zum Beispiel könnten Sie das Feld so erweitern, dass es die Ecken enthält, wenn Sie in Himmelsrichtung fahren, und es an jedem Ende in Ihren diagonalen Fällen um zwei Quadrate verkleinern, sodass jeweils 9 Quadrate freigelegt werden.

Eine andere Alternative, die davon abhängt, wie Ihre Beleuchtung funktioniert, ist die Verwendung einer besseren Kreisannäherung mit Antialiasing, um einige der Quadrate teilweise freizulegen.

user43497
quelle
Das ist ein interessanter Kompromiss; Wenn Sie diagonal reisen, sind nicht alle Zellen sichtbar, die normalerweise sichtbar gewesen wären. Sie können entweder eine Runde warten (um diese Zellen zu erkunden) oder sich weiterbewegen.
Mr. Smith
8
Welche Antwort ist "die vorherige Antwort"?
Mooing Duck
7

Wie wäre es, wenn der Sichtbereich des Spielers nicht von einem festen Sichtbereich abhängt, sondern von der Richtung, in die der Spieler in den letzten Runden gewandt war (ein Spieler, der sich nach Norden bewegte, könnte dies tun)? sofort einen Schritt nach Süden machen, aber möglicherweise ein paar Umdrehungen machen, um den maximalen Betrachtungsabstand in diese Richtung zu erzielen). Ein Spieler, der aus einem engen Korridor nach Norden in einen großen Raum geht und weiter nach Norden reist, hat eine eingeschränkte Sicht nach Osten und Westen und sollte dies wahrscheinlich tun. Wenn sich der Spieler nicht mehr bewegt, könnte das System automatisch unsichtbare Bereiche "erkunden", die sich innerhalb des aktuellen Sichtradius des Spielers befinden. Während sich der Spieler aktiv bewegt, sollte das Sichtfeld jedoch eingeschränkter sein.

Superkatze
quelle
3

Als Alternative zu einem komplexeren Sichtfeld (das, wie oben erläutert, aufgrund der Einschränkungen eines gitterbasierten Layouts seine eigenen Probleme hinzufügt) könnten Sie versuchen, den Bewegungseffekt in einem Spiel zu emulieren, das nicht auf Diskretion basiert Gitter. Wo eine freie Bewegung möglich ist, wäre eine diagonale Bewegung einer Einheit genau das, nicht die mit einem quadratischen Gitter gesehenen ~ 1,41 Bewegungseinheiten.

Sie können die Bewegung einzelner Einheiten nicht erzwingen, ohne Ihr dezentes Raster zu verlieren (was Ihr Spieldesign erheblich verändern würde). Vielleicht können Sie die zusätzliche Bewegung verfolgen und die Bewegungen später fallen lassen: Verfolgen Sie die zusätzlichen 0,41s, und wenn sie sich dann summieren 1,00 lassen diese Einheit einen Zug überspringen. Oder umgekehrt: Betrachten Sie die Diagonale als normal, addieren Sie die 0,41s für jede horizontale oder vertikale Bewegung und geben Sie eine zusätzliche Zuggutschrift, die größer als 1 ist (oder 1,41 für eine diagonale Bewegung).

Sie müssen vorsichtig sein, wie Sie dies Ihren Spielern so präsentieren, dass es glatt und fair aussieht. In einem Multi-Human-Player-Szenario können solche Änderungen von den Spielern strategisch ausgenutzt werden - dies kann ein Problem sein oder es gibt eine natürliche Möglichkeit, dies mit der Spielmechanik zu mischen (den Spielern möglicherweise zu erlauben, eine kleine Menge zu speichern) Menge an "nicht verwendetem Umzugsguthaben", die sie verwenden können, um zu einem späteren Zeitpunkt schnell zu reagieren und die zusätzlichen 0,41s an Umzugsfeed in diesen Pool (oder aus diesem heraus) zu ziehen.

Dies funktioniert am besten, wenn sich Spielerkontrollobjekte in jeder Runde um mehr als eine Einheit bewegen. Beispielsweise können drei Bewegungspunkte als drei horizontale Bewegungen verwendet werden oder zwei diagonale, wobei 0,16 für später im Pool verbleiben. Sobald diese 1,00 erreicht, erhält der Spieler eine "freie" Hor / Very-Bewegung und bei 1,41 eine freie Diagonale. Sie können das Extra auf 1,5 begrenzen, damit es an diesem Punkt zwangsweise verwendet wird oder verloren geht, um zu verhindern, dass der Spieler diese gespeicherte Energie für Ewigkeiten behält oder sie aufbauen kann.

Dies ist natürlich eine Komplikation Ihrer Spielregeln, die möglicherweise völlig unerwünscht ist und für ein nicht computerisiertes Spiel unpraktisch ist. Wenn Sie jedoch dafür sorgen könnten, dass es innerhalb der bestehenden Spielregeln funktioniert, würde dies den Erkundungsunterschied zwischen den Bewegungsrichtungen begrenzen, ohne dass dies erforderlich ist das Rasterformat aufzugeben.

David Spillett
quelle
2

Sie können den Spieler dazu bringen, zwei Felder nach oben, unten, links oder rechts und nur ein Feld diagonal zu bewegen. Es würde es nicht vollständig ausgleichen, aber es würde viel näher sein.

drdavehere
quelle
Dies ist eine gute Idee, aber ich glaube gleichbedeutend mit dem Verbot der diagonalen Bewegung (da eine Diagonale nur zwei orthogonale Bewegungen ist)
Vality