Статья Автор: Лебедев Дмитрий Алексеевич

Программирование в примерах и задачах от Черепашки. Введение. Процедуры: линия, сетка (для начинающих)

Пример 1. Рисуем линию.

Надо научить рисовать линию. 
Вроде все просто и можно сделать комбинацией команд.
Но если надо вызывать это много раз?
Напишем подпрограмму, которая будет это делать.
Что нужно подпрограмме:
  • координаты точки Старта, точки Финиша
  • имя Исполнителя  (Черепашки)
  • масштаб рисования. Зачем? - А вдруг пригодиться

 

Пример 2. Рисуем сетку

Рисование линии - это вспомогательная задача, с помощью которой можно решать более сложные задачи.
Разберем, как нарисовать прямоугольник, разлинованный в клетку.
Что нам для этого надо знать? (Какие параметры нужны программе?)
  • размеры прямоугольника
  • размер клетки
  • исполнитель
Прямоугольник можно задать координатами "левого нижнего угла" и "правого верхнего угла".
А в каких единицах их задавать? (в пикселях или как на листе бумаги?) 
    -  если используем размер клетки, то "удобнее" как на листе бумаги, то есть
       размер  (1,1) - (8,8) будет задавать "шахматную" доску, 
       а размер (0,0) - (2,2) задаст поле для крестиков-ноликов"
Попробуем создать подпрограмму setka, которая получит 
  • координаты углов прямоугольника
  • размер клетки
  • исполнителя
и используя подпрограмму my_line нарисует разлинованное поле 
Для удобства, подпрограмма my_line скрыта
 

 

Теперь несложно нарисовать рисунок по точкам.
Например, нарисовать 4-угольник ABCD и его диаголани:
  • \(A = (-3, -3);  B = (2, 3); C = (5, 1);D = (4, -3)\)
  •  линии красным цветом, толщина пера 3
  • диагонали синим цветом толщина пера 1
  • размер клетки подобрать так, чтобы чертеж был максимально большим
  • чертеж должен располагаться в разлинованном прямоугольнике

 

Пример 3. Функции для клетки

Научились рисовать сетку (таблицу), можем чертить. 
Что может ещё быть полезным?
  • Заливка клетки - сможем делать игровые доски, раскраски
  • Печать текста в клетку
  • что-то ещё?
Начнем с заливки клетки. Программу назовем kletka_fill. 
Что надо подать на вход:
  • A - координаты клетки (левый нижний угол) - относительные или в пикселях?
  • rk - размер клетки
  • t - ислонителя 
  • clr - цвет заливки. Если нет, то красим цветом исполнителя  

 

Теперь попробуем научиться печатать текст в клетку.
Для этого будем использовать метод write
turtle.write(arg, move=False, align="left", font=("Arial", 8, "normal"))
Параметры:
arg - строка/объект для записи в TurtleScreen,
move=False - отвечает за позицию пера, после вывода текста,
align="left" - одна из строк 'left', 'center' или 'right',
font=("Arial", 8, "normal") - описание шрифта, тройной кортеж (fontname, fontsize, fonttype).
Напишем программу kletka_text с параметрами
  • st - строка/символ текста, который надо вывести
  • A - координаты узла клетки (в таблице) куда надо поместить (или начала записи)
  • rk - размер клетки
  • t - исполнитель 
  • fn - параметры шрифта (зададим умолчание)
Возможно потребуются ещё параметры и доработка подпрограммы. Пока создадим простую версию

 

Подписать получилось, но не очень "красиво".
Добавим несколько исправлений:
  • уменьшим размер шрифта по умолчанию до rk/2
  • будем сдвигать "точку печати"
Можно сделать и другие усовершенствования
Попробуем заполнить таблицу умножения для 8-й системы счисления
В подпрограмму kletka_text допавили возможность управления только размером шрифта
 

 

Пример 4. Рисуем шахматную доску с фигурами
Для изображения фигур можно использовать символы Юникода
chess_pieces_unicode = { '♔': 'Белый король = K', '♕': 'Белый ферзь = W ','♖': 'Белый ладья = R', '♗': 'Белый слон = B', '♘': 'Белый конь =  H','♙': 'Белая пешка = P', '♚': 'Черный король = k', '♛': 'Черный ферзь = w', '♜': 'Черная ладья = r', '♝': 'Черный слон = b', '♞': 'Черный конь = h', '♟': 'Черная пешка = p' }

Для более "комфортного восприятия будем использовать цвета;
  • #884513 для черных  клеток
  • #C0C0C0 для белых
Ниже приведена программа рисующая игровое поле на шахматной доске
 

 

На этом вводная часть примеров завершина.
Можно обратить внимание на другие методы turtle
например здесь
и, например, научиться использовать метод stamp
Печать