Diese Herausforderung basiert auf einem Vorschlag, der vor einigen Jahren von der Usenet-Gruppe rec.games.roguelike.development vorgeschlagen wurde. Ich kann den ursprünglichen Newsgroup-Beitrag nicht finden, aber Sie können sich das Github-Repo der Lösungen ansehen . Es wurde nur in ein paar Sprachen gespielt und ich würde gerne noch mehr sehen!
Zielsetzung
Ziel ist es, ein Programm zu erstellen, das eine Draufsicht auf einen Dungeon mit ASCII-Zeichen zeigt. Es wird ein @
Schild geben, das den Spieler darstellt, der durch den freien Raum im Dungeon bewegt werden kann (dargestellt durch ), obwohl er nicht durch die Wände gehen kann (dargestellt durch
#
).
Die Karte des Dungeons muss folgendermaßen aussehen:
#### ####
# # # #
# #### #
# #
## ##
# #
# #
## ##
# #
# #### #
# # # #
#### ####
Der Spieler muss an Position {2,2} beginnen, wobei {0,0} die obere linke Ecke ist.
Schnittstelle
Der Benutzer muss in der Lage sein, den Player mithilfe der Pfeiltasten auf der Tastatur in die vier Hauptrichtungen zu bewegen.
Es muss eine Möglichkeit für den Benutzer geben, das Programm zu beenden. Es muss kein eleganter Exit sein (zum Beispiel spielt es keine Rolle, ob eine Ausnahme gedruckt wird).
Die Karte und der Spieler müssen gezeichnet werden, bevor Eingaben vorgenommen wurden, und der Spieler muss nach jeder Eingabe aktualisiert werden.
Bibliotheken
Sie können auch etablierte Bibliotheken für die Eingabe oder Ausgabe von Konsolen verwenden, z. B. Curses. Erwähnen Sie in Ihrer Antwort einfach, was Sie verwenden.
Wertung
Dies ist Code Golf, kürzester Code gewinnt!
Antworten:
C
257 253 222220Verwendet
system("cls")
anstelle von Flüchen (Verwendungsystem("clear")
für Linux-Systeme) und einen cleveren Algorithmus, um die Karte in eine 8-stellige Zahl einzupassen. Nicht erweiterte Tasten beenden das Programm, z. B. Escape.BEARBEITEN: Zeigt jetzt auch Ihren Helden unter der Karte an, indem Sie
a<230
anstelle vona<132
:Code:
quelle
putch
esputchar
gibt das Gleiche, aber ich weiß nicht, wie ich es ersetzen sollgetch
- es gibt auch eingetchar
, aber es funktioniert bei mir nicht - es scheint, dass es die Cursortasten nicht erkennt.Ruby 1.9 + Flüche (248)
quelle
Python
332319317Die Python Curses-Bibliothek wird nur unter Linux offiziell unterstützt. Es gibt inoffizielle für Windows, aber ich kann nicht garantieren, dass dies damit funktioniert.
Um ein paar Zeichen zu speichern, habe ich die Schlüsselcodes für oben, unten, links und rechts fest codiert. Dies kann bei manchen Menschen zu Problemen führen. Wenn dies für niemanden funktioniert, kann ich eine Version posten, die sollte.
Verwenden Sie Strg + C zum Beenden. Sie müssen Ihr Terminal wahrscheinlich nach dem Beenden zurücksetzen, aber die Herausforderung besagte ausdrücklich, dass der Ausgang nicht ordnungsgemäß sein musste.
quelle
QBasic,
314313 BytesDiese Art von Problem erfordert einfach eine QBasic-Lösung.
Dies ist Golf QBasic, das durch den Autoformatter erheblich erweitert wird. Wenn Sie jedoch genau diesen Code in die IDE eingeben und F5 drücken, sollte er ausgeführt werden. Getestet auf QB64 .
Erläuterung:
Die Karte wird zeilenweise als die Bits der Ganzzahlen in der
DATA
Anweisung codiert (1 für Leerzeichen, 0 für Wand). Die verschachtelteFOR
Schleife entpackt sie, speichert Wahrheitswerte im 2D-Arrayw
und druckt#
oderentsprechend. (Beachten Sie, dass dies in QBasic der Fall ist
-1
. Deshalb addieren wir zu 35, anstatt zu subtrahieren!) Der Spieler beginnt bei 3,3, da die meisten Dinge in QBasic 1-indiziert sind.Wir geben dann eine
GOTO
Schleife: Druck der@
, Tastatureingabe, Konvertieren zu erweiterten Zeichencodes erhalten und modifizieren ,x
undy
basierend darauf , ob der Benutzer gedrückt L / U / R / D. Wennw(x,y)
es wahr ist, dann ist es ein Raum und wir können dorthin ziehen; Ansonsten bleib sitzen. Der kürzeste Weg, den ich zum Beenden gefunden habe, ist das Drücken der Tabulatortaste (ASCII9
). Jede andere Eingabe führt uns zurück zum erstenLOCATE
Anweisung.Ich muss sagen, ich bin ziemlich gekitzelt, Python mit einer QBasic-Antwort geschlagen zu haben.
quelle