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

Внутренний функционал питона довольно мощный, и его вполне достаточно для реализации многих проектов. Однако Python не был бы таким популярным среди программистов, если бы не мог расширять свой функционал за счет дополнительных модулей (ещё их называют библиотеками или пакетами) с помощью всего лишь одной строчки кода.

Каждый существующий модуль написан для решения задач в конкретной области. Сегодня мы познакомимся с некоторыми модулями для работы с графикой.

Содержимое разработки

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

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

Лекция

Содержание лекции

Содержание лекции

  • Рисование геометрических фигур и картинок из геометрических фигур.
  • Работа с цветом.
Модули для работы с графикой Внутренний функционал питона довольно мощный, и его вполне достаточно для реализации многих проектов. Однако Python не был бы таким популярным среди программистов, если бы не мог расширять свой функционал за счет дополнительных модулей (ещё их называют библиотеками или пакетами) с помощью всего лишь одной строчки кода. Каждый существующий модуль написан для решения задач в конкретной области. Сегодня мы познакомимся с некоторыми модулями для работы с графикой.

Модули для работы с графикой

Внутренний функционал питона довольно мощный, и его вполне достаточно для реализации многих проектов. Однако Python не был бы таким популярным среди программистов, если бы не мог расширять свой функционал за счет дополнительных модулей (ещё их называют библиотеками или пакетами) с помощью всего лишь одной строчки кода.

Каждый существующий модуль написан для решения задач в конкретной области. Сегодня мы познакомимся с некоторыми модулями для работы с графикой.

  • drawzero
  • turtle
  • Pillow (PIL)
  • Matplotlib
Matplotlib Библиотека Matplotlib — пакет для визуализации данных в Python, который позволяет работать с данными на нескольких уровнях:

Matplotlib

Библиотека Matplotlib — пакет для визуализации данных в Python, который позволяет работать с данными на нескольких уровнях:

  • с помощью модуля Pyplot, который рассматривает график как единое целое;
  • через объектно-ориентированный интерфейс, когда каждая фигура или её часть является отдельным объектом, — это позволяет выборочно менять их свойства и отображение.
Как связаны Matplotlib, Pyplot и Pylab Библиотека Matplotlib — это пакет для визуализации данных в Python. Pyplot — это модуль в пакете Matplotlib. Его вы часто будете видеть в коде как matplotlib.pyplot. Модуль помогает автоматически создавать оси, фигуры и другие компоненты, не задумываясь о том, как это происходит. Именно Pyplot используется в большинстве случаев. Pylab — это ещё один модуль, который устанавливается вместе с пакетом Matplotlib. Он одновременно импортирует Pyplot и библиотеку NumPy для работы с массивами в интерактивном режиме или для доступа к функциям черчения при работе с данными. Сейчас Pylab имеет только историческое значение — он облегчал переход с MATLAB на Matplotlib, так как позволял обходиться без операторов импорта (а именно так привыкли работать пользователи MATLAB). Вы можете встретиться с Pylab в примерах кода на разных сайтах, но на практике использовать модуль не придётся.

Как связаны Matplotlib, Pyplot и Pylab

Библиотека Matplotlib — это пакет для визуализации данных в Python. Pyplot — это модуль в пакете Matplotlib. Его вы часто будете видеть в коде как matplotlib.pyplot. Модуль помогает автоматически создавать оси, фигуры и другие компоненты, не задумываясь о том, как это происходит. Именно Pyplot используется в большинстве случаев.

Pylab — это ещё один модуль, который устанавливается вместе с пакетом Matplotlib. Он одновременно импортирует Pyplot и библиотеку NumPy для работы с массивами в интерактивном режиме или для доступа к функциям черчения при работе с данными.

Сейчас Pylab имеет только историческое значение — он облегчал переход с MATLAB на Matplotlib, так как позволял обходиться без операторов импорта (а именно так привыкли работать пользователи MATLAB). Вы можете встретиться с Pylab в примерах кода на разных сайтах, но на практике использовать модуль не придётся.

Установка и импорт библиотеки Matplotlib — универсальная библиотека, которая работает в Python на Windows, macOS и Linux. При работе с Google Colab или Jupyter Notebook устанавливать Python и Matplotlib не понадобится — язык программирования и библиотека уже доступны «из коробки». Установка через терминал pip3 install matplotlib Импорт библиотеки import matplotlib.pyplot as plt Сокращение plt для библиотеки — общепринятое. Вы встретите его в официальной документации, книгах и в ноутбуках других людей.

Установка и импорт библиотеки

Matplotlib — универсальная библиотека, которая работает в Python на Windows, macOS и Linux. При работе с Google Colab или Jupyter Notebook устанавливать Python и Matplotlib не понадобится — язык программирования и библиотека уже доступны «из коробки».

Установка через терминал

pip3 install matplotlib

Импорт библиотеки

import matplotlib.pyplot as plt

Сокращение plt для библиотеки — общепринятое. Вы встретите его в официальной документации, книгах и в ноутбуках других людей.

Строим первый график в Matplotlib Для начала создадим две переменные — x и y, которые будут содержать координаты точек по осям х и у, а также построим график, который соединит эти точки: import matplotlib.pyplot as plt x = [1, 2, 3, 4, 5] y = [25, 32, 34, 20, 25] plt.plot(x, y, color='green', marker='o', markersize=7) plt.xlabel('Ось х') #Подпись для оси х plt.ylabel('Ось y') #Подпись для оси y plt.title('Первый график') #Название plt.show() plt.plot() — стандартная функция, которая строит график в соответствии со значениями, которые ей были переданы. Мы передали в неё координаты точек; plt.show() — функция, которая отвечает за вывод визуализированных данных на экран. Её можно и не указывать, но тогда, помимо красивой картинки, мы увидим разную техническую информацию.

Строим первый график в Matplotlib

Для начала создадим две переменные — x и y, которые будут содержать координаты точек по осям х и у, а также построим график, который соединит эти точки:

import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]

y = [25, 32, 34, 20, 25]

plt.plot(x, y, color='green', marker='o', markersize=7)

plt.xlabel('Ось х') #Подпись для оси х

plt.ylabel('Ось y') #Подпись для оси y

plt.title('Первый график') #Название

plt.show()

plt.plot() — стандартная функция, которая строит график в соответствии со значениями, которые ей были переданы. Мы передали в неё координаты точек;

plt.show() — функция, которая отвечает за вывод визуализированных данных на экран. Её можно и не указывать, но тогда, помимо красивой картинки, мы увидим разную техническую информацию.

Столбчатая диаграмма в Matplotlib Такой тип визуализации позволяет удобно сравнивать значения отдельных переменных. В столбчатой диаграмме длина столбцов пропорциональна показателям, которые они отображают. Как правило, одна из осей соответствует одной категории, а вторая — её дискретному значению. Например, столбчатая диаграмма позволяет наглядно показать величину прибыли по месяцам. Построим следующий график: import matplotlib.pyplot as plt x = ['Январь', 'Февраль', 'Март', 'Апрель', 'Май'] y = [2, 4, 3, 1, 7] plt.bar(x, y, label='Величина прибыли') #Параметр label позволяет задать название величины для легенды plt.xlabel('Месяц года') plt.ylabel('Прибыль, в млн руб.') plt.title('Пример столбчатой диаграммы') plt.legend() plt.show()

Столбчатая диаграмма в Matplotlib

Такой тип визуализации позволяет удобно сравнивать значения отдельных переменных. В столбчатой диаграмме длина столбцов пропорциональна показателям, которые они отображают. Как правило, одна из осей соответствует одной категории, а вторая — её дискретному значению.

Например, столбчатая диаграмма позволяет наглядно показать величину прибыли по месяцам. Построим следующий график:

import matplotlib.pyplot as plt

x = ['Январь', 'Февраль', 'Март', 'Апрель', 'Май']

y = [2, 4, 3, 1, 7]

plt.bar(x, y, label='Величина прибыли') #Параметр label позволяет задать название величины для легенды

plt.xlabel('Месяц года')

plt.ylabel('Прибыль, в млн руб.')

plt.title('Пример столбчатой диаграммы')

plt.legend()

plt.show()

Круговая диаграмма в Matplotlib Круговую диаграмму используют для отображения состава групп. Например, мы можем наглядно показать, какие марки автомобилей преобладают на дорогах города. Так информация нагляднее, но непонятно, какая именно доля приходится на каждую марку автомобиля. Поэтому круговые диаграммы всегда лучше дополнять значениями в процентах. Добавим к функции pie параметр autopct: import matplotlib.pyplot as plt vals = [24, 17, 53, 21, 35] labels = [

Круговая диаграмма в Matplotlib

Круговую диаграмму используют для отображения состава групп. Например, мы можем наглядно показать, какие марки автомобилей преобладают на дорогах города.

Так информация нагляднее, но непонятно, какая именно доля приходится на каждую марку автомобиля. Поэтому круговые диаграммы всегда лучше дополнять значениями в процентах. Добавим к функции pie параметр autopct:

import matplotlib.pyplot as plt

vals = [24, 17, 53, 21, 35]

labels = ["Ford", "Toyota", "BMW", "Audi", "Jaguar"]

plt.pie(vals, labels=labels, autopct='%1.1f%%')

plt.title("Распределение марок автомобилей на дороге")

plt.show()

Сложные визуализации в Matplotlib Построим столбчатый график с накоплением. Он позволяет оценить динамику соотношения значений одной переменной. Попробуем показать, как соотносится количество устройств на Android и iOS в разные годы. График позволяет увидеть, что соотношение устройств, работающих на Android и iOS, постепенно меняется — устройств на Android становится больше. import matplotlib.pyplot as plt labels = ['2017', '2018', '2019', '2020', '2021'] android _ users = [85, 85.1, 86, 86.2, 86] ios _ users = [14.5, 14.8, 13, 13.8, 14.0] width = 0.35 #Задаём ширину столбцов fig, ax = plt.subplots() ax.bar(labels, android _ users, width, label='Android') ax.bar(labels, ios _ users, width, bottom=android _ users,  label='iOS') #Указываем с помощью параметра bottom, что значения в столбце должны быть выше значений переменной android _ users ax.set _ ylabel('Соотношение, в %') ax.set _ title('Распределение устройств на Android и iOS') ax.legend(loc='lower left', title='Устройства') #Сдвигаем легенду в нижний левый угол, чтобы она не перекрывала часть графика plt.show()

Сложные визуализации в Matplotlib

Построим столбчатый график с накоплением. Он позволяет оценить динамику соотношения значений одной переменной. Попробуем показать, как соотносится количество устройств на Android и iOS в разные годы.

График позволяет увидеть, что соотношение устройств, работающих на Android и iOS, постепенно меняется — устройств на Android становится больше.

import matplotlib.pyplot as plt

labels = ['2017', '2018', '2019', '2020', '2021']

android _ users = [85, 85.1, 86, 86.2, 86]

ios _ users = [14.5, 14.8, 13, 13.8, 14.0]

width = 0.35 #Задаём ширину столбцов

fig, ax = plt.subplots()

ax.bar(labels, android _ users, width, label='Android')

ax.bar(labels, ios _ users, width, bottom=android _ users,

label='iOS') #Указываем с помощью параметра bottom, что значения в столбце должны быть выше значений переменной android _ users

ax.set _ ylabel('Соотношение, в %')

ax.set _ title('Распределение устройств на Android и iOS')

ax.legend(loc='lower left', title='Устройства') #Сдвигаем легенду в нижний левый угол, чтобы она не перекрывала часть графика

plt.show()

drawzero drawzero — это простая и удобная графическая библиотека, в которой есть функции для рисования простых фигур. Чтобы получить к ним доступ, надо в начале программы написать строку. Установка через терминал pip3 install drawzero Импорт библиотеки from drawzero import * Основы основ Итак, приступим к рисованию! Запустите программу ниже. В результате запуска должно открыться окно с нарисованной по диагонали красной линией. from drawzero import * line('red', (0, 0), (1000, 1000))

drawzero

drawzero — это простая и удобная графическая библиотека, в которой есть функции для рисования простых фигур. Чтобы получить к ним доступ, надо в начале программы написать строку.

Установка через терминал

pip3 install drawzero

Импорт библиотеки

from drawzero import *

Основы основ

Итак, приступим к рисованию!

Запустите программу ниже. В результате запуска должно открыться окно с нарисованной по диагонали красной линией.

from drawzero import *

line('red', (0, 0), (1000, 1000))

Осваиваем геометрию с помощью кода drawzero Система координат в программировании и система координат в математике немного отличаются.  В программировании точка с координатами (0, 0) находится в верхнем левом углу. Ось x направлена от неё вправо ,  а ось  y — вниз . Любая точка имеет позицию (координату) относительно оси x и относительно оси y, поэтому координаты каждой точки это пара чисел — сначала x, потом y. Эти координаты указываются через запятую и записываются в круглых скобках. Рисование отрезка выполняется, как мы уже знаем, с помощью команды line . В скобках указываются параметры: цвет и две точки — концы отрезка. Именно в таком порядке. Цвет пока можно выбирать из следующих вариантов:

Осваиваем геометрию с помощью кода drawzero

Система координат в программировании и система координат в математике немного отличаются. В программировании точка с координатами (0, 0) находится в верхнем левом углу. Ось x направлена от неё вправо , а ось y — вниз .

Любая точка имеет позицию (координату) относительно оси x и относительно оси y, поэтому координаты каждой точки это пара чисел — сначала x, потом y. Эти координаты указываются через запятую и записываются в круглых скобках.

Рисование отрезка выполняется, как мы уже знаем, с помощью команды line . В скобках указываются параметры: цвет и две точки — концы отрезка. Именно в таком порядке.

Цвет пока можно выбирать из следующих вариантов: "black", "white", "red", "green", "blue", "yellow", "brown". Скоро мы научимся выбирать любые цвета.

from drawzero import *

line('red', (300, 200), (700, 400))

# 'red' — цвет линии,

# (300, 200) — один конец отрезка,

# (700, 400) — второй конец отрезка

Осваиваем геометрию с помощью кода drawzero Рисование окружности выполняется с помощью команды circle . В скобках указываются параметры: цвет, координаты центра окружности и радиус: from drawzero import * circle('yellow', (500, 300), 200) # 'yellow' — цвет окружности, # (500, 300) — координаты центра окружности, # 200 — радиус Рисование прямоугольника выполняется с помощью команды rect . В скобках указываются параметры: цвет, координаты левой верхней вершины, ширина (вдоль оси x), высота (вдоль оси y). То есть, при помощи такой функции можно рисовать только прямоугольники, параллельные осям координат. from drawzero import * rect('blue', (300, 200), 400, 200) # 'blue' — цвет, # (300, 200) — координаты верхнего левого угла, # 400 — ширина, # 200 — высота

Осваиваем геометрию с помощью кода drawzero

Рисование окружности выполняется с помощью команды circle . В скобках указываются параметры: цвет, координаты центра окружности и радиус:

from drawzero import *

circle('yellow', (500, 300), 200)

# 'yellow' — цвет окружности,

# (500, 300) — координаты центра окружности,

# 200 — радиус

Рисование прямоугольника выполняется с помощью команды rect . В скобках указываются параметры: цвет, координаты левой верхней вершины, ширина (вдоль оси x), высота (вдоль оси y). То есть, при помощи такой функции можно рисовать только прямоугольники, параллельные осям координат.

from drawzero import *

rect('blue', (300, 200), 400, 200)

# 'blue' — цвет,

# (300, 200) — координаты верхнего левого угла,

# 400 — ширина,

# 200 — высота

Создание более сложных фигур drawzero Рисуя треугольник линиями, можно заметить, что каждую точку мы выписывали дважды, потому что она была концом двух отрезков. Может быть можно сделать то же самое экономнее? Нам поможет функция рисования многоугольника polygon. Первый параметр это уже знакомый нам цвет, после которого надо перечислить координаты вершин многоугольника. from drawzero import * polygon('blue', (300, 200), (700, 300), (500, 400)) # 'blue' — цвет, # (300, 200) — первая точка многоугольника, # (700, 300) — вторая точка многоугольника, # (500, 400) — третья точка многоугольника Если в многоугольнике больше трёх вершин , нужно учесть, что перечислять вершины в произвольном порядке нельзя. Представьте, что вы обходите эту фигуру по часовой стрелке или против часовой стрелки. В функции polygon надо перечислять вершины одним из этих способов, начиная с любой вершины. Если порядок вершин неверный, то может получиться, например, что-то такое:

Создание более сложных фигур drawzero

Рисуя треугольник линиями, можно заметить, что каждую точку мы выписывали дважды, потому что она была концом двух отрезков. Может быть можно сделать то же самое экономнее?

Нам поможет функция рисования многоугольника polygon. Первый параметр это уже знакомый нам цвет, после которого надо перечислить координаты вершин многоугольника.

from drawzero import *

polygon('blue', (300, 200), (700, 300), (500, 400))

# 'blue' — цвет,

# (300, 200) — первая точка многоугольника,

# (700, 300) — вторая точка многоугольника,

# (500, 400) — третья точка многоугольника

Если в многоугольнике больше трёх вершин , нужно учесть, что перечислять вершины в произвольном порядке нельзя. Представьте, что вы обходите эту фигуру по часовой стрелке или против часовой стрелки. В функции polygon надо перечислять вершины одним из этих способов, начиная с любой вершины. Если порядок вершин неверный, то может получиться, например, что-то такое:

Создание более сложных фигур drawzero Пока мы рисовали только контуры. Теперь научимся рисовать закрашенные фигуры. Это может быть круг, прямоугольник и многоугольник. Для получения закрашенной фигуры есть команды: filled _ circle, filled _ rect, filled _ polygon с такими же параметрами, как и у неокрашенных фигур. from drawzero import * filled _ circle(

Создание более сложных фигур drawzero

Пока мы рисовали только контуры. Теперь научимся рисовать закрашенные фигуры. Это может быть круг, прямоугольник и многоугольник. Для получения закрашенной фигуры есть команды: filled _ circle, filled _ rect, filled _ polygon с такими же параметрами, как и у неокрашенных фигур.

from drawzero import *

filled _ circle("red", (550, 450), 50)

filled _ rect("green", (700, 200), 200, 200)

filled _ polygon("blue", (100, 100), (400, 200), (300, 300))

Использование переменных drawzero Мы познакомились с основными возможностями библиотеки drawzero. Теперь пора вспомнить про переменные — они нам скоро пригодятся. Попробуем нарисовать какую-нибудь простенькую фигуру, например прямоугольник с закруглёнными концами. Координаты центра окружности это середины левой и правой (вертикальных) сторон прямоугольника и их можно посчитать. Это и правда несложно. Но что, если эту картинку надо перерисовать в другом месте или, скажем, сделать исходный прямоугольник чуть выше или шире? Это по-прежнему будет несложно сделать, но придётся пересчитывать координаты центров окружностей. from drawzero import * filled _ rect('yellow', (300, 500), 500, 100) filled _ circle('yellow', (300, 550), 50) filled _ circle('yellow', (800, 550), 50) from drawzero import * filled _ rect('yellow', (300, 500), 500, 150) filled _ circle('yellow', (300, 575), 75) filled _ circle('yellow', (800, 575), 75) filled _ rect('yellow', (475, 325), 150, 500) filled _ circle('yellow', (550, 325), 75) filled _ circle('yellow', (550, 825), 75)

Использование переменных drawzero

Мы познакомились с основными возможностями библиотеки drawzero. Теперь пора вспомнить про переменные — они нам скоро пригодятся.

Попробуем нарисовать какую-нибудь простенькую фигуру, например прямоугольник с закруглёнными концами.

Координаты центра окружности это середины левой и правой (вертикальных) сторон прямоугольника и их можно посчитать. Это и правда несложно. Но что, если эту картинку надо перерисовать в другом месте или, скажем, сделать исходный прямоугольник чуть выше или шире? Это по-прежнему будет несложно сделать, но придётся пересчитывать координаты центров окружностей.

from drawzero import *

filled _ rect('yellow', (300, 500), 500, 100)

filled _ circle('yellow', (300, 550), 50)

filled _ circle('yellow', (800, 550), 50)

from drawzero import *

filled _ rect('yellow', (300, 500), 500, 150)

filled _ circle('yellow', (300, 575), 75)

filled _ circle('yellow', (800, 575), 75)

filled _ rect('yellow', (475, 325), 150, 500)

filled _ circle('yellow', (550, 325), 75)

filled _ circle('yellow', (550, 825), 75)

Использование переменных drawzero Напишем ту же программу по шагам, но для вычисления координат станем использовать переменные. Что нам нужно знать об этой фигуре, для того, чтобы её нарисовать? Нам надо знать где она находится и её главные размеры. Место можно задать по-разному. Мы запомним координаты левого верхнего угла. Размеры фигуры определяются размерами прямоугольника. А радиус круга это половина его высоты, поэтому размеров прямоугольника достаточно. Не поленимся ввести для радиуса отдельную переменную, код так будет лучше читаться. left = 300 top = 500 w = 500 h = 150 r = h // 2 Очень полезно нарисовать картинку на бумаге и разобраться, откуда берутся формулы в программе, представленной ниже. from drawzero import * # left, top — координаты левого верхнего угла прямоугольника left = 300 top = 500 # w, h — ширина и высота прямоугольника; r — радиус окружности w = 500 h = 150 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)

Использование переменных drawzero

Напишем ту же программу по шагам, но для вычисления координат станем использовать переменные. Что нам нужно знать об этой фигуре, для того, чтобы её нарисовать? Нам надо знать где она находится и её главные размеры.

Место можно задать по-разному. Мы запомним координаты левого верхнего угла. Размеры фигуры определяются размерами прямоугольника. А радиус круга это половина его высоты, поэтому размеров прямоугольника достаточно. Не поленимся ввести для радиуса отдельную переменную, код так будет лучше читаться.

left = 300

top = 500

w = 500

h = 150

r = h // 2

Очень полезно нарисовать картинку на бумаге и разобраться, откуда берутся формулы в программе, представленной ниже.

from drawzero import *

# left, top — координаты левого верхнего угла прямоугольника

left = 300

top = 500

# w, h — ширина и высота прямоугольника; r — радиус окружности

w = 500

h = 150

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)

Скруглим углы drawzero Давайте теперь сделаем не такие острые углы. Нарисуйте такую картинку: Только

Скруглим углы drawzero

Давайте теперь сделаем не такие острые углы. Нарисуйте такую картинку:

Только "скруглить" угол можно по-разному. В идеальной фоторамке ширина должна быть одинаковой и в углах тоже. Но как понять, что такое "ширина рамки в углу"?

Давайте так: ширина это расстояние от точки на внешней границы к ближайшей к ней точке на внутренней. Изучите картинку со схемой и вы поймёте, что надо нарисовать (и в какой последовательности).

А ещё хорошо бы сделать всё на белом фоне! Для того, чтобы залить весь экран одним цветом, используйте команду ` fill ` . Например, заливка красным выглядит так:

fill('red')

Работа с цветами drawzero

Каждый цвет состоит из трёх компонентов: красного, зелёного и синего. Наверняка вам встречалась аббревиатура RGB (сокращение от Red, Green и Blue).

Представьте, что в абсолютно тёмной комнате вы светите на стену тремя фонариками: красным, зелёным и синим. У каждого есть регулировка интенсивности — число от 0 (фонарик выключен) до 255 (фонарик светит максимально ярко). Все фонарики светят в одну и ту же точку стены и в зависимости от настроек интенсивности всех трёх фонариков на стене получается пятно определённого цвета. Вот несколько примеров:

  • R = 0, G = 0, B = 0 — все фонарики выключены, на стене чёрное пятно (которое и так не видно, потому что в комнате темно);
  • R = 255, G = 255, B = 255 — все фонарики включены на максимальную мощность, на стене яркое белое пятно;
  • R = 100, G = 100, B = 100 — все фонарики включены, имеют одинаковую (но небольшую) интенсивность, на стене тёмно-серое пятно;
  • R = 255, G = 0, B = 0 — красный фонарик включен полностью, остальные выключены, на стене яркое красное пятно;
  • R = 255, G = 0, B = 255 — красный и синий фонарики включены полностью, зелёный выключен, на стене яркое фиолетовое пятно.

В библиотеке drawzero можно определить свой цвет при помощи тройки чисел, взятой в скобки. Эту тройку можно запомнить в переменной и использовать при вызове всех функций рисования из модуля drawzero.

Цвета, приведённые в примере выше можно было сохранить так:

black = (0, 0, 0)

white = (255, 255, 255)

red = (255, 0, 0)

violet = (255, 0, 255)

Работа с цветами drawzero from drawzero import * light _ blue = (73, 151, 231) sand _ yellow = (244, 215, 111) coral _ red = (245, 129, 129) filled _ circle(coral _ red, (150, 150), 10) filled _ rect(sand _ yellow, (200, 100, 50, 50)) filled _ polygon(light _ blue, (90, 100), (70, 120), (30, 80))

Работа с цветами drawzero

from drawzero import *

light _ blue = (73, 151, 231)

sand _ yellow = (244, 215, 111)

coral _ red = (245, 129, 129)

filled _ circle(coral _ red, (150, 150), 10)

filled _ rect(sand _ yellow, (200, 100, 50, 50))

filled _ polygon(light _ blue, (90, 100), (70, 120), (30, 80))

Рисуем геометрические фигуры в Python  с помощью Pillow Модуль ImageDraw из библиотеки обработки изображений Pillow (PIL) предоставляет методы для рисования круга, квадрата и прямой линии в Python. Используя объекта Image мы создадим фоновое изображение на которой мы будем рисовать наши фигуры при помощи объекта Draw. Не забудьте импортировать модуль Image и ImageDraw в начале кода. Здесь создается пустое изображение с размером 500 на 300 пикселей и с тёмно желтым фоном. from PIL import Image, ImageDraw # Пустой желтый фон. im = Image.new('RGB', (500, 300), (219, 193, 27)) draw = ImageDraw.Draw(im) im.show()

Рисуем геометрические фигуры в Python с помощью Pillow

Модуль ImageDraw из библиотеки обработки изображений Pillow (PIL) предоставляет методы для рисования круга, квадрата и прямой линии в Python.

Используя объекта Image мы создадим фоновое изображение на которой мы будем рисовать наши фигуры при помощи объекта Draw. Не забудьте импортировать модуль Image и ImageDraw в начале кода.

Здесь создается пустое изображение с размером 500 на 300 пикселей и с тёмно желтым фоном.

from PIL import Image, ImageDraw

# Пустой желтый фон.

im = Image.new('RGB', (500, 300), (219, 193, 27))

draw = ImageDraw.Draw(im)

im.show()

Рисуем фигуры в Pillow: ellipse, rectangle и line Вызываем методы рисования из объекта Draw для рисования фигур на нашем желтом фоне. Рисуем эллипс, прямоугольник и прямую линию в качестве примера. from PIL import Image, ImageDraw # Пустой желтый фон. im = Image.new('RGB', (500, 300), (219, 193, 27)) draw = ImageDraw.Draw(im) # Рисуем красный эллипс с черной оконтовкой. draw.ellipse((100, 100, 150, 200), fill='red', outline=(0, 0, 0)) # Рисуем синий прямоугольник с белой оконтовкой. draw.rectangle((200, 100, 300, 200), fill='blue', outline=(255, 255, 255)) # Рисуем розовую линию с шириной в 10 пиксель. draw.line((350, 200, 450, 100), fill='pink', width=10) im.save('draw-ellipse-rectangle-line.jpg', quality=95)

Рисуем фигуры в Pillow: ellipse, rectangle и line

Вызываем методы рисования из объекта Draw для рисования фигур на нашем желтом фоне.

Рисуем эллипс, прямоугольник и прямую линию в качестве примера.

from PIL import Image, ImageDraw

# Пустой желтый фон.

im = Image.new('RGB', (500, 300), (219, 193, 27))

draw = ImageDraw.Draw(im)

# Рисуем красный эллипс с черной оконтовкой.

draw.ellipse((100, 100, 150, 200), fill='red', outline=(0, 0, 0))

# Рисуем синий прямоугольник с белой оконтовкой.

draw.rectangle((200, 100, 300, 200), fill='blue', outline=(255, 255, 255))

# Рисуем розовую линию с шириной в 10 пиксель.

draw.line((350, 200, 450, 100), fill='pink', width=10)

im.save('draw-ellipse-rectangle-line.jpg', quality=95)

Справочник по параметрам методов рисования Область рисования — xy Параметр xy указывает прямоугольную область для рисования новой фигуры. Уточняется один из следующих форматов: (((Верхняя левая x координата, Верхняя левая y координата), (нижняя правая x координата, нижняя правая y координата)); (Верхняя левая x координата, Верхняя левая y координата, нижняя правая x координата, нижняя правая y координата). В методах line(), polygon() и point() используются многочисленные координаты вместо двух точек, представляющих прямоугольную область. (x1, y1, x2, y2, x3, y3...); ((x1, y1), (x2, y2), (x3, y3)...). Метод line() рисует прямую линию, которая связывает каждую точку, polygon() рисует многоугольник, а метод point() рисует точку в 1 пиксель для каждой указанной точки.

Справочник по параметрам методов рисования

Область рисования — xy

Параметр xy указывает прямоугольную область для рисования новой фигуры.

Уточняется один из следующих форматов:

  • (((Верхняя левая x координата, Верхняя левая y координата), (нижняя правая x координата, нижняя правая y координата));
  • (Верхняя левая x координата, Верхняя левая y координата, нижняя правая x координата, нижняя правая y координата).

В методах line(), polygon() и point() используются многочисленные координаты вместо двух точек, представляющих прямоугольную область.

  • (x1, y1, x2, y2, x3, y3...);
  • ((x1, y1), (x2, y2), (x3, y3)...).

Метод line() рисует прямую линию, которая связывает каждую точку, polygon() рисует многоугольник, а метод point() рисует точку в 1 пиксель для каждой указанной точки.

Справочник по параметрам методов рисования Параметр fill — заполняем фигуру определенным цветом Параметр fill указывает какой цвет будет использован для заполнения нашей геометрической формы. Спецификация формата цвета отличается в зависимости от указанного режима изображения (объект Image): RGB: Указывает значение цвета в форме (R, G, B); L (Черно-белое): Указывает значение (0-255) как целое число). Значение по умолчанию None (не заполнено). Есть три способа указать цвет, возьмем красный цвет, его можно записать так:

Справочник по параметрам методов рисования

Параметр fill — заполняем фигуру определенным цветом

Параметр fill указывает какой цвет будет использован для заполнения нашей геометрической формы.

Спецификация формата цвета отличается в зависимости от указанного режима изображения (объект Image):

  • RGB: Указывает значение цвета в форме (R, G, B);
  • L (Черно-белое): Указывает значение (0-255) как целое число).

Значение по умолчанию None (не заполнено).

Есть три способа указать цвет, возьмем красный цвет, его можно записать так:

  • текстовый формат: red;
  • CSS формат (Шестнадцатеричный): #FF0000
  • RGB: (255, 0, 0)
Справочник по параметрам методов рисования Параметр outline — цвет границ Параметр outline указывает на цвет границы фигуры. Спецификация формата цвета такая же, как и у параметра fill которого мы обсуждали выше. Значение по умолчанию равно None (без границ). Вне зависимости от рисуемой фигуры, вы можете указать размер в пикселях для границы фигуры. Параметр outline — цвет границ

Справочник по параметрам методов рисования

Параметр outline — цвет границ

Параметр outline указывает на цвет границы фигуры.

Спецификация формата цвета такая же, как и у параметра fill которого мы обсуждали выше. Значение по умолчанию равно None (без границ).

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

Параметр outline — цвет границ

Рисование эллипса и прямоугольника в Python Эллипс (Круг): ellipse(xy, fill, outline); Прямоугольник (Квадрат): rectangle(xy, fill, outline). Метод ellipse() рисует эллипс, область рисования указывается в параметр xy. Если мы зададим четыре координата которые будут соответствовать квадрату, то у нас получится ровный круг. Нарисуем небольшой смайл используя круги. from PIL import Image, ImageDraw image = Image.new('RGB', (90, 90), 'white') draw = ImageDraw.Draw(image) draw.ellipse((0, 0, 90, 90), 'yellow', 'blue') draw.ellipse((25, 20, 35, 30), 'yellow', 'blue') draw.ellipse((50, 20, 60, 30), 'yellow', 'blue') draw.arc((20, 40, 70, 70), 0, 180, 0) image.save('draw-smile.jpg') Image.show()

Рисование эллипса и прямоугольника в Python

Эллипс (Круг): ellipse(xy, fill, outline);

Прямоугольник (Квадрат): rectangle(xy, fill, outline).

Метод ellipse() рисует эллипс, область рисования указывается в параметр xy. Если мы зададим четыре координата которые будут соответствовать квадрату, то у нас получится ровный круг.

Нарисуем небольшой смайл используя круги.

from PIL import Image, ImageDraw

image = Image.new('RGB', (90, 90), 'white')

draw = ImageDraw.Draw(image)

draw.ellipse((0, 0, 90, 90), 'yellow', 'blue')

draw.ellipse((25, 20, 35, 30), 'yellow', 'blue')

draw.ellipse((50, 20, 60, 30), 'yellow', 'blue')

draw.arc((20, 40, 70, 70), 0, 180, 0)

image.save('draw-smile.jpg')

Image.show()

Рисование линии, многоугольника и точки в Python Линия: line(xy, fill, width): Параметр xy Указывает несколько координат двух или более точек как ((x1, y1), (x2, y2), (x3, y3)...); Рисуются линии, связывающие каждую точку между собой. width: Ширина линии в пикселях Обратите внимание, что если вы сделаете ширину линии толще c помощью width, указывая 3 точки или более через параметр xy, тогда соединительная линия между ними будет выглядеть не очень аккуратно. Многоугольник: polygon(xy, fill, outline): Параметр xy Указывается несколько координат, трех или более точек как ((x1, y1), (x2, y2), (x3, y3)...); Рисуется многоугольник, в котором каждая точка соединяется между собой при помощи линии. Точка: point(xy, fill): Параметр xy

Рисование линии, многоугольника и точки в Python

Линия: line(xy, fill, width):

Параметр xy

  • Указывает несколько координат двух или более точек как ((x1, y1), (x2, y2), (x3, y3)...);
  • Рисуются линии, связывающие каждую точку между собой.

width: Ширина линии в пикселях

  • Обратите внимание, что если вы сделаете ширину линии толще c помощью width, указывая 3 точки или более через параметр xy, тогда соединительная линия между ними будет выглядеть не очень аккуратно.

Многоугольник: polygon(xy, fill, outline):

Параметр xy

  • Указывается несколько координат, трех или более точек как ((x1, y1), (x2, y2), (x3, y3)...);
  • Рисуется многоугольник, в котором каждая точка соединяется между собой при помощи линии.

Точка: point(xy, fill):

Параметр xy

  • Указывается несколько координат одной или более точек как ((x1, y1), (x2, y2), (x3, y3)...);
  • Одна точка (в размере одного пикселя) рисуется для каждого координата.
Рисование линии, многоугольника и точки (пример) from PIL import Image, ImageDraw # Пустой желтый фон. im = Image.new('RGB', (500, 300), (219, 193, 27)) draw = ImageDraw.Draw(im) # Три черные линии в шириной в 1 пиксель. draw.line(  xy=((30, 200),(130, 100),(80, 50)), fill='black') # Три красные линии с размером в 5 пикселей. draw.line(  xy=((80, 200),(180, 100),(130, 50)), fill='red', width=10) # Имея три точки и связь между ними, у нас получится синий триугольник. draw.polygon(  xy=((200, 200),(300, 100),(250, 50)), fill='blue', outline=(0, 0, 0)) # Рисуем три точки. draw.point(  xy=((350, 200),(450, 100),(400, 50)), fill='black') im.save('draw-dots.jpg', quality=95)

Рисование линии, многоугольника и точки (пример)

from PIL import Image, ImageDraw

# Пустой желтый фон.

im = Image.new('RGB', (500, 300), (219, 193, 27))

draw = ImageDraw.Draw(im)

# Три черные линии в шириной в 1 пиксель.

draw.line(

xy=((30, 200),(130, 100),(80, 50)), fill='black')

# Три красные линии с размером в 5 пикселей.

draw.line(

xy=((80, 200),(180, 100),(130, 50)), fill='red', width=10)

# Имея три точки и связь между ними, у нас получится синий триугольник.

draw.polygon(

xy=((200, 200),(300, 100),(250, 50)), fill='blue', outline=(0, 0, 0))

# Рисуем три точки.

draw.point(

xy=((350, 200),(450, 100),(400, 50)), fill='black')

im.save('draw-dots.jpg', quality=95)

Рисуем дугу, хорды и пироги в Pillow Дуга: arc(xy, start, end, fill): Параметры start и end – указание угла дуги в градусах; Хорда: chord(xy, start, end, fill, outline): Начальные и конечные точки дуги связываются прямой линией. Пирог: pieslice(xy, start, end, fill, outline): Начальные и конечные точки дуги связываются прямой линией с центром круга. from PIL import Image, ImageDraw # Пустой желтый фон . im = Image.new('RGB', (610, 240), (219, 193, 27)) draw = ImageDraw.Draw(im) # Рисуем дугу. draw.arc(xy=(25, 50, 175, 200),start=30, end=270,fill='red') # Рисуем хорду. draw.chord(xy=(225, 50, 375, 200),start=30, end=270, fill=(255, 255, 0),outline=(0, 0, 0)) # Рисуем

Рисуем дугу, хорды и пироги в Pillow

Дуга: arc(xy, start, end, fill):

Параметры start и end – указание угла дуги в градусах;

Хорда: chord(xy, start, end, fill, outline):

Начальные и конечные точки дуги связываются прямой линией.

Пирог: pieslice(xy, start, end, fill, outline):

Начальные и конечные точки дуги связываются прямой линией с центром круга.

from PIL import Image, ImageDraw

# Пустой желтый фон .

im = Image.new('RGB', (610, 240), (219, 193, 27))

draw = ImageDraw.Draw(im)

# Рисуем дугу.

draw.arc(xy=(25, 50, 175, 200),start=30, end=270,fill='red')

# Рисуем хорду.

draw.chord(xy=(225, 50, 375, 200),start=30, end=270, fill=(255, 255, 0),outline=(0, 0, 0))

# Рисуем "кусок пирога".

draw.pieslice(xy=(425, 50, 575, 200),start=30, end=270, fill=(255, 255, 0),outline=(0, 0, 0))

im.save('draw-arc.jpg', quality=95)

«Черепашья графика» при помощи turtle Черепашья графика, turtle – принцип организации библиотеки графического вывода, построенный на метафоре Черепахи, воображаемого роботоподобного устройства, которое перемещается по экрану или бумаге и поворачивается в заданных направлениях, при этом оставляя (или, по выбору, не оставляя) за собой нарисованный след заданного цвета и ширины. Проще: черепашка ползает по экрану и рисует. Мы управляем черепашкой на плоскости при помощи программы. Мы командуем черепашкой простыми словами на английском языке. left, right – поворот налево и направо, forward и backward – движение вперед и назад. В программе каждое действие – вызов функции из модуля turtle. Простая программа: Импорт библиотеки import turtle Что произошло: Поворот направо на 90 градусов Движение вперед на 100 шагов (пикселей) Поворот налево на 90 градусов Движение назад на 100 шагов import turtle turtle.right(90) turtle.forward(100) turtle.left(90) turtle.backward(100)

«Черепашья графика» при помощи turtle

Черепашья графика, turtle – принцип организации библиотеки графического вывода, построенный на метафоре Черепахи, воображаемого роботоподобного устройства, которое перемещается по экрану или бумаге и поворачивается в заданных направлениях, при этом оставляя (или, по выбору, не оставляя) за собой нарисованный след заданного цвета и ширины.

Проще: черепашка ползает по экрану и рисует. Мы управляем черепашкой на плоскости при помощи программы.

Мы командуем черепашкой простыми словами на английском языке. left, right – поворот налево и направо, forward и backward – движение вперед и назад. В программе каждое действие – вызов функции из модуля turtle. Простая программа:

Импорт библиотеки

import turtle

Что произошло:

  • Поворот направо на 90 градусов
  • Движение вперед на 100 шагов (пикселей)
  • Поворот налево на 90 градусов
  • Движение назад на 100 шагов

import turtle

turtle.right(90)

turtle.forward(100)

turtle.left(90)

turtle.backward(100)

Это же «стрелка», а не «черепашка» Не похоже на черепашку, это ползающая стрелка! Исправим это: Отлично! Теперь это черепашка, пусть и монохромная. Дополнительно, функция exitonclick( ) позволяет закрыть окно и завершить выполнение программы кликом мышкой по окну. А еще можно использовать сокращенные названия функций: fd(100) вместо forward(100), rt вместо right, lt вместо left, bk вместо backward. import turtle turtle.shape(

Это же «стрелка», а не «черепашка»

Не похоже на черепашку, это ползающая стрелка! Исправим это:

Отлично! Теперь это черепашка, пусть и монохромная. Дополнительно, функция exitonclick( ) позволяет закрыть окно и завершить выполнение программы кликом мышкой по окну.

А еще можно использовать сокращенные названия функций: fd(100) вместо forward(100), rt вместо right, lt вместо left, bk вместо backward.

import turtle

turtle.shape("turtle")

turtle.fd(100)

turtle.exitonclick()

Геометрические фигуры Рисуем простые геометрические фигуры: Прямая: просто движение вперед Квадрат: вперед, поворот на 90 градусов и так 4 раза. Повторение команд – значит, можно выполнить их в цикле for! Пятиконечная звезда: вперед, поворот на 144 градусов и так 5 раз. Если мы хотим выполнить инструкции n раз, мы пишем их в цикле Далее идут инструкции с отступом в 4 пробела. Код с отступами – тело цикла. Когда цикл завершается, отступы больше не ставятся. for i in range(n): import turtle square = turtle.Turtle() square.shape(

Геометрические фигуры

Рисуем простые геометрические фигуры:

  • Прямая: просто движение вперед
  • Квадрат: вперед, поворот на 90 градусов и так 4 раза. Повторение команд – значит, можно выполнить их в цикле for!
  • Пятиконечная звезда: вперед, поворот на 144 градусов и так 5 раз.

Если мы хотим выполнить инструкции n раз, мы пишем их в цикле

Далее идут инструкции с отступом в 4 пробела. Код с отступами – тело цикла. Когда цикл завершается, отступы больше не ставятся.

for i in range(n):

import turtle

square = turtle.Turtle()

square.shape("turtle")

for i in range(4):

square.forward(100)

square.right(90)

turtle.exitonclick()

Изменяем параметры во время движения При отрисовке простых фигур черепашка возвращалась в исходную точку, и программа останавливалась, ожидая, когда будет закрыто окно. Если в цикле продолжить рисовать по прежним инструкциям, фигура будет нарисована заново по уже нарисованным контурам. Мы также добавили: color('red', 'green') определяет цвет линии и цвет заполнения. Черепашка теперь зеленая! begin _ fill() и end _ fill() обозначают начало и конец заполнения import turtle square = turtle.Turtle() square.shape(

Изменяем параметры во время движения

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

Мы также добавили:

  • color('red', 'green') определяет цвет линии и цвет заполнения. Черепашка теперь зеленая!
  • begin _ fill() и end _ fill() обозначают начало и конец заполнения

import turtle

square = turtle.Turtle()

square.shape("turtle")

square.color('red', 'green')

square.begin _ fill()

for j in range(3):

square.left(20)

for i in range(4):

square.forward(100)

square.left(90)

square.end _ fill()

turtle.exitonclick()

Координаты на плоскости Положение на плоскости определяется двумя числами, x и y: Черепашку в программе можно перемещать функцией goto(x, y) .  x и y – числа, или переменные. goto(0, 0) переместит черепашку в начало координат. Вместо звезды-спирали мы получили 5 линий, расходящихся из точки начала координат. import turtle spiral = turtle.Turtle() for i in range(20):  spiral.fd(i * 10)  spiral.rt(144)  spiral.goto(0,0) turtle.exitonclick()

Координаты на плоскости

Положение на плоскости определяется двумя числами, x и y:

Черепашку в программе можно перемещать функцией goto(x, y) . x и y – числа, или переменные. goto(0, 0) переместит черепашку в начало координат.

Вместо звезды-спирали мы получили 5 линий, расходящихся из точки начала координат.

import turtle

spiral = turtle.Turtle()

for i in range(20):

spiral.fd(i * 10)

spiral.rt(144)

spiral.goto(0,0)

turtle.exitonclick()

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

Круг и точка

Не хватает плавных изгибов? На помощь приходят функции 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()

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()" width="640"

Любые фигуры

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( 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")" width="640"

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")

Напоследок вспомним о кругах Ведь наша программа рисует только многоугольники. И хотя можно указать какой-то 40-угольник, который в итоге даже будет похож на круг: В программе есть для этого отдельная функция: circle. И заменив функцию polygon в цикле отрисовки: for i in range(0, 70):  turtlePen.color(

Напоследок вспомним о кругах

Ведь наша программа рисует только многоугольники. И хотя можно указать какой-то 40-угольник, который в итоге даже будет похож на круг:

В программе есть для этого отдельная функция: circle. И заменив функцию polygon в цикле отрисовки:

for i in range(0, 70):

turtlePen.color("white")

turtlePen.circle(size)

turtlePen.left(5)

size = size + 3

Сохранить у себя:
Создание игры. Знакомство с графикой

Получите свидетельство о публикации сразу после загрузки работы



Получите бесплатно свидетельство о публикации сразу после добавления разработки