Voici une première approche d'un jeu très connu :
from kivy.app import App
from kivy.graphics import Line, Color, Rectangle, Ellipse
from kivy.uix.widget import Widget
from kivy.clock import Clock
import random
class Anneau(Widget):
def __init__(self,canvas,pos_x,pos_y):
self.pos=(pos_x,pos_y)
self.canvas=canvas
self.size=(9,9)
#On dessine un anneau:
with self.canvas:
Color(0,1,0,0.5)
self.objid=Ellipse(pos=self.pos, size=self.size)
class Snake(Widget):
def __init__(self,canvas,pos_x,pos_y):
#On definit un deplacement initial:
self.dx = 10
self.dy = 0
self.pos=[pos_x,pos_y]
#On definit une position pour la tete:
self.canvas=canvas
#On cree une liste de d'anneaux pour le corps:
self.corps=[]
#On dessine le corps en commencant par le tete:
for k in range(0,10):
self.corps.append(Anneau(self.canvas,150-k*10,400))
def move(self):
#On enleve la queue:
self.canvas.remove(self.corps[-1].objid)
self.corps=self.corps[:len(self.corps)-1]
#On calcule la position de la tete:
self.pos = (self.dx + self.pos[0],self.dy +self.pos[1])
#On dessine la nouvelle tete et on l'ajoute au corps a l'index 0:
with self.canvas:
Color(0,1,0,0.5)
self.corps.insert(0,Anneau(self.canvas,self.pos[0],self.pos[1]))
class Jeu(Widget):
def debut(self):
self.snake=Snake(self.canvas,150,400)
def update(self, dt):
self.snake.move()
def on_touch_down(self, touch):
#On calcule les differences
diff_x=touch.x-self.snake.pos[0]
diff_y=touch.y-self.snake.pos[1]
#On calcule le sens:
dx,dy=10,10
if diff_x<0:
diff_x=-1*diff_x
dx=-10
if diff_y<0:
diff_y=-1*diff_y
dy=-10
#On definit le deplacement en fonction des differences:
if diff_x > diff_y:
self.snake.dx=dx
self.snake.dy=0
else:
self.snake.dx=0
self.snake.dy=dy
class MyApp(App):
def build(self):
Jeu1=Jeu()
Jeu1.debut()
Clock.schedule_interval(Jeu1.update, 3.0/10.0)
return Jeu1
if __name__ == '__main__':
MyApp().run()
Comment fonctionne le déplacement du serpent ?
Augmentez un peu la vitesse du serpent.
Gérez les bords de l'écran (on revient de l'autre côté ou on perd...).
Ajoutez une pomme à une position aléatoire.
Ajoutez une méthode qui permet de tester si la tête du serpent mange la pomme.
Ajoutez un anneau au serpent si la tête mange la pomme.
Plus dur ! : Ajoutez une méthode qui teste la collision de la tête du serpent avec le reste du corps.