Posso impedire ai movimenti diagonali di esplorare una parte maggiore della mappa?


57

In una griglia di tessere in cui il movimento in una delle 8 direzioni richiede esattamente la stessa quantità di giri (regole di stile della scacchiera), posso impedire al movimento diagonale di mostrare più tessere nuove rispetto al movimento ortogonale?

Ad esempio: sei la casella rossa nell'immagine qui sotto. Le celle verdi sono attualmente visibili a te (campo visivo quadrato). Puoi spostare una distanza di una tessera in una delle otto direzioni.

Se ti sposti a nord-est , esplorerai 13 nuove tessere (mostrate in blu). Se invece ti sposti verso sud , esplorerai solo 7 nuove tessere (mostrate in viola).

griglia con visibilità dipendente dalla posizione

Come posso rendere il viaggio in ciascuna direzione ugualmente favorevole all'esplorazione?


27
Questo è un difetto fondamentale nella progettazione di un gioco come questo. Non è necessario consentire il movimento diagonale o passare a qualcosa come una griglia esagonale che non presenta questo problema.
Tetrad,

1
@Tetrad Non sbagli sul fatto che sia un difetto, ma probabilmente non ti rendi conto di quanto sia prevalente in giochi come questo .
Mr. Smith,

8
In qualsiasi gioco in cui i movimenti ortogonali e diagonali sono ugualmente rapidi, ci saranno sempre alcune cose per cui il movimento diagonale è migliore del movimento ortogonale e viceversa. Non è risolvibile - se si collega un foro si apre un altro.
Patashu,

3
Non è una risposta completa, ma nel tuo gioco è possibile che una mossa diagonale richieda più tempo di una ortogonale proporzionalmente alla lunghezza diagonale? In secondo luogo, puoi avere una soluzione mista in cui il movimento utilizza il motivo a rombi e la distanza di visualizzazione utilizza quella quadrata?
Valità,

2
Un altro non proprio una risposta: le mosse ortogonali si comportano come fanno ora, ma le mosse diagonali fanno sì che la sorgente luminosa diventi "sfocata" - non rivela tutti i 13 quadrati appena entrati nel raggio d'azione, ma solo 7 (o giù di lì), determinati casualmente.
Snowbody,

Risposte:


67

Dungeons and Dragons 3.5 (gioco di ruolo con penna e carta) ha una soluzione utilizzata sia per il calcolo del movimento che per il raggio basato sulla griglia: il movimento diagonale costa 1,5 quanto costa ortogonale. Poiché la diagonale di un quadrato unitario è di circa 1.414, 1,5 è abbastanza vicino.

Poiché D&D 3.5 supporta solo il movimento di numeri interi, il modo in cui questo viene effettivamente calcolato è che il movimento ortogonale costa "un quadrato". Il tuo primo movimento diagonale costa anche solo "un quadrato", ma il secondo diagonale costa "due quadrati". Si alternano uno e due quadrati per ogni mossa diagonale. L'implementazione di questa regola di movimento all'interno del tuo gioco gestirà diversi problemi con il movimento diagonale.

Come mostra questo diagramma, questa regola di movimento crea una ragionevole approssimazione dei cerchi e inoltre non è disattivata di più di 1 rispetto alla distanza reale (quando entro 15 unità dall'inizio).

inserisci qui la descrizione dell'immagine

Se anche il tuo raggio di visione / esplorazione viene calcolato in questo modo, i movimenti diagonali e le scoperte diagonali saranno vicini o lontani quanto quelli ortogonali.


Esattamente quello che volevo suggerire. Anche se vale la pena notare che questa strategia cade in termini di limitazione del movimento se il personaggio può muovere solo uno spazio per turno (che sembra essere il caso dal diagramma della domanda?). Potresti "ricordare" se si trovano su diagonali dispari / pari tra i turni, anche se questo può confondere / frustrare il giocatore. Indipendentemente da ciò, questo funziona bene per il problema della visibilità.
Alexis Beingessner,

5
@AlexisBeingessner, true. E l'interrogante ha indicato che voleva un movimento simile a un re degli scacchi, ma immagino che dato che si tratta di un sito di sviluppo di giochi per computer, vorrei indicare una buona soluzione di gioco. Se questo è più un indovinello o una pura domanda di matematica, me lo aspetterei su un altro sito. Se questo è per un gioco simile a un ladro, alcuni di essi supportano già diverse velocità di movimento.
Dane,

La maggior parte dei giochi di Roguelike sembrano a turni, ma in realtà hanno una componente temporale, quindi se ti muovi in ​​diagonale, altri oggetti avranno più tempo per reagire prima che tu possa fare un'altra mossa.
Kos,

67

Devi cambiare la forma del campo visivo.

In modo che quando ci si sposta in qualsiasi direzione, diventa visibile lo stesso numero di nuovi quadrati.

Ecco una possibilità:

esempio di griglia


5
Interessante; Non ho mai considerato un campo visivo del diamante. Tuttavia, c'è un problema anche con questa visione; è una terribile idea viaggiare in diagonale ora, perché se si individua un nemico mentre si viaggia in diagonale, sarà significativamente più vicino a te che se avessi viaggiato in ortogonale.
Mr. Smith,

43
@ mr.smith, sì, è un nuovo problema, ma ho risolto il tuo vecchio ...
ChargingPun

In effetti l'hai fatto; sembra che non fossi abbastanza specifico con la domanda.
Mr. Smith,

8
Una forma circolare sarebbe d'aiuto qui?
entro il

3
@amitp Questa è una forma circolare, purché la tua funzione di distanza sia la distanza di Manhattan.
Daniel Wagner,

27

Affinché il movimento diagonale e ortogonale mostri approssimativamente la stessa area, sono necessarie due cose (ciascuna delle quali, da sola, è già stata suggerita in un'altra risposta o commento):

  1. Campo di vista approssimativamente circolare :

    Immagine dell'intervallo di visualizzazione pseudo-circolare

    Di per sé, questo non darà esattamente la stessa area rivelata per entrambi i tipi di movimento. Ad esempio, nell'immagine sopra, il movimento ortogonale rivela 9 quadrati, mentre il movimento diagonale rivela 13. È comunque migliore del rapporto 13/7 per l'area della vista quadrata nel tuo esempio.

    Infatti, con l'aumentare del raggio della vista, il rapporto delle aree rivelate per passo diagonale / ortogonale tende a √2 ≈ 1,414 per un'area circolare, mentre lo stesso rapporto per un'area di vista quadrata tende a 2.

  2. Movimento diagonale più lento :

    Nella vita reale, camminare in diagonale attraverso un campo quadrato richiede più tempo di camminare lungo uno dei lati. In effetti, ci vogliono circa √2 ≈ 1.414 volte più a lungo. Se vuoi che i movimenti nel tuo gioco sembrino realistici, dovresti farlo accadere anche nel tuo gioco.

    In pratica, 3/2 = 1.5 è un'approssimazione abbastanza buona di √2. Pertanto, puoi semplicemente fare in modo che ogni passo ortogonale prenda due unità di tempo e ogni passo diagonale ne prenda tre. Con l'area di visualizzazione di esempio sopra, ciò produce 9/2 = 4,5 quadrati rivelati per unità di tempo per il movimento ortogonale e 13/3 = 4.33 quadrati rivelati per unità di tempo per il movimento diagonale. Abbastanza vicino, eh?

    In alternativa, se si desidera attenersi a "1 passo = 1 unità di tempo" per il movimento ortogonale, è possibile utilizzare qualcosa come il sistema D&D suggerito da Dane e fare in modo che ogni secondo passo diagonale richieda un turno extra. (Se lo fai, però, devi dare ad ogni unità un contatore esplicito di quanti passi diagonali hanno fatto; altrimenti potresti finire con exploit come, diciamo, E, NE, E, NE, .. . sequenza di movimento che permette al giocatore di esplorare più velocemente di quanto previsto.)


Un modo semplice per prevenire tali exploit sarebbe quello di dire che un movimento diagonale costa due tick tranne se preceduto da un movimento nella stessa direzione che ha preso due tick.
supercat

1
@supercat: Vero, ma ciò lascerebbe la sequenza E, NE, E, NE, ... notevolmente meno efficiente per l'esplorazione del movimento ortogonale / diagonale, che potrebbe non essere desiderabile neanche.
Ilmari Karonen,

Renderebbe quella sequenza meno efficiente, ma allora? Non tutti i metodi di esplorazione dovrebbero essere ugualmente efficienti. In realtà, potrebbe non essere male avere una penalità di tempo per i cambiamenti di orientamento, con un'esenzione per i casi in cui il movimento prima o dopo era una doppia diagonale.
supercat

2
Qualche tempo fa ho fatto qualcosa di simile, e l'ho risolto avendo un movimento ortogonale a due "tick" per quadrato e un movimento diagonale a tre.
Mason Wheeler,

11

Dato che stai usando una griglia e sai in quale direzione sta procedendo l'utente, non c'è nulla che ti impedisca di adattare la risposta precedente e di utilizzare diversi campi visivi a seconda della direzione.

Ad esempio, potresti estendere il campo per includere gli angoli quando viaggi in direzioni cardinali e ridurlo di due quadrati su ciascuna estremità nelle caselle diagonali in modo che ognuno scopra 9 quadrati.

Un'altra alternativa a seconda di come funziona la tua illuminazione sarebbe quella di utilizzare una migliore approssimazione del cerchio con l'antialias, per rivelare parzialmente alcuni dei quadrati.


Questo è un compromesso interessante; se viaggi in diagonale, non tutte le celle che sarebbero state normalmente visibili sarebbero visibili. Puoi aspettare un turno (per esplorare quelle celle) o continuare a muoverti.
Mr. Smith,

8
quale risposta è "la risposta precedente"?
Mooing Duck,

7

Che ne dici, invece di avere un raggio di osservazione fisso, che l'area di visibilità del giocatore dipenda dalla direzione in cui si trovava il giocatore, e forse anche dalla direzione che il giocatore ha affrontato negli ultimi turni (un giocatore che si stava spostando verso nord potrebbe essere in grado di fai immediatamente un passo verso sud, ma potrebbe richiedere qualche giro per ottenere la massima distanza di visione in quella direzione). Un giocatore che si dirige verso nord da uno stretto corridoio in una grande stanza e continua a viaggiare verso nord avrebbe una visibilità limitata ad est e ovest, e probabilmente dovrebbe. Quando il giocatore smette di muoversi, è possibile che il sistema "esplori" automaticamente le aree invisibili che si trovano all'interno del raggio visivo attuale del giocatore, ma mentre il giocatore si sta muovendo attivamente il campo visivo dovrebbe essere più limitato.


3

In alternativa a un campo visivo più complesso (che come discusso in precedenza aggiunge i propri problemi a causa dei vincoli di un layout basato su griglia) potresti provare ad emulare l'effetto del movimento in un gioco che non si basa su un discreto griglia. Laddove è possibile la libera circolazione, uno spostamento diagonale di un'unità sarebbe esattamente quello, non le ~ 1,41 unità di movimento viste con una griglia quadrata.

Anche se non puoi forzare il movimento di una singola unità senza perdere la tua griglia discreta (che cambierebbe in modo significativo il design del tuo gioco) forse potresti tenere traccia del movimento in più preso e rilasciare le mosse in seguito: traccia gli 0,41 in più e una volta che totalizzano più di allora 1.00 fanno in modo che quell'unità salti una mossa. O viceversa: considera la diagonale normale, somma gli 0,41 per ogni movimento orizzontale o verticale e dai credito extra per le mosse una volta maggiore di 1 (o 1,41 per una mossa diagonale).

Dovresti stare attento a come lo presenti ai tuoi giocatori in modo da renderlo liscio e corretto. In uno scenario multi-umano, tali cambiamenti potrebbero diventare qualcosa di cui i giocatori traggono vantaggio strategicamente: questo potrebbe essere un problema o potrebbe esserci un modo naturale per mescolarlo con la meccanica di gioco (forse consentire ai giocatori di conservare un piccolo quantità di "credito di spostamento inutilizzato" che possono utilizzare per reagire rapidamente in un secondo momento e disporre di ulteriori 0,41 di movimento di spostamento in (o prelevare da) quel pool.

Funzionerebbe meglio se le entità di controllo del giocatore muovevano mosse di un'unità per turno. Ad esempio, tre punti movimento possono essere usati come tre mosse orizzontale o due diagonali con 0,16 rimanenti nella piscina per dopo. Una volta che colpisce 1,00, il giocatore ottiene una mossa hor / molto "libera" e a 1,41 una mossa diagonale libera. Potresti limitare l'extra a 1,5 per forzarne l'uso o la perdita a quel punto per impedire al giocatore di conservare questa energia immagazzinata per anni o lasciarla accumulare.

Ovviamente questa è una complicazione delle regole del tuo gioco che potrebbe essere completamente indesiderabile e sarebbe poco pratica per un gioco non computerizzato, ma se potessi farlo funzionare all'interno delle regole esistenti del tuo gioco limiterebbe la differenza di esplorazione tra le direzioni di movimento senza bisogno per abbandonare il formato della griglia.


2

Puoi far muovere il giocatore di due spazi se si muovono su, giù, a sinistra o a destra e solo uno in diagonale. Non lo eliminerebbe completamente, ma sarebbe molto più vicino.


Questa è una buona idea, ma credo equivale a vietare semplicemente il movimento diagonale (poiché una diagonale è solo due mosse ortogonali)
Valità
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.