J'essaie de générer au hasard un graphique dirigé dans le but de créer un jeu de puzzle similaire aux puzzles de glissement de glace de Pokemon.
C'est essentiellement ce que je veux pouvoir générer aléatoirement: http://bulbanews.bulbagarden.net/wiki/Crunching_the_numbers:_Graph_theory .
Je dois pouvoir limiter la taille du graphique dans une dimension x et y. Dans l'exemple donné dans le lien, il serait limité à une grille 8x4.
Le problème que je rencontre n'est pas de générer un graphique au hasard, mais de générer un graphique au hasard, que je peux correctement cartographier dans un espace 2D, car j'ai besoin de quelque chose (comme une roche) de l'autre côté d'un nœud, pour le faire avoir un sens visuel lorsque vous cessez de glisser. Le problème avec cela est que parfois la roche se retrouve dans le chemin entre deux autres nœuds ou peut-être sur un autre nœud lui-même, ce qui provoque la rupture du graphique entier.
Après avoir discuté du problème avec quelques personnes que je connais, nous sommes arrivés à quelques conclusions qui pourraient conduire à une solution.
- Inclusion des obstacles dans la grille dans le graphique lors de sa construction.
- Commencez avec une grille entièrement remplie et dessinez simplement un chemin aléatoire et supprimez les blocs qui feront fonctionner ce chemin.
Le problème devient alors de déterminer ceux à supprimer pour éviter d'introduire un chemin supplémentaire plus court. Nous pensions également qu'un algorithme de programmation dynamique pourrait être bénéfique, bien qu'aucun d'entre nous ne soit trop compétent pour créer des algorithmes de programmation dynamique à partir de rien. Toutes les idées ou références sur le nom officiel de ce problème (s'il s'agit d'un problème de graphe officiel) seraient les plus utiles.
Voici quelques exemples de ce que j'ai accompli jusqu'à présent en plaçant simplement des blocs au hasard et en générant le graphique de navigation à partir du début / de la fin choisi. L'idée (comme décrit dans le lien précédent) est que vous commencez au S vert et que vous souhaitez atteindre le F. vert. mur. Dans ces images, le gris est un mur, le blanc est le sol et la ligne violette est la longueur minimale du début à la fin, et les lignes noires et les points gris représentent les chemins possibles.
Voici quelques mauvais exemples de graphiques générés aléatoirement:
Voici quelques bons exemples de graphiques générés aléatoirement (ou ajustés manuellement):
J'ai également semblé remarquer que les plus difficiles lors de la lecture d'un puzzle sont ceux qui ont beaucoup de nœuds de haut niveau le long du chemin minimum.
la source
Réponses:
propriétés plus avancées:
exemple:
exemple de combinaison de tuiles:
vous aimerez peut-être le jeu Tsuro , il utilise des tuiles pour générer un plateau aléatoire.
la source
Peut-être que la rétro-ingénierie pourrait vous aider si vous êtes prêt pour cela.
S'il existe une et une seule solution à chaque problème, vous pouvez probablement générer un graphique basé sur la réponse unique. Cela ne vous obligera pas à faire de la programmation dynamique ou même à sauter la force brute et à opter pour une génération méthodique.
Vous pouvez vous y prendre en:
Bien que vous deviez utiliser un périphérique en fonction de la complexité et de la taille du problème qui générera cette question pour vous. Ne vous contentez pas de force brute. Essayez plutôt un algorithme aléatoire. Cela pourrait vous aider.
la source
Que diriez-vous d'une autre approche? Commencez avec un labyrinthe vide et ajoutez des blocs comme celui-ci:
Touche finale: trouvez l'itinéraire le plus court avec l'algorithme que vous avez fourni. Prenez note de toutes les cellules utilisées et commencez à remplir le reste au hasard, chaque fois en vous assurant que l'itinéraire le plus court ne raccourcit pas.
Il y a une mise en garde à l'étape deux, lorsque vous ne pouvez pas mettre le dernier bloc afin qu'il ne croise pas les chemins utilisés, mais je vois deux solutions à cela: déplacer le bloc de fin plus tôt ou annuler quelques étapes et réessayer.
Et une autre pensée pour la longueur aléatoire des étapes coulissantes - vous voudrez peut-être le choisir de sorte qu'un bloc placé plus tôt soit réutilisé, tant que les chemins ne se chevauchent pas.
la source