Спасибо https://replit.com/@politick за предоставленный код.
Первым делом, при работе с черепахой, импортируем данную библиотеку в проект. Нам так же потребуется функция randint()
из библиотеки random
. Сразу после импорта научим нашу черепашку перемещаться.
Для этого используем метод .forward()
и вставим его в цикл for.
Мы научили нашу черепашку перемещаться, но обычная стрелка выглядит не очень привлекательно, давайте поменяем её на черепаху! Над циклом вставьте следующий код t.shape('turtle')
.
Теперь давайте нарисуем финишную черту, до которой необходимо будет добраться нашей черепашке. Используем методы .up()
.goto()
.down()
. Данный код пишем над циклом. Должно получиться как на картинке ниже.
Мы видим, что наша черепашка не добегает до финишной черты.
Можно увеличить количество итераций, но дело в том, что если мы передвинем нашу финишную черту влево или вправо, то наша черепашка будет либо забегать за черту, либо пересекать её и идти дальше. Поэтому, нам необходимо прекратить перемещать черепаху, как только она коснулась финишной черты. Для этого лучше переписать цикл for
на цикл while
. Чтобы понять где сейчас находится черепаха, воспользуемся методом .xcor()
. Этот метод возвращает текущую координату черепахи по оси x. Мы будем идти вперёд до тех пор, пока координата черепахи меньше координаты финишной черты. Координату x финишной черты мы можем узнать из метода .goto(150,-60)
— это первый аргумент который мы передаём. Переписываем цикл…
Теперь наша черепашка прекратит движение ровно на линии финиша.
И, казалось бы, на этом всё, но нет! Давайте устроим настоящие черепашьи бега! Поставим несколько черепашек на линию старта и заставим их бежать наперегонки! Как? Вся сила в ООП(Объектно Ориентированном Программировании)
Для начала, объявим список colors, который будет хранить цвета всех наших будущих гонщиков. А ниже объявим, пока что пустой, список наших будущих гонщиков. Пиши этот код перед тем как рисуешь финишную черту.
Теперь тебе необходимо создать участников гонки, цветом указанным в списке colors и расположить их друг под другом (т.е. меняя координату y) на стартовой позиции. Кстати, не забудьте скрыть стрелку, которая рисует финишную черту. Она у нас в гонке не участвует 😉
Будте внимательны, прочитайте комментарии к коду.
При выходе из цикла у нас будет полностью заполненный список с участниками гонки, каждый своего цвета и каждый на своей стартовой позиции.
Самое время объявить старт нашей гонки и заставить стремительно следовать к черте финиша каждую черепашку.
Каждый наш участник является объектом класса Turtle и ему доступны все методы которые мы могли применять к нашей черепашке. Объявим переменную racing и присвоим ей значение True. ГОНКА НАЧАЛАСЬ!!! Теперь, пока гонка хранит True, все участники будут постепенно перемещаться к финишной черте, но как только один из участников пересечёт финишную черту, сразу же прекращаем гонку, присвоив переменной racing значение False.
Можно удалить написанный ранее цикл while и написать новый, или переписать его.
Но ещё не всё так гладко. Сейчас все наши черепашки одновременно пересекают финишную черту.
Добавим последний штрих, пусть наши гонщики перемещаются на случайное значение в диапазоне от 1 до 5. Вставьте функцию randint(1, 5)
внутрь метода forward()
. Весь код написан ниже. Ознакомьтесь с ним и попробуйте что-нибудь изменить, например, переместить финишную черту. Или попробуйте написать код, который будет распечатывать цвет ‘гонщика’ который первым пересёк финиш.