👤

FRstudy.me offre une plateforme conviviale pour trouver et partager des connaissances. Posez n'importe quelle question et recevez des réponses rapides et bien informées de notre réseau de professionnels expérimentés.

Bonjour, je dois coder un snake en python en programmation orientée objet sur une carte microbit (petite carte avec un affichage led 5x5 et un acceleromètre qui détecte l'orientation de la carte).

J'ai un dernier problème qui fait que mon code ne fonctionne pas : le serpent avance, mais les leds sur lesquelles il est passé ne s'éteigne pas apres son passage. Pourriez vous m'aider ?
voici mon code jusqu'à présent :

from microbit import *
from random import randint

class Cellule:
def __init__(self, v, s=None):
"""
Constructeur d'une cellule.

Parametres
----------
v: type indéfini
s: None ou Cellule

Attributs
---------
valeur: contenu de la cellule.
suivante : cellule suivante ou None.

"""
self.valeur = v
self.suivante = s

def appartient(self, x):
"""Teste si x appartient à la cellule."""
courante = self
while courante.suivante is not None:
if courante.valeur == x:
return True
courante = courante.suivante
if courante.valeur == x:
return True
else:
return False

def get_valeur(self):
"""Renvoie la valeur contenue dans la cellule."""
return self.valeur

def get_suivante(self):
"""Renvoie la cellule suivante."""
return self.suivante


class Serpent:
sensi=500
pomme=(0,1)

def __init__(self):
self.corps=Cellule((2,0), Cellule((1,0)))
self.d=(1,0)
self.l=2

def __len__(self):
return self.l

def get_tete(self):
return self.corps.get_valeur()

def get_queue(self):
return self.corps.get_suivante().get_valeur()

def enfile(self,p):
self.corps=Cellule(p,self.corps)
self.l+=1

def defile(self):
if self.l==0:
raise Exception('Le corps est vide.')
if self.l==1:
self.corps==None
self.l-=1
else:
courante = self.corps
while courante.suivante.suivante is not None:
courante=courante.suivante
courante.suivante.valeur=None
self.l-=1

def appartient(self,p):
if self.l==0:
raise Exception('Le corps est vide.')
if self.l>=1:
return self.corps.appartient(p)

def tourne(self,d_x,d_y):
if (self.d==(0,-1) or self.d==(0,1)) and d_x>self.sensi:
self.d=(1,0)
if (self.d==(0,-1) or self.d==(0,1)) and d_x<-self.sensi:
self.d=(-1,0)

if (self.d==(1,0) or self.d==(-1,0)) and d_y>self.sensi:
self.d=(0,1)
if (self.d==(1,0) or self.d==(-1,0)) and d_y<-self.sensi:
self.d=(0,-1)

def addition(self):
return (self.corps.get_valeur()[0] + self.d[0],self.corps.get_valeur()[1]+self.d[1])

def avance(self):
if self.addition()==Serpent.pomme :
self.enfile(self.addition())
pommex=randint(0,4)
pommey=randint(0,4)
while self.corps.appartient((pommex,pommey))==True:
pommex=randint(0,4)
pommey=randint(0,4)
Serpent.pomme=(pommex,pommey)
return True
if self.corps.appartient(self.addition()):
return False
if (self.addition()[0]<0 or self.addition()[1]<0) or (self.addition()[0]>4 or self.addition()[1]>4):
return False
if 0<=self.addition()[0]<=4 and 0<=self.addition()[1]<=4:
self.enfile(self.addition())
self.defile()
return True

def affiche(x):
courante = x.corps
while courante.suivante is not None:
display.set_pixel(courante.get_valeur()[0], courante.get_valeur()[1], 5)
courante=courante.suivante
Pomme = display.set_pixel(Serpent.pomme[0], Serpent.pomme[1], 9)

while True:
snake = Serpent()
jeu = True
while jeu==True:
if affiche(snake)==True and snake.avance()==True:

affiche(snake)
sleep(1000)
Serpent.tourne(snake, accelerometer.get_x(), accelerometer.get_y())
else:
jeu = False
print('Perdu')
display.clear()


Sagot :

Merci d'utiliser cette plateforme pour partager et apprendre. Continuez à poser des questions et à répondre. Nous apprécions chaque contribution que vous faites. Pour des réponses de qualité, visitez FRstudy.me. Merci et revenez souvent pour des mises à jour.