Aujourd'hui, nous allons générer une carte pour un RPG roguelike!
Exemple de carte:
##########
#### F#
#### ##
## C#C#
# ## #
# C #E #
#### # #
# #
#P #
##########
#
sont des murs, P
est l'emplacement de départ du joueur, F
est la finition qui doit être atteinte, C
sont des pièces de monnaie qui peuvent être collectées et E
sont des ennemis qui peuvent être combattus.
Spécifications de la carte:
- La hauteur et la largeur doivent être comprises entre 10 et 39 inclus. La hauteur n'a pas à être égale à la largeur.
- Les bordures des cartes doivent être remplies de murs.
P
doit être placé dans le coin inférieur gauche.F
doit être placé dans le coin supérieur droit.- Il devrait y avoir entre 1 et 3 ennemis.
- Il devrait y avoir entre 2 et 4 pièces.
- Il devrait y avoir une certaine quantité de murs au milieu. Il doit y avoir un chemin d'accès
P
à TousC
,E
etF
en gardant à l'esprit que le joueur ne peut pas se déplacer en diagonale. - Chaque combinaison possible devrait avoir une chance de se produire.
Règles
- Le moins de programmes d'octets gagne.
- Votre programme ne doit prendre aucune entrée.
- Votre programme peut ne pas se terminer avec une erreur (une sortie non fatale
STDERR
est ok, mais nous ne pouvons pas avoir notre crash de type voyou après la génération de la carte!) - Une seule nouvelle ligne de fin est autorisée et l'espace de fin est autorisé.
- Aucune autre sortie n'est autorisée.
Réponses:
Perl, 293 octets
-9 octets grâce à @Dom Hastings
Ajoutez un
-E
indicateur pour l'exécuter:Cependant, son exécution prend beaucoup de temps, je recommande donc d'utiliser cette version à la place:
Essayez-le en ligne!
Explication
Cela prend beaucoup de temps, car la liste dans laquelle nous choisissons au hasard les personnages à mettre sur le plateau (
@a
) contient 1369 espaces blancs et#
, et seulement 4 pièces et 3 ennemis. Donc, si la taille de la largeur et de la hauteur sont petites, il y a beaucoup d'espaces et#
par rapport à la pièce et aux ennemis, il est donc très probable qu'une carte aléatoire ne soit pas valide. C'est pourquoi la version "optimisée" est plus rapide: la liste dans laquelle nous choisissons les personnages est juste un peu plus grande que la carte (la liste est@a=((C)x4,(E)x3,("#")x($v=rand $=*$%),($")x($=*$%-$v))
: un nombre aléatoire$v
de#
(inférieur à la taille de la carte), et dessize of the map - $v
espaces blancs).la source
$"
est une variable Perl légitime, mais la coloration syntaxique ne le sait pas, c'est pourquoi elle ressemble à ça. Ok, je vais supprimer le commentaire sur les espaces inaccessibles.PHP,
422417415309373369364361 octetsfonctionne sur une chaîne sans saut de ligne; creuse des chemins aléatoires entre les extras. Courez avec
-r
.Remarque: Les chemins sont créés en marchant dans des directions aléatoires. Le choix de la direction pour chaque étape générera principalement des cartes grandes ouvertes; et l'exemple de carte est très peu susceptible d'apparaître; mais il est possible.
panne
la source
<?php .... ?>
E
s.C # (Visual C # Interactive Compiler) , 730 octets
Essayez-le en ligne!
Non golfé:
Édition: économisé 8 octets, le rendait légèrement moins efficace en verrouillant la boucle de test accessible au lecteur à 99 itérations. Je sais que ça ne rivalisera jamais vraiment avec les autres réponses ici, mais je m'amuse!
la source