Проект черепахо-змеиной цепиPython

Программы на Python
Ответить
Anonymous
 Проект черепахо-змеиной цепи

Сообщение Anonymous »

Ниже приведен код Python для моего «Проекта Змеи» (с Turtle и Tkinter).
Цель этой программы – создать >цепочка черепах, называемая последователями, которые следуют друг за другом, причем первая черепаха в цепочке следует за особой черепахой: лидером. Сам лидер следит за движением мыши.
Он удаляет последнего ведомого из цепочки при нажатии "Del Нажата клавиша ".
Поскольку физически удалить Последователей из памяти невозможно, при удалении последнего Последователя в цепочке он добавляется в первую позицию еще одна цепочка, содержащая все "удаленные" подписчики.

Когда в цепочку необходимо добавить нового подписчика, мы сначала проверяем, есть ли они в цепочке удаленный список и использовать повторно, если он доступен; в противном случае необходимо создать новый.
Однако с моим кодом Python при нажатии на клавишу «Del» удаляется только последняя черепаха, даже если я нажимаю ее несколько раз . (Обычно он должен удалять каждого последнего подписчика).
Я думаю, проблема связана с методом:
remove_last_follower(self, event)

класса «Лидер».
Есть ли у вас идеи, как решить эту проблему? Большое спасибо за поддержку.
Мой код Python:
from turtle import Turtle, Screen, window_width, window_height # Importation du module Turtle

D = 30 # Distance entre les tortues

screen = Screen()

class Follower(Turtle):
def __init__(self, name):
Turtle.__init__(self)
self.shape("circle")
self.color("lightblue")
self.penup()
self.Prev = None
self.Next = None
self.Name = "T" + str(name)
self.coucou = False

def move(self, x, y):
angle = self.towards(x, y)
self.setheading(angle)
self.setposition(x,y)
self.back(20)
if self.Next:
x, y = self.pos()
self.Next.move(x,y)

class Leader(Follower):
def __init__(self):
super().__init__('tkz')
self.shape("turtle")
self.color("lightgreen")
self.Last = None
self.is_moving = False
self.freeze = False
self.deleted_followers = []

def freeeze(self, event):
self.freeze = not self.freeze

def add_follower(self, name):
if self.deleted_followers:
new_follower = self.deleted_followers.pop()
new_follower.showturtle()
new_follower.goto(new_follower.Prev.pos())
new_follower.setheading(new_follower.Prev.heading())
else:
new_follower = Follower(name)

if self.Last == None:
self.Last = new_follower
self.Next = new_follower
new_follower.Prev = self
else:
self.Last.Next = new_follower
self.Last = new_follower
new_follower.Prev = self.Last

new_follower.Next = None

def move(self, event):
if self.freeze == False:
x, y = event.x - window_width()/2, -event.y + window_height()/2
angle = self.towards(x, y)
self.setheading(angle)
self.goto(x, y)
#self.forward(-20)
if self.Next:
self.Next.move(x, y)

def on_move(self, event):
if self.is_moving:
return
self.is_moving = True
self.move(event)
self.is_moving = False

def remove_last_follower(self, event):
if self.Last:
last_follower = self.Last
if last_follower.Prev:
self.Last = last_follower.Prev
self.Last.Next = None
else:
self.Last = None
self.Next = None
last_follower.hideturtle()
self.deleted_followers.append(last_follower)
screen.delay(0)

try:
le = Leader()
except:
le = Leader()

screen.cv.bind("", le.add_follower)
screen.cv.bind("", le.freeeze)
screen.cv.bind("", le.remove_last_follower)

screen.cv.bind("", le.on_move)
screen.listen()
screen.mainloop()


Подробнее здесь: https://stackoverflow.com/questions/792 ... in-project
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»