IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Programmation multimédia/Jeux Python Discussion :

Mouvement du snake (jeu)


Sujet :

Programmation multimédia/Jeux Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 37
    Par défaut Mouvement du snake (jeu)
    Bonjour, j'ai prgrammé la fonction qui sert à décrire le mouvement du serpent avec les virages etc...
    Le problème est que ça fonctionne à moitité...En effet chaque morceau du serpent se suit mais il y a des légers problèmes de coordonnées, car les boules qui suivent ne sont plus bien ancrées dans leurs cases...

    Regardez :
    - En ligne droite : http://img14.imageshack.us/img14/9003/56838195.jpg
    - En ligne montante (après un virage vers la gauche) : http://img37.imageshack.us/img37/2721/43201085.jpg


    Je mets la fonction de mon code source qui permet cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
        def mouvement(self) :
            "Fonction qui gère le mouvement du serpent <Récursivité>"
            # Liste de listes des coordonnées de chaque boule :
            if self.mode ==True :
                # On teste si obstacle quelconque
                self.testObstacle()
                # Liste temporaire à chaque itération de cette fonction, elle contiendra les coordonnées
                self.coord = []
                for i in range(len(self.corps)) :
                    # On bouge tout d'abord la tête :
                    self.boss.move(self.corps[0], self.dx, self.dy)
                    # On récupère donc les <nouvelles> coordonnées de la tête et des autres parties
                    self.coordonnees(i)
                    # On transmet les coordonnées sauf à la tête
                    if i>0 :
                        # Transmission des coordonnées par "récurrence"
                        self.boss.coords(self.corps[i], self.coord[i-1][0]-self.r, self.coord[i-1][1]-self.r, self.coord[i-1][0]+self.r, self.coord[i-1][1]+self.r)
                self.txt2.configure(text=str(self.coord))
                # Récursivité
                self.boss.after(200, self.mouvement)
            else :
                self.finAnimation()
    La fonction coordoonnées récupère simplement les coordonnées de chaque partie du serpent!

    Par contre quand je fais le simple mouvement dans la boucle (move(self.corps[i]) sans prendre en compte les coordonnées, ça fonctionne parfaitement !

    Merci de bien vouloir m'aider
    a+

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 068
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 068
    Par défaut
    je ne comprends pas bien ton algo.
    moi je donnerai à chaques éléments les coordonnées de l'élément qui le précède pour faire avancer le schmilblick.

  3. #3
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 37
    Par défaut
    C'est ce que je fais, j'avance la "tête" de dx et dy et ensuite (if i>0) je transmets à chaque itération les coordonnées.

    Mais voilà la boule qui suit, suit bien la tête mais pas proprement(elle n'est pas bien ancrée dans une case)

    Je ne vois vraiment pas pourquoi ça fait cela, car normalement la boule (2eme) qui suit reprend bien les coordonnées de la tête(1ere boule) etc...

    :s

  4. #4
    Membre Expert
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 068
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 068
    Par défaut
    faudrait plus de code, du moins le code des fonctions qui sont appelées.

  5. #5
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 37
    Par défaut
    Voila les principales fonctions concernant le mouvement:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
        def coordonnees(self, i) :
            "Modifie la liste des coordonnées à chaque mouvement"
            # Création de la liste des coordonnées :
            # On crée une liste de la taille de la totalité des boules :
            # Liste temporaire pour enregistrer une liste des coordonnées d'une boule :
            coordsxy = []
            self.coords_corps = self.boss.coords(self.corps[i])
            self.coords_corps[0], self.coords_corps[1] = int(self.coords_corps[0]), int(self.coords_corps[1])
            # Coordonnées x et y de la boule i-1 :
            coordsxy.append(self.coords_corps[0])
            coordsxy.append(self.coords_corps[1])
            # On enregistre la liste des coordonnées de la boule i-1 dans le liste permanente
            self.coord.append(coordsxy)
     
     
        def mouvement(self) :
            "Fonction qui gère le mouvement du serpent <Récursivité>"
            # Liste de listes des coordonnées de chaque boule :
            if self.mode ==True :
                # On teste si obstacle quelconque
                self.testObstacle()
                # Liste temporaire à chaque itération de cette fonction, elle contiendra les coordonnées
                self.coord = []
                for i in range(len(self.corps)) :
                    # On bouge tout d'abord la tête :
                    self.boss.move(self.corps[0], self.dx, self.dy)
                    # On récupère donc les <nouvelles> coordonnées de la tête et des autres parties
                    self.coordonnees(i)
                    # On transmet les coordonnées sauf à la tête
                    if i>0 :
                        # Transmission des coordonnées par "récurrence"
                        self.boss.coords(self.corps[i], self.coord[i-1][0]-self.r, self.coord[i-1][1]-self.r, self.coord[i-1][0]+self.r, self.coord[i-1][1]+self.r)
                self.txt2.configure(text=str(self.coord))
                # Récursivité
                self.boss.after(1000, self.mouvement)
            else :
                self.finAnimation()
     
        def deplHaut(self, event) :
            "Le serpent part vers le haut"
             # Il part vers le haut si <=> n'est pas vers le bas ou vers le haut :
            if self.dy ==0 :
                self.dx =0
                self.dy =-10
     
     
        def deplBas(self, event) :
            "Le serpent part vers le bas <=> il n'est pas vers le haut"
            if self.dy == 0 :
                self.dy = 10
                self.dx = 0
     
        def deplGauche(self, event) :
            "Le serpent part vers la gauche <=> il n'est pas vert la droite"
            if self.dx == 0 :
                self.dy =0
                self.dx =-10
     
        def deplDroite(self, event) :
            "Le serpent part vers la droite <=> il n'est pas vers la gauche"
            if self.dx == 0 :
                self.dy = 0
                self.dx = 10
     
        def testObstacle(self) :
            "Vérification de la position du serpent"
            # Si la tête dépasse les limites du canevas
    Merci beaucoup pour votre rapidité

  6. #6
    Membre Expert
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 068
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 068
    Par défaut
    bon, en fait voilà un autre algo:
    tu ne deplaces pas le serpent physiquement.
    tu ajoutes la tête aux nouvelles coordonnées et tu supprimes le bout de la queue sauf quand il bouffe un truc; vu que la tête est pareille que le reste du corps.

    c'est pour un snake de base évidement.

    cependant je jette quand même un oeil sur ton code.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Conception du mouvement dans un jeu 2D
    Par Noémie O'connor dans le forum Général Java
    Réponses: 8
    Dernier message: 14/01/2014, 14h47
  2. [TPW] Mouvement du "snake"
    Par abdou monta dans le forum Turbo Pascal
    Réponses: 2
    Dernier message: 30/11/2012, 14h38
  3. Aide pour pouvoir ammeliorer mon jeu (Snake)
    Par kump_ dans le forum Projets
    Réponses: 24
    Dernier message: 13/08/2008, 02h26
  4. Décomposition d'un mouvement sur un plateau de jeu
    Par florentc dans le forum AWT/Swing
    Réponses: 6
    Dernier message: 25/06/2008, 02h29
  5. [ancien jeu] Snake deux joueur en ligne?
    Par Extra-Nitro dans le forum Web
    Réponses: 7
    Dernier message: 28/02/2007, 18h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo