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.