Ниже приведен код 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
Проект черепахо-змеиной цепи ⇐ Python
Программы на Python
1733638679
Anonymous
Ниже приведен код Python для моего «Проекта Змеи» (с Turtle и Tkinter).
[b]Цель[/b] этой программы – создать [b] >цепочка черепах[/b], называемая последователями, которые следуют друг за другом, причем первая черепаха в цепочке следует за особой черепахой: лидером. Сам лидер [b]следит за движением мыши[/b].
Он [b]удаляет[/b] последнего ведомого из цепочки при нажатии [b]"Del Нажата клавиша "[/b].
Поскольку физически удалить Последователей из памяти невозможно, при удалении последнего Последователя в цепочке он добавляется в первую позицию еще одна [b]цепочка[/b], содержащая все [b]"удаленные" подписчики[/b].
Когда в цепочку необходимо добавить [b]нового подписчика[/b], мы сначала [b]проверяем, есть ли они в цепочке удаленный список[/b] и [b]использовать повторно[/b], если он доступен; в противном случае необходимо создать новый.
Однако с моим кодом 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()
Подробнее здесь: [url]https://stackoverflow.com/questions/79261118/turtle-snake-chain-project[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия