L'arrière-plan
Mon fils Leonhard (4 ans) adore les labyrinthes. Je ne sais pas d'où il connaît les labyrinthes, mais il les peint et sait très bien comment ils fonctionnent:
Récemment, il a commencé à créer un jeu à partir de ses peintures. Ce sont ses règles:
- un carré noir indique le point de départ.
- un crochet indique la sortie du labyrinthe (c'est là que l'on se retire).
- vous pouvez collecter des couronnes.
- vous pouvez collecter des pépites d'or (les choses rondes).
- vous pouvez aller et venir, mais pas plus.
- des flèches peuvent vous guider vers la sortie. (S'il me peint un labyrinthe à résoudre, ils sont souvent trompeurs).
Version annotée:
- bleu: point de départ
- orange: couronnes
- jaune: zone avec des pépites d'or
- vert: crochet (sortie)
- rose: flèches (surtout trompeuses)
La tâche
Peut-être que vous savez, à l'âge de 4 ans, les enfants commencent à raconter des tourtes au porc et parfois il ne suit pas ses propres règles, surtout s'il découvre qu'il ne peut plus atteindre la fin du labyrinthe.
C'est là que vous entrez en jeu: comme je cherche des jeux pour les enfants de toute façon, vous transformez son idée en un jeu où la tricherie n'est pas possible.
Eh bien, nous avons besoin de plus de définitions, je dirais:
- le terrain de jeu est un
n
*m
rectangle de carrés de taille égale. - un carré peut avoir 0 à 4 murs, un de chaque côté.
- une couronne vaut 50 points.
- une pépite d'or vaut 20 points.
- marcher sur une place déjà parcourue soustrait 1 point.
- les carrés sont marqués de manière à identifier la fréquence à laquelle le joueur a marché dessus (0, 1 ou 2 fois)
- le joueur peut marcher dans 4 directions, sauf s'il y a un mur.
- Le périphérique d'entrée peut être n'importe quoi. Veuillez considérer la prise en charge du clavier.
- Le labyrinthe doit être résoluble. C'est-à-dire qu'il doit être possible d'atteindre l'hameçon à partir du point de départ et il doit être possible de collecter tous les objets de valeur (même si cela n'entraîne pas le score le plus élevé possible).
- Si le joueur est bloqué, le jeu se termine.
- Le joueur ne doit pas mourir en tombant du plateau. Vous pouvez mettre un mur autour du labyrinthe complet ou envelopper les bords, comme vous le souhaitez.
- le programme accepte un argument mot (0-65535) en entrée. Ceci est le germe du générateur de nombres aléatoires. Le fait d'appeler à nouveau le programme avec la même graine donne le même labyrinthe.
Prime:
- calculer le maximum de points pouvant être collectés. Considérez qu'en raison de -1 points, il pourrait être préférable de ne pas collecter tous les objets.
- Montrer la meilleure solution (moyen le plus court pour obtenir le maximum de points)
Les règles
C'est un concours de popularité, car je veux pouvoir lire et comprendre le code et peut-être m'adapter aux nouvelles idées de mon fils. Désolé, codez les golfeurs, peut-être voulez-vous créer une copie de cette question avec des règles plus adaptées au golf, par exemple une version console avec tous les caractères définis.
Le jeu le plus populaire du 3 mai deviendra la réponse acceptée. Et, hé, pourquoi ne pas le publier dans une boutique d'applications?
la source
Réponses:
Javascript
Travail en cours. Malheureusement, le labyrinthe n'est pas toujours résoluble - la limite en arrière est le véritable obstacle.
Edit 1 Cosmetic
Edit 2 Un meilleur gameplay, mais le gros problème est toujours là
la source
Java
Je ne me suis jamais plaint de GolfScript ou CJam, mais voici quand même une réponse Java pour vous. Ce fut un défi vraiment agréable. ;)
Le processus de création du labyrinthe réel utilise le algorithme de recherche en profondeur d'abord , mais avec une approche itérative. Voici comment cela fonctionne.
Nous commençons avec un tableau 2D de
int
valeurs, chaque élément étant un -1. Un élément aléatoire avec des indices pairs est choisi et sa valeur devient 0:Ensuite, le programme entre dans une boucle, vérifiant les cellules disponibles jusqu'à ce qu'il atteigne un état où il n'y a pas de cellules disponibles. Cela peut se produire plusieurs fois et c'est à ce moment qu'il commence à revenir en arrière. À ce moment, tous les 0 qu'il rencontre deviennent des 1. C'est également à cette période qu'il détermine si une sortie doit être placée à cet endroit. Donc, à la fin de tout cela, le tableau pourrait ressembler à ceci:
Lorsqu'il y a un nombre prédéterminé de 1 ou de 0 à certains endroits de la matrice, la boucle se termine. Ensuite, en utilisant le tableau, le labyrinthe résultant est dessiné:
Il est facile de voir que les -1 dans le tableau représentent des murs et que les 0 et les 1 sont des couloirs. Les objets sont distribués au hasard dans le labyrinthe. L'ellipse rouge est le "joueur" que vous contrôlez.
Le labyrinthe est enveloppé dans un volet de défilement pour plus de commodité, de sorte que si la taille dépasse la taille maximale du cadre, vous pouvez faire défiler pour voir le reste du labyrinthe.
Je dirais que le seul problème avec cela est de savoir comment la vérification de fin de partie est effectuée. J'ai réfléchi à plusieurs façons de procéder, mais j'ai fini par recourir à tout coder en dur. Je suis ouvert aux suggestions sur la façon dont cela peut être fait.
la source
MazeMaker.java:168: error: cannot find symbol printArray(); ^ symbol: method printArray() location: class MazeMaker
printArray
que j'ai utilisée pour sortir le tableau, mais je l'ai supprimée et j'ai oublié de supprimer l'appel de méthode.Python
Je me rends compte que je suis en retard pour la fête, mais voici mon point de vue sur ce défi. Je me suis basé sur le texte car je n'ai pas encore appris à jouer au pygame. Il s'agit de Python 3. Modifiez l'entrée en raw_input et cela devrait également fonctionner en python2.
Le crochet (sortie) est représenté par "J". "W" est des couronnes (50). "G" est des pépites d'or (20). Le joueur est "O". J'ai expérimenté l'utilisation de "P" pour le lecteur, mais j'ai trouvé "O" plus facile à identifier.
J'ai utilisé la première génération de labyrinthe de profondeur standard, puis j'ai ajouté l'or, les couronnes, le crochet et la position actuelle du joueur. Je n'ai pas appliqué les critères permettant d'obtenir tous les trésors.
la source