Question

Je travaille sur un jeu d’aventure en Python utilisant Pygame. Mon problème principal est de savoir comment définir les limites de la pièce et faire en sorte que le personnage principal se promène sans heurter les limites à chaque fois. Malheureusement, je n’ai jamais étudié les algorithmes, je n’ai donc aucune idée de la façon de calculer un chemin. Je sais que cette question est assez générale et difficile à répondre, mais un point dans la bonne direction serait très apprécié. Merci!

Était-ce utile?

La solution

Je vous recommande de lire l’algorithme de recherche A * , car il est courant utilisé dans les jeux pour résoudre les problèmes.

Si ce jeu est bidimensionnel (ou 2.5), je vous suggère d’utiliser un système de tuiles car la vérification des collisions sera plus facile. Il existe de nombreuses informations en ligne qui peuvent vous aider à démarrer avec ces solutions.

Autres conseils

Il existe deux manières simples de définir vos limites qui conviennent à un tel jeu.

La méthode la plus simple consiste à diviser votre zone en une grille et à utiliser un tableau 2D pour savoir quels carrés de la grille sont passables. Habituellement, ce tableau stocke également vos informations cartographiques. Ainsi, à chaque position, un numéro indique si ce carré contient de l'herbe, un mur, une route ou une montagne, etc. (et donc quelle image afficher). Pour vous donner une image approximative:

######
#.#  #
# ## #
#    #
######

Une méthode plus complexe, nécessaire si vous souhaitez utiliser une sorte de "labyrinthe". Avec parois minces , Look consiste à utiliser un tableau 2D qui indique s’il existe ou non un mur vertical entre les carrés de la grille, ainsi qu’un mur horizontal entre les carrés de la grille. Une image approximative (elle a l'air d'avoir été étirée en ASCII, mais j'espère que vous comprendrez):

 - - - -
| |     |
   - - 
|       |
 - - - -

La prochaine chose à décider est la direction dans laquelle votre personnage peut se déplacer (haut / bas / gauche / droite est plus facile, mais les diagonales ne sont pas trop beaucoup plus difficiles). Ensuite, le programme doit essentiellement "mentalement". explorez la région, à partir de votre position actuelle, en espérant trouver la destination.

Une recherche simple, facile à mettre en œuvre pour haut / bas / gauche / droite et qui vous trouvera le chemin le plus court, s’il en existe un, est appelée Recherche de largeur-premier . Voici un pseudocode:

queue = new Queue #just a simple first-in-first-out
queue.push(startNode)
while not queue.empty():
    exploreNode = queue.pop()
    if isWalkable(exploreNode): #this doesn't work if you use
                                #"thin walls". The check must go
                                #where the pushes are instead

        if isTarget(exploreNode):
            #success!!!
        else:
            #push all neighbours
            queue.push( exploreNode.up )
            queue.push( exploreNode.down )
            queue.push( exploreNode.left )
            queue.push( exploreNode.right )

Cet algorithme est lent pour les grandes cartes, mais il vous familiarisera avec certains concepts de recherche de graphes et de recherche de parcours. Une fois que vous avez vérifié qu'il fonctionne correctement, vous pouvez essayer de le remplacer par A * ou un objet similaire, ce qui devrait donner les mêmes résultats plus rapidement!

A * et de nombreux autres algorithmes de recherche utilisent une file d'attente prioritaire au lieu d'une file d'attente FIFO. Cela leur permet de considérer "plus probable" d'abord les chemins, mais contourner les chemins du rond-point s'il s'avère que les chemins les plus directs sont bloqués.

  

Malheureusement, je n’ai jamais étudié les algorithmes, je n’ai donc aucune idée de la façon de calculer un chemin.

Avant de commencer à écrire des jeux, vous devez vous renseigner sur ceux-ci. Cela nécessite un peu plus d'effort au début, mais vous fera gagner beaucoup de temps plus tard.

Je ne connais pas pygame, mais de nombreuses applications utilisent généralement les volumes englobants pour définir le bord d'une région. L'idée est que, à mesure que votre personnage marchera, vous vérifierez si le volume du personnage croise celui du mur. Vous pouvez ensuite ajuster la vélocité ou empêcher votre personnage de bouger. Utilisez des formes différentes pour obtenir un mur lisse afin que votre personnage ne reste pas coincé sur les bords pointus.

Ces concepts peuvent être utilisés pour toute application nécessitant une détection rapide des contours et des limites.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top