Курс 3.5 · Раздел 13 · Урок 13.1

Клетчатое поле

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

Создадим клетчатое поле для игр и зададим его размеры через количество и сторону клеток.
13.1 — Клетчатое поле

Материал урока

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

Библиотека Turtle предоставляет нам удобное решение для работы с графическими приложениями: главное окно использует привычную декартову систему координат, с центром в середине окна, осью x, направленной вправо, и осью y, ориентированной вверх.

Представим, что размеры поля задаются двумя переменными: N — количество клеток по горизонтали и вертикали, а SIZE — размер стороны клетки. Чтобы установить размер окна в соответствии с размерами клетчатого поля, создадим окно (Screen) и зададим ему параметры с помощью метода setup.

Для ускорения процесса рисования сетки, создадим двух черепах: одна будет рисовать горизонтальные линии, а другая — вертикальные. Установим максимальную скорость рисования, скроем самих черепах и приступим к созданию сетки:

from turtle import Turtle, Screen, done  # импортировали все необходимое

N, SIZE = 5, 100

def grid():

    row, column = Turtle(), Turtle()  # создали двух Черепах

    for item in row, column:  # задаем начальные параметры Черепахам

        item.speed(0)  # скорость на максимум

        item.ht()  # скрыть Черепах

        item.pu()  # не рисовать при перемещении

        item.goto(-(N * SIZE // 2), N * SIZE // 2)  # начальная точка

    column.rt(90)  # поворот направо

    for _ in range(N):

        row.goto(-(N * SIZE // 2), row.ycor() - SIZE)  # перемещение для рисования следующей линии

        column.goto(column.xcor() + SIZE, N * SIZE // 2)

        for item in row, column:

            item.pd()

            item.fd(N * SIZE)  # рисование линии

            item.pu()

sc = Screen()  # создание экрана

sc.setup(N * SIZE, N * SIZE)  # задание параметров

grid()  # вызов функции рисования сетки

done()  # ожидание закрытия окна

Если теперь запустить этот код, то довольно быстро будет нарисовано такое клетчатое поле:

Клетчатое поле 5 × 5 в окне turtle
Клетчатое поле 5 × 5 в окне turtle