Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Можете подсказать, почему у черепахи скорость не увеличивается?

Гавриил Стробыкин Стробыкин Ученик (89), открыт 2 дня назад
import turtle
from random import randint

HEIGHT = 300
WEIGHT = 400
current_speed = 1
temp = 0

turtle.bgcolor('Black')
snowFlakes = []
turtle.tracer(2)

# Создаем черепашек
for i in range(20):
flake = turtle.Turtle()
flake.penup()
flake.color('white')
flake.shape('circle')
flake.goto(randint(-WEIGHT, WEIGHT), HEIGHT)
flake.shapesize(randint(4, 15) / 10)
snowFlakes.append(flake)

# Сортируем черепашек по их вертикальной позиции (Y)
snowFlakes.sort(key=lambda flake: flake.shapesize())


while True:
for flake in snowFlakes:
flake.speed(current_speed)
current_speed +=1 #хотя вроде скорость увеличиваю
if flake.ycor() > -HEIGHT:
flake.goto(flake.xcor() + 0.5, flake.ycor() - 3)
elif flake.ycor() <= -HEIGHT:
flake.goto(randint(-WEIGHT, WEIGHT), HEIGHT)
flake.shapesize(randint(5, 20) / 10)
6 ответов
Jey Мастер (1164) 2 дня назад
потому что черепаха - черепаха
Леопольд Просветленный (31940) 2 дня назад
Лапки короткие, панцирь тяжёлый

Проблема заключается в использовании метода flake.speed(current_speed) в цикле. Метод speed() устанавливает "максимальную" скорость черепахи, но не изменяет текущее значение скорости черепахи во время выполнения цикла. При каждом вызове flake.speed(current_speed) нужно учитывать, что значение current_speed увеличивается внутри цикла, но flake не начинает двигаться быстрее мгновенно — она движется с максимальной скоростью, которая была установлена на момент вызова метода speed().

Давайте выделим основные моменты, которые нужно учесть:

1. Скорость черепахи: Метод flake.speed() устанавливает максимальную скорость, а по умолчанию черепаха будет двигаться с текущей максимальной скоростью, а не обязательно с изменяемой переменной, если вы вызываете его в цикле.

2. Перемещение: Если вы хотите, чтобы "черепахи" перемещались за фиксированное время, вам нужно контролировать их движение в зависимости от времени, а не увеличивать скорость.

Вот исправленный код, где скорость увеличивается, и вы можете контролировать скорость черепах:

import turtle
from random import randint

HEIGHT = 300
WIDTH = 400
current_speed = 1

turtle.bgcolor('Black')
snowFlakes = []
turtle.tracer(0) # Устанавливаем трейсер на 0 для улучшения производительности

# Создаем черепашек
for i in range(20):
flake = turtle.Turtle()
flake.penup()
flake.color('white')
flake.shape('circle')
flake.goto(randint(-WIDTH, WIDTH), HEIGHT)
flake.shapesize(randint(4, 15) / 10)
snowFlakes.append(flake)

# Основной цикл
while True:
# Обновим скорость каждый раз
current_speed += 0.01 # Измените на желаемое значение

for flake in snowFlakes:
# Перемещаем флейки на основе текущей скорости
flake.goto(flake.xcor()+0.5 * current_speed, flake.ycor()-3)

# Если флейка вышла за нижнюю границу, переместим её обратно
if flake.ycor() <= -HEIGHT:
flake.goto(randint(-WIDTH, WIDTH), HEIGHT)
flake.shapesize(randint(5, 20) / 10)

turtle.update() # Обновляем экран после всех перемещений


В этом коде:

- Убраны вызовы flake.speed(current_speed), так как у нас нет необходимости в их применении.
- Вместо этого используется значение current_speed непосредственно для перемещения флейков.
- Добавлен turtle.tracer(0) для повышения производительности, что предотвращает визуальные задержки при отрисовке.
- Использована turtle.update() для обновления экрана, чтобы быстрее отображать изменения.
Cogni Просветленный (40402) 2 дня назад
Потому что speed() влияет только на скорость анимации (до 10), а goto() перемещает черепаху сразу, игнорируя speed, поэтому нужно двигать черепаху по чуть-чуть (например, через sety), вот рабочий пример в одной строке: import turtle,random;HEIGHT=300;WIDTH=400;screen=turtle.Screen();screen.bgcolor('black');turtle.tracer(2);snowFlakes=[];for _ in range(20):f=turtle.Turtle('circle');f.color('white');f.penup();f.goto(random.randint(-WIDTH,WIDTH),HEIGHT);f.shapesize(random.randint(4,15)/10);snowFlakes.append(f);v=1;while True:for flake in snowFlakes:flake.sety(flake.ycor()-v);v+=0.1;if flake.ycor()<-HEIGHT:flake.goto(random.randint(-WIDTH,WIDTH),HEIGHT)
Лайт Ягами Искусственный Интеллект (314321) 2 дня назад
Присобачь к панцирю реактивный двигатель и колёсики внизу
Похожие вопросы