Heute erstellen wir eine Karte für ein schurkenhaftes Rollenspiel!
Beispielkarte:
##########
#### F#
#### ##
## C#C#
# ## #
# C #E #
#### # #
# #
#P #
##########
#
sind Mauern, P
ist der Startort des Spielers, F
ist das Ziel, das erreicht C
werden muss, sind Münzen, die gesammelt werden können, und E
sind Feinde, die bekämpft werden können.
Kartenspezifikationen:
- Höhe und Breite sollten beide zwischen 10 und einschließlich 39 liegen. Die Höhe muss nicht gleich breit sein.
- Die Kartenränder sollten mit Wänden ausgefüllt werden.
P
sollte in der unteren linken Ecke platziert werden.F
sollte in der oberen rechten Ecke platziert werden.- Es sollte zwischen 1 und 3 Feinde geben.
- Es sollten zwischen 2 und 4 Münzen sein.
- In der Mitte sollten sich einige Wände befinden. Es sollte einen Weg geben, von
P
dem aus man zu Jedem gelangenC
kannE
, undF
dabei zu berücksichtigen, dass sich der Spieler nicht diagonal bewegen kann. - Jede mögliche Kombination sollte eine gewisse Chance haben.
Regeln
- Wenig Byte-Programm gewinnt.
- Ihr Programm sollte keine Eingaben annehmen.
- Ihr Programm wird möglicherweise nicht mit einem Fehler beendet (eine nicht schwerwiegende Ausgabe ist
STDERR
in Ordnung, aber wir können nach der Kartengenerierung keinen schurkenhaften Absturz haben!) - Eine einzelne nachfolgende Newline ist zulässig, und nachfolgender Leerzeichen ist zulässig.
- Es ist keine andere Ausgabe zulässig.
code-golf
ascii-art
path-finding
maze
Pavel
quelle
quelle
Antworten:
Perl, 293 Bytes
-9 Bytes dank @Dom Hastings
Fügen Sie ein
-E
Flag hinzu, um es auszuführen:Die Ausführung dauert jedoch sehr lange. Ich empfehle daher, stattdessen diese Version zu verwenden:
Probieren Sie es online aus!
Erläuterung
Das Ausführen dauert lange, da die Liste, aus der wir zufällig die Zeichen auswählen, die auf das Brett gelegt werden sollen (
@a
), 1369 Leerzeichen und#
und nur 4 Münzen und 3 Feinde enthält. Wenn also die Größe der Breite und Höhe klein ist, gibt es viele Leerzeichen und im#
Vergleich zur Münze und den Feinden ist es sehr wahrscheinlich, dass eine zufällige Karte nicht gültig ist. Deshalb ist die "optimierte" Version schneller: Die Liste, aus der wir die Zeichen auswählen, ist nur ein wenig größer als die Karte (die Liste ist@a=((C)x4,(E)x3,("#")x($v=rand $=*$%),($")x($=*$%-$v))
: eine Zufallszahl$v
von#
(schlechter als die Größe der Karte) undsize of the map - $v
Leerzeichen).quelle
$"
ist eine legitime Perl-Variable, aber die Syntaxhervorhebung weiß nichts darüber, deshalb sieht es so aus. Ok, ich werde den Kommentar zu nicht erreichbaren Leerzeichen löschen.PHP,
422417415309373369364361 Bytesarbeitet mit einer Zeichenfolge ohne Zeilenumbrüche; gräbt zufällige Pfade zwischen den Extras. Laufen Sie mit
-r
.Hinweis: Die Pfade werden durch Gehen in zufällige Richtungen erstellt. Die Wahl der Richtung für jeden Schritt erzeugt meistens Karten, die weit offen sind. und es ist sehr unwahrscheinlich, dass die Beispielkarte erscheint; aber es ist möglich.
Nervenzusammenbruch
quelle
<?php .... ?>
E
s generiert .C # (Visual C # Interactive Compiler) , 730 Byte
Probieren Sie es online aus!
Ungolfed:
Bearbeiten: 8 Bytes gespeichert, etwas weniger effizient, da die vom Player zugängliche Testschleife auf 99 Iterationen gesperrt wurde. Ich weiß, dass es hier nie wirklich mit den anderen Antworten konkurrieren wird, aber ich habe Spaß!
quelle