Черепашка меняет скорость и отражается от стен

В прошлом уроке мы рассмотрели, как остановить Черепашку, когда она дошла до определенной границы.

from turtle import *
shape('turtle') # форма - черепашка (а не треугольник)
def move():
	fd(5)
	if xcor() < 200:
		ontimer(move,30)

move()

done()

Теперь сделаем так, чтобы Черепашка разворачивалась, когда доходила до правой стороны экрана (x = 200)

from turtle import *
shape('turtle')
def move():
	fd(5)
	if xcor() > 200:
		rt(180)
	ontimer(move,30)

move()

done()
1. Черепашка после запуска программы ползет влево и, достигнув координаты x = -200, разворачивается и начинает ползти вправо
2. Черепашка ползает влево-вправо, разворачиваясь на границах x = -200 и x = 200
3. Черепашка ползает вверх-вниз, разворачиваясь на границах y = -200, y = 200

Не менее интересным может быть вариант с замкнутыми границами слева и справа: дойдя до правой границе Черепашка оказывается слева:

from turtle import *
shape('turtle')
speed(0) # нужно, чтобы Черепашка мгновенно переходила с правой границы на левую. Если убрать - будет переходить плавно.
def move():
	fd(5)
	if xcor() > 200:
		setx(-200) # изменить координату x Черепашки

	ontimer(move,30)

move()

done()

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

from turtle import *
from random import randrange as rnd
shape('turtle')
speed(0)
def click(x,y):
	h = rnd(0,360)
	seth(h)
	move()
	
def move():
	fd(5)
	ontimer(move,30)

onscreenclick(click)
done()

На этот раз задача сложная: рассчитать правильное отражение от стены. Угол падения равен углу отражения.

from turtle import *
from random import randrange as rnd
shape('turtle')
speed(0)
def click(x,y):
	h = rnd(0,360)
	seth(h)
	move()
	
def move():
	fd(5)
	x,y = pos()
	if x > 200 or x < -200:
		h = heading()
		seth(180-h)
	if y > 200 or y < -200:
		h = heading()
		seth(-h)
	ontimer(move,30)

onscreenclick(click)
done()
4. Черепашка отражается от верхней и нижней границы, но дойдя до левой границе — оказывается на правой (и наоборот).

Следующие задания будут посвящены изменению скорости Черепашки.
Мы уже использовали переменную для скорости, когда учили Черепашку останавливаться по щелчку.
В этот раз обойдемся без щелчка, но значение скорости будем хранить в переменной.

from turtle import *
from random import randrange as rnd
shape('turtle')
speed(0)
	
def move():
	fd(m)
	ontimer(move,30)

m = 5
move()

done()

Осталось добавить изменение скорости:

from turtle import *
from random import randrange as rnd
shape('turtle')
speed(0)
	
def move():
	global m # изменения m должны сохранится 
	fd(m)
	ontimer(move,30)
	m -= 1

m = 5
move()

done()

Чтобы легче было разглядеть, что происходит, я изменил начальную скорость.
А чтобы было реалистичнее — направил Черепашку вверх.

urtle import *
from random import randrange as rnd
shape('turtle')
speed(0)
	
def move():
	global m # изменения m должны сохранится 
	fd(m)
	ontimer(move,30)
	m -= 1

lt(90) # поворот вверх
m = 15  # начальная скорость стала больше
move()

done()

Черепашка падает вниз в бесконечность. Чтобы спасти ее от падения — добавим реакцию на щелчок:

from turtle import *
from random import randrange as rnd
shape('turtle')
speed(0)
	
def click(x,y):
	global m
	m += 10
		
def move():
	global m # изменения m должны сохранится 
	fd(m)
	ontimer(move,30)
	m -= 1

lt(90) # поворот вверх
m = 15  # начальная скорость стала больше
onscreenclick(click)
move()

done()

Щелкайте! Щелкайте!

5. Придумайте способ, который позволит остановить Черепашку плавно и без возвратного движения.

В следующем уроке мы рассмотрим управление Черепашкой с помощью клавиатуры.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *