Partage
  • Partager sur Facebook
  • Partager sur Twitter

Créer un snake Pygame

Post explicant comment coder un snake en python (pygame)

Sujet résolu
    26 février 2021 à 17:33:34

    Bonjour, si tu lis ceci c'est que tu veux coder un snake en python mais que tu ne vois pas comment il faut s'y prendre. Ne t'en fais pas car je vais t'expliquer, dans ce post, comment on peut le faire.

    Avant meme de ce lancer dans du code, il faut redéfinir ce qu'est un skane. La vous vous dites surement, bas c'est simple c'est un serpent de pixel qui se déplace en gagnant un pixel devant et en perdant le dernier pixel :

    Et ducoup viens la fameuse question COMMENT ? Comment faire pour le déplacer ?

    Vu que c'est des "pixel" la solution que je propose utilise donc un tableau :

    [ [0,0,0,0,0],
    
      [0,1,1,1,0],
    
      [0,1,0,0,0],
    
      [0,1,1,0,0] ]

    Ce qui donne, si on colore seuleument les pixels de valeur 1 : 


     Cependant, comment faire pour créer un déplacement.  Si on reprend l'idée du tableau, on va devoir ajouté un 1 au début  et supprimé le dernier 1 :

    [ [0,0,0,0,0],  ->  [ [0,0,0,0,0],   -> [ [0,0,0,0,0],
    
      [0,1,1,1,0],        [0,1,1,-1,0],       [0,1,1,0,0], 
     
      [0,1,0,0,0],        [0,1,0,0,0],        [0,1,0,0,0],
    
      [0,1,1,0,0] ]       [0,1,1,+1,0] ]      [0,1,1,1,0] ]

    Mais comment rendre ce processus simple ?

    La solution ? C'est ultra facile mais nous faut 1 élement en plus (la longueur du serpent) et modif les données de la grille.

    Maintenant, chaque cellule du serpent ne sera pas vu comme un 1 mais aura son propre numéro :

    Ce qui donne dans le tableau :

    [ [0,0,0,0,0],
    
      [0,4,5,6,0],
    
      [0,3,0,0,0],
    
      [0,2,1,0,0] ]

    Et maintenant, vous vous dite ok, c'est cool mais comment on fait le déplacement ?

    Pour déplacer le snake, vous avez juste besoin de changer en 1 la valeur d'une des cases cotè de celle de valeur 1 :

    Ce qui nous fait, quand on a la flèche du haut pressé, ce tableau :

    [ [0,0,0,0,0],    Up arrow -> [ [0,0,0,0,0]
      [0,5,0,0,0],                  [0,5,0,0,0],
      [0,4,0,0,0],                  [0,4,0,1,0],
      [0,3,2,1,0] ]                 [0,3,2,1,0] ]

    Puis, je vais faire +1 pour chaque case (sauf les 0 et la case du "nouveau" 1). Ce qui donne :

    [ [0,0,0,0,0],    
      [0,6,0,0,0],                
      [0,5,0,1,0],                 
      [0,4,3,2,0] ]                

    Enfin, je vais supprimé le dernier nombre. Pour ce faire, c'est très simple... Vous vous souvenez quand j'avais dis qu'il nous faudrait la longueur total du snake ? Et bien c'est parcequ'avec elle, on a juste besoin de changé en 0 le pixel suppérieur à la longueur du serpent.

    Traduction en Code :

    if valeur_pixel > longueur_serpent :
       valeur_pixel = 0

    Ce qui nous donne, avec le tableau :

    [ [0,0,0,0,0], -> [ [0,0,0,0,0],   -> [ [0,0,0,0,0]
      [0,6,0,0,0]       [0,6>5,0,0,0],      [0,0,0,0,0],    
      [0,5,0,1,0],      [0,5,0,1,0],        [0,5,0,1,0],     
      [0,4,3,2,0] ]     [0,4,3,2,0] ]       [0,4,3,2,0] ]

    Et ainsi de suite...

    Il nous reste à afficher les pixels != 0 (différent de 0) et on a notre snake.

    Juste une dernière chose, la latence...

    Comme vous le voyez, le jeu snake est composé d'une latence entre chaque mouvement. On pourrait faire mettre dans notre jeu un FPS à 1 pour la recréer :

    clock = pygame.time.Clock()
    FPS = 1    
    
    while True :
        -- Boucle
             de
             Jeu  --
        #fixer le nombre de fps
        clock.tick(FPS)

    Cependant on a un problèmes, les touches qu'on appuit pendant l'attente ne sont pas prise en compte. Face à cela, je vous propose cette solution : On créer une variable tour qui va faire bouger le serpent tous les x tour.

    Ce qui nous donne :

    clock = pygame.time.Clock()
    FPS = 1    
    
    tour = 0
    while True :
        -- Boucle
             de
             Jeu  --
        if tour == 30 :
            avancer()
            tour = 0
    
        #fixer le nombre de fps
        clock.tick(FPS)
    
        tour += 1

    Voilà, c'est la fin des mes explications sur comment faire un snake. J'espère qu'elles auront étaient assez claire (pédaguogue n'étant pas mon travail). J'ai volontairement "oublier" de donner le code car, comme ça, c'est à vous de réfléchir sur comment le faire :-).

     Bonne Chance, BiMathAx STUDIO

    youtube channel (Musique et Python) : https://www.youtube.com/channel/UCyYCyAy-62w7QNu2agk2LDA







    • Partager sur Facebook
    • Partager sur Twitter
      27 février 2021 à 9:50:26

      y a plus simple ...
      • Partager sur Facebook
      • Partager sur Twitter

      Python c'est bon, mangez-en. 

      Créer un snake Pygame

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown