Alcuni rogue-like basati su testo non ti consentono di camminare contro i muri e di tornare indietro se ci provi. Perché farlo quando puoi far muovere il giocatore nella direzione valida più vicina?
La sfida
Scrivi un programma di funzioni che, data una direzione e una griglia di caratteri 3 per 3, emetta la stessa griglia dopo che il giocatore ha fatto un passo.
Per esempio,
9
#..
.@#
#.#
diventa
#.@
..#
#.#
Ingresso
La direzione è data da una singola cifra da 1 a 9, ciascuna corrispondente a 8 direzioni cardinali e ferma. Questo deriva dalle posizioni relative dei numeri su una tastiera:
NO NE NE .. \ | / ... 7 8 9 W- 4 5 6 -E ... 1 2 3 ../ | \ SW S SE
Tuttavia, puoi anche usare i numeri 123, 456, 789 invece di 789, 456, 123. In altre parole, puoi scambiare le 2 righe oi numeri in alto e in basso se lo desideri. Queste sono le uniche 2 combinazioni di indici accettabili.La griglia 3 per 3 sarà composta da 3 caratteri ASCII distinti e stampabili che rappresentano il pavimento percorribile, le pareti e il giocatore. (Nei casi di test,
.
viene utilizzato per il pavimento,#
i muri sono ed@
è il giocatore)- Puoi scegliere quali caratteri utilizzare il tuo programma, ma devi indicarli nella tua risposta e devono essere coerenti su più prove.
- Il personaggio che rappresenta il personaggio sarà sempre al centro della griglia 3 per 3 e la direzione sarà sempre tra 1 e 9 (incl.)
- È possibile accettare input in qualsiasi ordine
- La griglia 3 per 3 può essere inserita come un array di caratteri, un array di stringhe, una stringa di 9 lunghezze o un'altra alternativa ragionevole.
Produzione
- Ritorno da una funzione o output su StdOut o alternativa più vicina
- Sono consentiti spazi finali e newline
- È necessario utilizzare le stesse rappresentazioni dei caratteri dell'input
- Gli stessi formati consentiti per gli input sono consentiti per gli output
Come si muove il giocatore
Se la direzione specificata è bloccata da un muro (ad es. Se l'esempio sopra aveva la direzione 6), guarda le 2 direzioni più vicine:
- Se una (e una sola) direzione è libera, sposta il giocatore in quella direzione.
- Se nessuna direzione è libera, guarda le 2 direzioni successive più vicine (esclusa la direzione 5). Se hai avvolto tutto intorno e non hai trovato alcuna direzione aperta (giocatore circondato da muri), non muovere il giocatore
- Se entrambe le direzioni sono aperte, scegline una per spostarti a caso (anche se non necessariamente in modo uniforme).
Se la direzione indicata è un 5, non muovere il giocatore
Casi test
( #
= muro, .
= piano, @
= giocatore)
Ingresso: 9 # .. . @ # #. # Produzione: #. @ .. # #. # Ingresso: 3 # .. . @ # #. # Produzione: # .. .. # # # @ Ingresso: 7 ##. # # @ .. # Produzione: ## @ ##. #.# o #.# .. # @. # Ingresso: 5 ... . @. ... Produzione: ... . @. ... Ingresso: 2 ### # # @ ### Produzione: ### # # @ ###
punteggio
Questo è code-golf , quindi vince la risposta più breve in byte.
123;456;789
invece di 789;456;123
?
yuhjklbn
? STRAPPARE.