Diciamo che ho un oggetto, chiamato "Tile", che ha sia un nome che un elenco di direzioni. Assumiamo che ogni tessera abbia una griglia di pixel 3x3, che può essere attivata o disattivata. Il pixel centrale del centro (indicato con una "N" nel diagramma) della tessera si accende quando la direzione Nord è "Vero". Il pixel del centro sinistra ("W" nel diagramma) della tessera si accende quando la direzione Ovest è "Vero". Il pixel del centro destra ("E") della tessera si accende quando la direzione Est è "Vero". Il pixel centrale inferiore ("S") della tessera si accende quando la direzione Sud è "Vero". Il pixel centrale ("C") è sempre attivo.
Schema:
N
WCE
S
Ogni tessera può avere solo un inizio e una fine, quindi ci sono 6 tessere possibili. (Straights East-West e North-South e tutti e 4 i pezzi che formano angoli di 90 gradi)
Ecco un riquadro di esempio, completo di attributi:
Tile1:
-North: True
-East: False
-South: False
-West: True
Ecco come appare questo riquadro, se i trattini sono pixel "off" e i segni percentuali sono in pixel:
-%-
%%-
——-
Diciamo che ho una lista di queste tessere, dove ogni tessera si collega a quella nella lista prima di essa, e io le sto generando proceduralmente.
L'idea è di essere in grado di generare percorsi di lunghezze arbitrarie, che non devono necessariamente esistere all'interno dei limiti di un array.
Certo, voglio che la mia mappa delle tessere sia logicamente ragionevole, quindi non può avere più di 3 sinistri o diritti di fila. La mia attuale "soluzione" è di avere un contatore dove sottrarre uno se gira a destra del riquadro corrente e aggiungerne uno se gira a sinistra. Potrei quindi forzarlo a scegliere un pezzo che gira a sinistra se il contatore è a -3, e forzarlo a scegliere un pezzo di svolta a destra se il contatore è a 3. (Questo algoritmo funzionerà con i miei attuali metodi di generazione, che non è il problema.)
Qual è il modo più efficace, date le tessere precedenti e le rispettive direzioni, per determinare se incrementare o decrementare il contatore?
Scusa se questo è un po 'prolisso, non riesco a pensare a un modo migliore per esprimere la mia domanda.
Modifica: Per chiarire, l'obiettivo dell'algoritmo è determinare se una tessera data gira a sinistra, a destra o dritta (che non è in realtà un turno, ma IDC) in base alle tessere precedenti e restituisce rispettivamente 1, -1 o 0, . Questo è tutto.