Ihr Programm muss eine mehrzeilige Zeichenfolge wie folgt enthalten:
#############
# #
# p #
# #
#############
p
ist der Spieler und #
ist ein Block.
Darunter im Terminal sollte eine Eingabezeile stehen, die sagt:
How do you want to move?
Wenn der Spieler tippt l
, muss er nach links gehen, wenn es keinen Block gibt, andernfalls, wenn es einen Block gibt, kann er nicht durchgehen und bewegt sich natürlich nicht, jetzt muss die Ausgabe im Terminal aktualisiert werden ( und die vorherige Ausgabe gelöscht / überschrieben):
#############
# #
# p #
# #
#############
Er kann l
für links, r
für rechts, u
für oben und d
für unten tippen .
Die Eingabe ist immer mehrzeilig, wird jedoch nicht immer mit Leerzeichen in einem perfekten Rechteck aufgefüllt. Darüber hinaus können sich die Hashes an einer beliebigen Stelle in der Zeichenfolge befinden und sind nicht immer miteinander verbunden. Beispielsweise:
## ##
# #
## p
#
ist ein gültiger Dungeon. (Beachten Sie das Fehlen von Leerzeichen in jeder Zeile)
Wenn der Spieler die Zeichenfolge verlässt, muss er nicht angezeigt werden. Wenn er später zurückkommt, muss er erneut angezeigt werden.
Und die Grenzen von „außerhalb“ der Zeichenfolge das sind length(longest_line)
durch number_of_lines
Rechteck, so dass selbst wenn eine Zeile mit Leerzeichen auf der rechten Seite nicht aufgefüllt, wird diese Position nicht der Grenzen betrachtet werden. Beispiel mit dem früheren Dungeon:
## ##
# #p
##
#
Die zweite Zeile hatte kein Leerzeichen, wo das p jetzt ist, aber das spielt keine Rolle.
Schließlich muss Ihr Programm für immer eine Schleife ausführen und Eingaben vornehmen.
Testfälle
Testfall 1:
####
# p#
#
####
How do you want to move?
d
####
# #
# p
####
Testfall 2:
####
p#
#
####
How do you want to move?
l
####
p #
#
####
How do you want to move?
d
####
#
p #
####
How do you want to move?
l
####
#
p #
####
How do you want to move?
l
####
#
#
####
How do you want to move?
r
####
#
p #
####
Natürlich sind diese nicht vollständig. Ihr Code sollte für immer eine Schleife bilden und den Bildschirm zwischen den einzelnen Ausgaben löschen .
Ihre Ausgabe darf zur Eingabe als How do you want to move?\n<input>
oder How do you want to move?<input>
auffordern (dh Sie benötigen die Eingabe nicht in einer leeren Zeile), und Sie benötigen keine leere Zeile zwischen der letzten Zeile des Dungeons und der Eingabeaufforderung. (Sie können jedoch nicht in derselben Zeile sein)
Standardlücken sind nicht erlaubt! Dies ist Code-Golf, also gewinnt der kürzeste Code in Bytes!
l
,r
,u
, oderd
) kann alles sein, nicht nur „Wie Sie verschieben möchten“? Es wirkt sich nicht wirklich auf die Antworten aus, außer auf Golf.Antworten:
MATLAB,
268247246 BytesWahrscheinlich nicht wettbewerbsfähig, aber es hat Spaß gemacht. Golfversion:
Lesbare Version:
Die
try
Blöcke sollen verhindern, dass die Funktion außerhalb der Grenzen abstürzt. Ich bin mir sicher, dass zwei von ihnen übertrieben sind, aber ich kann es nicht besser spielen.Es ist erwähnenswert, dass MATLAB das Array nach unten und rechts erweitert, der Player jedoch verschwindet, wenn er zum ersten Mal in einen "unerforschten" Bereich wechselt. Wenn Sie sich beispielsweise um ein Feld außerhalb der aktuellen Grenzen des Dungeons nach rechts bewegen, verschwinden Sie, aber in der nächsten Runde erweitert MATLAB das Array um die neue Spalte (oder Zeile, wenn Sie sich nach unten bewegen).
'#'==d(y,x)
spart ein Byte im Vergleich zud(y,x)=='#'
, da Sie kein Leerzeichen zwischenif
und benötigen'#'
quelle
Kaffeeskript: 580 Bytes
Ich habe alles, was ich konnte, aus diesem speziellen Algorithmus und meinem müden Gehirn herausgepresst. Ich brauche Ferien.
quelle