【发布时间】:2020-12-22 19:14:31
【问题描述】:
我应该为一个项目编写一个逃脱游戏,但我无法移动角色。这是我的代码,如果看起来不太好,请见谅,我是新手。
import turtle
def lire_matrice(fichier):
with open(fichier) as firstf:
lecteur = firstf.read()
list_base = lecteur.split('\n')
matrice = []
for i in list_base:
list_dans_matrice = (i.split())
matrice.append(list_dans_matrice)
return matrice
def calculer_pas(matrice):
pas1 = (440//len(matrice))
pas2 = (330//len(matrice[0]))
if pas1 > pas2:
pas = pas2
else:
pas = pas1
return pas
def coordonne_case(case, pas):
case_0 = (-240, 200)
x = case_0[0] + case[1] * pas
y = case_0[1] - case[0] * pas
coordonne = (x, y)
return coordonne
def coordonne_balle(case, pas):
case_0 = (-240 + pas/2, 200 - pas/2)
x = case_0[0] + case[1] * pas
y = case_0[1] - case[0] * pas
coordonne = (x, y)
return coordonne
def tracer_carre(dimension):
for i in range(4):
turtle.fd(dimension)
turtle.rt(90)
def tracer_case(case,couleur, pas):
turtle.penup()
turtle.goto(case[0], case[1])
turtle.pendown()
turtle.color(couleur)
turtle.begin_fill()
tracer_carre(pas)
turtle.end_fill()
turtle.penup()
def afficher_plan(matrice, pas):
for ligne in range(len(matrice)):
for index in range(len(matrice[ligne])):
if matrice[ligne][index] == '0':
tracer_case(coordonne_case((ligne, index), pas), 'white', pas)
liste_all.append(coordonne_case((ligne, index), pas))
elif matrice[ligne][index] == '1':
tracer_case(coordonne_case((ligne, index), pas), 'grey', pas)
liste_mur.append(coordonne_case((ligne, index), pas))
liste_all.append(coordonne_case((ligne, index), pas))
elif matrice[ligne][index] == '2':
tracer_case(coordonne_case((ligne, index), pas), 'yellow', pas)
liste_fin.append(coordonne_case((ligne, index), pas))
liste_all.append(coordonne_case((ligne, index), pas))
elif matrice[ligne][index] == '3':
tracer_case(coordonne_case((ligne, index), pas), 'orange', pas)
liste_porte.append(coordonne_case((ligne, index), pas))
liste_all.append(coordonne_case((ligne, index), pas))
elif matrice[ligne][index] == '4':
tracer_case(coordonne_case((ligne, index), pas), 'green', pas)
liste_objet.append(coordonne_case((ligne, index), pas))
liste_all.append(coordonne_case((ligne, index), pas))
return liste_porte, liste_fin, liste_objet, liste_mur, liste_all
"""Deplacement"""
def deplacer_gauche():
global position
mouve = position[0], position[1] - 1
return mouve
def deplacer_droite():
global position
mouve = position[0], position[1] + 1
return mouve
def deplacer_bas():
global position
mouve = position[0] + 1, position[1]
return mouve
def deplacer_haut():
global position
mouve = position[0] - 1, position[1]
return mouve
def deplacement(mouvement, turtle_used, pas):
turtle_used.clear()
turtle_used.goto(coordonne_balle(mouvement, pas))
turtle_used.pendown()
turtle_used.begin_fill()
turtle_used.dot(10)
turtle_used.end_fill()
turtle_used.penup()
""" Variables
"""
position = 0, 1
liste_mur = []
liste_porte = []
liste_objet = []
liste_fin = []
liste_all = []
lp = liste_porte
lf = liste_fin
lo = liste_objet
lm = liste_mur
lall = liste_all
d_fin = {'fin': lf}
d_porte = {'porte': lp}
d_objet = {'objet': lo}
d_mur = {'mur': lm}
d_all = {'all': lall}
matrice = lire_matrice('plan_chateau.txt')
pas = calculer_pas(matrice)
""" Main code
"""
"""carte"""
turtle.tracer(0, 0)
afficher_plan(matrice, pas)
"""Deplacement"""
balle = turtle.Turtle()
balle.fillcolor('red')
balle.penup()
balle.goto(coordonne_balle((0, 1),pas))
balle.pendown()
balle.dot(10)
balle.end_fill()
turtle.listen() # Déclenche l’écoute du clavier
turtle.onkeypress(deplacer_gauche, "Left") # Associe à la touche Left une fonction appelée deplacer_gauche
turtle.onkeypress(deplacer_droite, "Right")
turtle.onkeypress(deplacer_haut, "Up")
turtle.onkeypress(deplacer_bas, "Down")
turtle.mainloop()
mouvement_gauche = deplacer_gauche()
mouvement_droite = deplacer_droite()
mouvement_bas = deplacer_bas()
mouvement_haut = deplacer_haut()
while True:
if position != mouvement_haut:
deplacement(mouvement_haut, balle, pas)
position = mouvement_haut
elif position != mouvement_bas:
deplacement(mouvement_bas, balle, pas)
position = mouvement_bas
elif position != mouvement_droite:
deplacement(mouvement_droite, balle, pas)
position = mouvement_droite
elif position != mouvement_gauche:
deplacement(mouvement_gauche, balle, pas)
position = mouvement_gauche
我得到的错误是:
Traceback (most recent call last):
File , line 172, in <module>
deplacement(mouvement_haut, balle, pas)
File , line 112, in deplacement
turtle_used.clear()
File , line 2643, in clear
self._clear()
File , line 2621, in _clear
self.screen._delete(item)
File , line 558, in _delete
self.cv.delete(item)
File "<string>", line 1, in delete
File line 2820, in delete
self.tk.call((self._w, 'delete') + args)
_tkinter.TclError: invalid command name ".!canvas"
【问题讨论】:
标签: python python-3.x turtle-graphics python-turtle