
Создание игры. Знакомство с графикой
Практика

Задача 1 «Три линии»
Нарисуйте три линии так, чтобы получился треугольник (любой).
Результат:
from drawzero import *
line('red', (300, 200), (700, 300))
line('red', (300, 200), (500, 400))
line('red', (500, 400), (700, 300))

Задача 2 «Три окружности»
Теперь нарисуйте три окружности. Все три центра должны быть разными точками, а окружности вложены друг в друга и не пересекаться. То есть вторая окружность должна быть строго внутри первой, а третья — внутри второй.
Результат:
from drawzero import *
circle('yellow', (500, 300), 200)
circle('yellow', (525, 300), 150)
circle('yellow', (550, 245), 75)
Задача 3 «Два пластыря»
from drawzero import *
# это порезы, их не нужно трогать
filled _ polygon('red', (260, 340), (310, 310), (320, 390))
filled _ polygon('red', (510, 295), (620, 305), (590, 405))
filled _ polygon('red', (720, 600), (655, 700), (722, 730))
filled _ polygon('red', (550, 550), (510, 350), (570, 430))
filled _ polygon('red', (510, 70), (517, 134), (580, 200))
filled _ polygon('red', (630, 340), (730, 360), (630, 390))
filled _ polygon('red', (690, 820), (710, 760), (680, 780))
filled _ polygon('red', (750, 690), (830, 710), (730, 720))
filled _ polygon('red', (520, 620), (590, 610), (550, 640))
# left, top — координаты левого верхнего угла прямоугольника
# w, h — большая и меньшая стороны прямоугольника r — радиус окружности
# параметры ниже нужно подобрать
left = 220
top = 650
w = 500
h = w // 5
r = h // 2
filled _ rect('yellow', (left, top), w, h)
filled _ circle('yellow', (left, top + r), r)
filled _ circle('yellow', (left + w, top + r), r)
filled _ rect('yellow', (left + w // 2 - r, top - w // 2 + r), h, w)
filled _ circle('yellow', (left + w // 2, top - w // 2 + r), r)
filled _ circle('yellow', (left + w // 2, top + w // 2 + r), r)
В аптечке есть два пластыря в форме креста со скруглёнными краями. В коде ниже есть пример одного из них, размер второго (ширина) равен 300. Подберите место, куда надо «наклеить» эти два пластыря, чтобы закрыть все порезы, которые отмечены красными треугольниками.
Используйте для перемещения переменные, объявленные в коде. Пропорции должны быть сохранены (меньшая сторона в 5 раз меньше большей).

Задача 3 «Два пластыря»
from drawzero import *
# это порезы, их не нужно трогать
filled _ polygon('red', (260, 340), (310, 310), (320, 390))
filled _ polygon('red', (510, 295), (620, 305), (590, 405))
filled _ polygon('red', (720, 600), (655, 700), (722, 730))
filled _ polygon('red', (550, 550), (510, 350), (570, 430))
filled _ polygon('red', (510, 70), (517, 134), (580, 200))
filled _ polygon('red', (630, 340), (730, 360), (630, 390))
filled _ polygon('red', (690, 820), (710, 760), (680, 780))
filled _ polygon('red', (750, 690), (830, 710), (730, 720))
filled _ polygon('red', (520, 620), (590, 610), (550, 640))
# left, top — координаты левого верхнего угла прямоугольника
# w, h — большая и меньшая стороны прямоугольника r — радиус окружности
# параметры ниже нужно подобрать
left = 300
top = 300
w = 500
h = w // 5
r = h // 2
filled _ rect('yellow', (left, top), w, h)
filled _ circle('yellow', (left, top + r), r)
filled _ circle('yellow', (left + w, top + r), r)
filled _ rect('yellow', (left + w // 2 - r, top - w // 2 + r), h, w)
filled _ circle('yellow', (left + w // 2, top - w // 2 + r), r)
filled _ circle('yellow', (left + w // 2, top + w // 2 + r), r)
left = 550
top = 675
w = 300
h = w // 5
r = h // 2
filled _ rect('yellow', (left, top), w, h)
filled _ circle('yellow', (left, top + r), r)
filled _ circle('yellow', (left + w, top + r), r)
filled _ rect('yellow', (left + w // 2 - r, top - w // 2 + r), h, w)
filled _ circle('yellow', (left + w // 2, top - w // 2 + r), r)
filled _ circle('yellow', (left + w // 2, top + w // 2 + r), r)

Задача 4 «Попробуй изобрази»
from drawzero import *
filled _ polygon('yellow',(1000,1000),(0, 1000),(1000, 0))
text('black', 'hellO worlD!', (760, 600), 100)
line('green', (0, 1000),(1000,0),2)
filled _ polygon('purple', (100,700), (500,700), (100,900),(500,900))
filled _ circle("white", (300,400), 115)
filled _ circle("brown", (300,400), 110)
filled _ circle("green", (300,400), 105)
filled _ circle("red", (300,400), 100)
filled _ circle("black", (300,400), 70)
filled _ rect('white', (100,260),(50, 260),(75,310))

Задача 5
Нарисуйте пятиконечную звезду (угол поворота 144 градуса).
Квадрат и звезду в одной программе, на одном графическом поле, но с разными экземплярами класса Turtle.
Результат:
import turtle
square = turtle.Turtle()
square.shape("turtle")
for i in range(4):
square.forward(100)
square.right(90)
starf = turtle.Turtle()
starf.shape("turtle")
for i in range(5):
starf.forward(100)
starf.right(144)
turtle.exitonclick()

Задача 6
Нарисуйте девятиконечную звезду.
Результат:
import turtle
nineang = turtle.Turtle()
for i in range(9):
nineang.forward(100)
nineang.left(140)
nineang.forward(100)
nineang.right(100)
turtle.exitonclick()

Результат:
import turtle
turtle.hideturtle()
turtle.speed(10)
turtle.color('red')
turtle.begin _ fill()
for i in range(4):
turtle.forward(100)
turtle.right(90)
turtle.end _ fill()
turtle.penup()
turtle.goto(200, 200)
turtle.pendown()
turtle.color('green')
turtle.begin _ fill()
for i in range(5):
turtle.forward(100)
turtle.rt(144)
turtle.end _ fill()
Задача 7
turtle.penup()
turtle.goto(-200, -200)
turtle.pendown()
turtle.color('blue')
turtle.begin _ fill()
for i in range(8):
turtle.forward(100)
turtle.right(135)
turtle.end _ fill()
turtle.penup()
turtle.goto(200, -200)
turtle.pendown()
turtle.color('cyan')
turtle.begin _ fill()
for i in range(3):
turtle.forward(100)
turtle.lt(120)
turtle.end _ fill()
turtle.penup()
turtle.goto(-200, 200)
turtle.pendown()
Нарисовать галерею из 5 или более многоугольников на одном поле. Использовать экземпляр класса turtle.Turtle().
Нарисованные многоугольники закрасить разными цветами. Пробуйте стандартные цвета или их шестнадцатеричное представление. Не забудьте кавычки вокруг названия или кода цвета!
turtle.color('magenta')
turtle.begin _ fill()
for i in range(9):
turtle.forward(30)
turtle.right(140)
turtle.forward(30)
turtle.left(100)
turtle.end _ fill()
turtle.exitonclick()

Задача 8 «Анимация»
Результат:
from drawzero import *
from math import sin, cos, pi
earth _ orbit = 400
earth _ radius = 30
earth _ rot _ step = 2 * pi / 360
moon _ orbit = 100
moon _ radius = 10
moon _ rot _ step = 2 * pi / 60
i = 0
while True:
i += 1
e _ x = 500 + earth _ orbit * cos(earth _ rot _ step * i)
e _ y = 500 + earth _ orbit * sin(earth _ rot _ step * i)
m _ x = e _ x + moon _ orbit * cos(moon _ rot _ step * i)
m _ y = e _ y + moon _ orbit * sin(moon _ rot _ step * i)
clear()
filled _ circle(C.red, (500, 500), 100)
filled _ circle(C.blue, (e _ x, e _ y), earth _ radius)
filled _ circle(C.yellow, (m _ x, m _ y), moon _ radius)
tick()
Создать «анимацию» с помощью библиотеки drawzero.

Круг и точка
Не хватает плавных изгибов? На помощь приходят функции dot() и circle():
Дополнительно мы:
- изменили заголовок окна функцией title(),
- установили толщину линии – pensize(),
- установили цвет линии – pencolor(),
- Подняли черепашку перед перемещением – penup() и опустили после – pendown().
import turtle
turtle.title("Turtle Drawing")
circle = turtle.Turtle()
circle.shape("turtle")
circle.pensize(5)
circle.pencolor("cyan")
circle.penup()
circle.goto(0, -100)
circle.pendown()
circle.circle(100)
turtle.exitonclick()

Любые фигуры
import turtle
turtlePen = turtle.Turtle()
window = turtle.Screen()
turtlePen.forward(30)
turtlePen.left(90)
turtlePen.forward(30)
turtlePen.right(90)
turtlePen.forward(30)
turtlePen.left(90)
turtlePen.forward(30)
turtlePen.right(90)
turtlePen.forward(30)
turtlePen.left(90)
turtlePen.forward(30)
turtlePen.right(90)
turtlePen.forward(30)
window.mainloop()
import turtle
turtlePen = turtle.Turtle()
window = turtle.Screen()
def polygon(n, size=80):
if n 2:
angle = 360 / n
for n in range(0, n):
turtlePen.left(angle)
turtlePen.forward(size)
# рисуем разные фигуры
polygon(3)
polygon(4)
polygon(5)
polygon(6)
import turtle
turtlePen = turtle.Turtle()
window = turtle.Screen()
def polygon(n, size=80):
if n 2:
angle = 360/n
for n in range(0, n):
turtlePen.left(angle)
turtlePen.forward(size)
turtlePen.speed(10)
for i in range(0, 100, 5):
polygon(3, 10 + i)
turtlePen.left(20)
window.mainloop()
import turtle
turtlePen = turtle.Turtle()
window = turtle.Screen()
turtlePen.left(90)
turtlePen.forward(80)
turtlePen.left(90)
turtlePen.forward(80)
turtlePen.left(90)
turtlePen.forward(80)
turtlePen.left(90)
turtlePen.forward(80)
window.mainloop()
import turtle
turtlePen = turtle.Turtle()
window = turtle.Screen()
turtlePen.left(120)
turtlePen.forward(80)
turtlePen.left(120)
turtlePen.forward(80)
turtlePen.left(120)
turtlePen.forward(80)
window.mainloop()

import turtle
turtlePen = turtle.Turtle()
window = turtle.Screen()
window.bgcolor("black")
def polygon(n, size=80):
if n 2:
angle = 360 / n
for n in range(0, n):
turtlePen.left(angle)
turtlePen.forward(size)
turtlePen.speed(100)
colors = ['orange', 'cyan', 'blue', 'green', 'red']
size = 40
for i in range(0, 60):
turtlePen.color(colors[i % 5])
polygon(4, size)
turtlePen.left(5)
size = size + 3
window.mainloop()
Используем цвета
Фон окна можно изменить командой bgcolor , куда передаем имя текста в виде строки:
Аналогично при помощи команды color указываем цвет для рисования:
Цвет можно менять и во время рисования. Для этого создадим массив цветов и в зависимости от значения цикла (или иных параметров) будем менять цвет линий.
window.bgcolor("red")
window.bgcolor("red")