Accueil > Le numérique > Programmation > Productions d’élèves > Jeu du serpent (Snake) en Python (Tkinter)

Jeu du serpent (Snake) en Python (Tkinter)

BenjaminV propose un jeu du serpent (Snake) avec Python (Tkinter).

Il faut améliorer la collision avec la pomme.

Le jeu n’est pas terminé, il manque la collision du serpent avec lui-même.

Attention ! Benjamin efface tout le canevas pour afficher les nouvelles positions du serpent. Ce n’est pas la meilleure façon de faire ! L’idée serait d’observer que c’est l’anneau de tête qui avance et l’anneau de queue qui disparaît.... Cela allège considérablement la programmation.

Utilisez les touches Z,D,S et Q pour déplacer le serpent.

Screenshot et code source :

Snake Tkinter par BenjaminV

  1. from tkinter import *
  2. from random import randrange
  3.  
  4. def move():
  5. global x
  6. global y,pX,pY
  7. global Serpent
  8. can.delete('all')
  9. i=len(Serpent)-1
  10. j=0
  11. while i > 0:
  12. Serpent[i][0]=Serpent[i-1][0]
  13. Serpent[i][1]=Serpent[i-1][1]
  14. can.create_oval(Serpent[i][0], Serpent[i][1], Serpent[i][0] +10, Serpent[i][1]+10,outline='green', fill='black')
  15. i=i-1
  16.  
  17.  
  18.  
  19. #Serpent[1][0]=Serpent[0][0]
  20. #Serpent[1][1]=Serpent[0][1]
  21. #can.create_oval(Serpent[1][0], Serpent[1][1], Serpent[1][0] +10, Serpent[1][1]+10,
  22. #outline='green', fill='green')
  23. can.create_rectangle(pX, pY, pX+5, pY+5, outline='green', fill='black')
  24. #print(Serpent[0],Serpent[1],Serpent[2])
  25.  
  26. if direction == 'gauche':
  27. Serpent[0][0] = Serpent[0][0] - dx
  28. if Serpent[0][0] < 0:
  29. Serpent[0][0] = 493
  30. elif direction == 'droite':
  31. Serpent[0][0] = Serpent[0][0] + dx
  32. if Serpent[0][0] > 493:
  33. Serpent[0][0] = 0
  34. elif direction == 'haut':
  35. Serpent[0][1] = Serpent[0][1] - dy
  36. if Serpent[0][1] < 0:
  37. Serpent[0][1] = 493
  38. elif direction == 'bas':
  39. Serpent[0][1] = Serpent[0][1] + dy
  40. if Serpent[0][1] > 493:
  41. Serpent[0][1] = 0
  42. can.create_oval(Serpent[0][0], Serpent[0][1], Serpent[0][0]+10, Serpent[0][1]+10,outline='green', fill='blue')
  43. test()
  44. test()
  45.  
  46. if flag != 0:
  47. fen.after(60, move)
  48.  
  49. def newGame():
  50. global pX,pY
  51. global flag
  52. if flag == 0:
  53. flag = 1
  54. move()
  55.  
  56. def left(event):
  57. global direction
  58. direction = 'gauche'
  59.  
  60. def right(event):
  61. global direction
  62. direction = 'droite'
  63.  
  64. def up(event):
  65. global direction
  66. direction = 'haut'
  67.  
  68. def down(event):
  69. global direction
  70. direction = 'bas'
  71.  
  72. def test():
  73. global pomme
  74. global x,y,pX,pY
  75. global Serpent
  76. if Serpent[1][0]>pX-7 and Serpent[1][0]<pX+7:
  77. if Serpent[1][1]>pY-7 and Serpent[1][1]<pY+7:
  78. #On remet une pomme au hasard
  79. pX = randrange(5, 495)
  80. pY = randrange(5, 495)
  81. can.coords(pomme,pX, pY, pX+5, pY+5)
  82. #On joute un nouveau point au serpent
  83. Serpent.append([0,0])
  84. #print(Serpent)
  85.  
  86. x = 245
  87. y = 24
  88. dx, dy = 10, 10
  89. flag = 0
  90. direction = 'haut'
  91. Serpent=[[x,y],[x+2.5,y+2.5],[x+5,y+5],[0,0]]
  92.  
  93. pX = randrange(5, 495)
  94. pY = randrange(5, 495)
  95.  
  96. fen = Tk()
  97. can = Canvas(fen, width=500, height=500, bg='black')
  98. can.pack(side=TOP, padx=5, pady=5)
  99.  
  100. #oval2=can.create_oval(Serpent[2][0], Serpent[2][1], Serpent[2][0] +10, Serpent[2][1]+10, outline='green', fill='black')
  101.  
  102. oval1=can.create_oval(Serpent[1][0], Serpent[1][1], Serpent[1][0] +10, Serpent[1][1]+10, outline='green', fill='red')
  103.  
  104. oval = can.create_oval(Serpent[0][0], Serpent[0][1], Serpent[0][0]+10, Serpent[0][1]+10, outline='green', fill='green')
  105.  
  106. pomme = can.create_rectangle(pX, pY, pX+5, pY+5, outline='green', fill='black')
  107.  
  108. b1 = Button(fen, text='Lancer', command=newGame, bg='black' , fg='green')
  109. b1.pack(side=LEFT, padx=5, pady=5)
  110.  
  111. b2 = Button(fen, text='Quitter', command=fen.destroy, bg='black' , fg='green')
  112. b2.pack(side=RIGHT, padx=5, pady =5)
  113.  
  114. tex1 = Label(fen, text="Cliquez sur 'New Game' pour commencer le jeu.", bg='black' , fg='green')
  115. tex1.pack(padx=0, pady=11)
  116.  
  117. fen.bind('<d>', right)
  118. fen.bind('<q>', left)
  119. fen.bind('<z>' , up)
  120. fen.bind('<s>', down)
  121.  
  122. fen.mainloop()

Télécharger

vendredi 22 avril 2016 par wlaidet


| Plan du site | Mentions légales | Suivre la vie du site RSS 2.0 | Haut de page | SPIP | ScolaSPIP