Как сделать счет pygame

Добавил пользователь Евгений Кузнецов
Обновлено: 10.09.2024

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

Начало работы¶

Начнем знакомство с библиотекой непосредственно с разбора примера простого приложения:

В первую очередь импортируем модуль pygame в наш файл с исходным кодом:

Затем вызываем функцию init() для подготовки модулей pygame к работе:

После этого создаем графическое окно, передав в качестве аргумента в функцию set_mode() его разрешение в виде пары целых чисел. В свою очередь функция вернет нам объект типа Surface, используемый для представления изображений:

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

После того как ожидаемое событие наступило, завершаем работу с библиотекой pygame вызовом функции pygame.quit() и нашей программы вызовом функции exit() из модуля sys .

Рисование геометрических фигур¶

Разместим в окне нашего приложения прямоугольник. Прямоугольные объекты представлены типом Rect :

Для создания объекта этого типа нам необходимо указать координаты левого верхнего угла прямоугольника и длины его сторон:

Обратите внимание, что начало координат (0, 0) находится в левом верхнем углу окна.

В библиотеке pygame функции отображения геометрических фигур находятся в модуле draw . Нарисуем прямоугольник c помощью функции rect() :

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

Рассмотрим готовый пример:

Обратите внимание на последнюю строку нашей программы. На самом деле графические объекты которые мы хотим разместить на основном экране сначала попадают в специальный буфер. Чтобы отобразить изменения стали видны вызываем функцию flip() .

Прочие функции для рисования графических фигур¶

Нарисовать линию на поверхности Surface , цветом color , с началом в точке start_pos , концом в точке end_pos и толщиной линии width.

pygame.draw. lines ( Surface, color, closed, pointlist, width=1 ) ¶

Нарисовать линию, соединяющую точки из последовательности pointlist на поверхности Surface , цветом color , с толщиной линии width . Каждая точка представлена парой координат. Если параметр closed равен True , конечная точка соединяется с начальной.

Нарисовать окружность на поверхности Surface, цветом color , с центром в точке pos и радиусом radius . Если толщина линии width равна нулю, окружность закрашивается.

Нарисовать эллипс, ограниченный прямоугольником Rect , на поверхности Surface , цветом color . Если толщина линии width равна нулю, эллипс закрашивается.

pygame.draw. polygon ( Surface, color, pointlist, width=0 ) ¶

Нарисовать многоугольник по точкам из последовательности pointlist на поверхности Surface , цветом color , с толщиной линии width . Каждая точка представлена парой координат. Если толщина линии width равна нулю многоугольник закрашивается.

Значение для цвета можно задать тройкой чисел, каждое из которых лежит в диапазоне от 0 до 255. Первое значение в последовательности определяет, какое количество красного содержится в данном оттенке, второе - зеленого, третье - голубого. Чем меньше значение числа, тем темнее будет оттенок. Например, красный цвет можно представить как (255, 0, 0), белый как (255, 255, 255), а черный как (0, 0, 0).

Помимо этого, в модуле color из библиотеки pygame содержится словарь THECOLORS, ключами которого являются названия различных цветовых оттенков. Подключить его можно с помощью команды:

Закрасим основной экран c помощью метода fill() :

Текст и шрифты¶

При работе с текстом мы будем использовать шрифты - группы символов объединенных по стилистическому или иному признаку. Шрифты в библиотеке pygame представлены типом Font

Чтобы создать объект Font на основе имеющегося в системе шрифта вызовем следующую функцию:

С помощью параметра name передаем в функцию имя шрифта, параметр size - размер шрифта в пунктах. Параметры bold и italic отвечают за начертание шрифта.

Список имеющихся в системе шрифтов можно получить с помощью функции get_fonts() :

Далее, с помощью метода render() нашего объекта типа Font получаем изображение с текстом, которое передаем на вход методу blit() для отрисовке на нашем основном экране:

Текст размещается в на основном экране по координатам (50, 50)

Задания¶

1. Используя функции для работы с графикой библиотеки pygame, нарисуйте дом с квадратным основанием и треугольной крышей.

2. Используя функции для работы с графикой библиотеки pygame, нарисуйте белый флаг с олимпийскими кольцами.

3. Разработайте программу, которая разбивает основное игровое окно на клетки заданного размера.

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

5. Доработайте в программу возможность закрашивания клетки с произвольным номером случайным цветом. Номера клеток которые необходимо закрасить считывать из файла.

© Copyright Revision d00c0df4 .

Versions latest Downloads html On Read the Docs Project Home Builds Free document hosting provided by Read the Docs.

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

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

  • создает окно
  • запускает игровой цикл
  • выполняет контроль частоты кадров
  • в игровом цикле покадрово рисует круг и обновляет главное игровое окно
  • закрывает окно, если щелкнуть по кнопке закрытия в правом верхнем углу окна

window templ

Основное графическое окно игры

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

Основная поверхность

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

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

Объект, присвоенный переменной screen , называется поверхностью ( surface ). Метод display . set_mode всегда возвращает основную поверхность - это основное графическое окно программы. При каждом проходе игрового цикла происходит обновление основного графического окна программы.

В методе display.set_mode((600, 400)) первый параметр 600 - ширина, второй 400 – высота окна в пикселях. Двойные круглые скобки обязательны, поскольку метод set_mode() принимает значения не как два отдельных параметра, а как связанные значения в качестве параметра - кортеж.

Игровой цикл

Игры так устроены, что большая часть действий циклически потеряется: выполняется действие в игре, которое приводит к изменению состояния игры и, которое в свою очередь формирует новую стратегию поведения игрока. Далее все повторяется: действие, состояние, стратегия. Это и есть игровой цикл - базовое понятие в теории игр, на котором строится структура и логика игры.

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

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

Игровой цикл событий записывается с помощью оператора while. Он должен работать все время, пока пользователь играет в игру и может быть записан следующим образом:

Контроль скорости игры

Таким образом, команда clock.tick(FPS) выполняет автоматический контроль заданной частоты кадров.

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

Обработка событий

Событие (англ. Event) – это один из объектов pygame. Все события в PyGame при их появлении добавляются в очередь событий. Каждый элемент в этой очереди является Event объектом. Для получения доступа к событиям используется метод pygame.event.get(), который возвращает список событий, произошедших с момента последнего вызова этого метода. Просматривая список событий, мы может обработать выход из программы

С помощью цикла for проходим по списку. Каждое возникающее событие последовательно извлекается из цепочки событий, и проверяется, является ли оно событием pygame.QUIT. Если есть событие QUIT в очереди событий, то выйдем из игрового цикла

Добавим код закрытия окна в наш

Если запустить эту программу, то увидим работающее игровое окно, исчезающее, когда вы его закрываете.

window 1

Обновление основной поверхности

Метод pygame.display.flip() обновляет содержимое основного окна игры. При обновлении используется механизм двойной буферизации. Экранная картинка сначала формируется в памяти компьютера, где она невидима, а затем методом display.flip () переносится на экран. В результате изменения появляются не постепенно, а сразу, что позволяет избежать возникновения на экране изображений нарисованных лишь наполовину и уменьшить мерцания экрана.

Аналогом метода pygame.display.flip() является метод update(), имеющий тоже назначение.

Здесь rectangle – это прямоугольная область, которую требуется перерисовать. По умолчанию, если параметр rectangle не указан

то перерисовывается вся клиентская область. Этот метод позволяет повысить производительность рисования, обновляя не все главное игровое окно, а обновляя только те части окна, которые были изменены. Для этого необходимо задать прямоугольные области, которые требуется перерисовать.

Примечание.

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

Выполним обновление содержимого основного игрового окна

Surface

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

Объект, присвоенный переменной screen , называется поверхностью ( surface ). Метод display . set _ mode всегда возвращает основную поверхность - это основное графическое окно программы. При каждом проходе игрового цикла происходит обновление основного графического окна программы

Функция Surface()

Эта функция pygame. Surface() используется для создания объекта surface - это дополнительная поверхность для размещения на ней изображений. Она принимает в качестве параметра кортеж с двумя значениями (ширина, высота) поверхности

Этот код создаст пустое изображение размером 100 x 100 пикселей. Цвет по умолчанию будет черным.

Функция fill()

Функция принимает объект color – цвет заливки поверхности, это кортеж RGB, например, BLUE = (0, 0, 255)

Поверхности можно делать прозрачными с помощью их метода set_alpha(). Аргумент меняется от 0 (полная прозрачность) до 255 (полная непрозрачность).

Функция blit()

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

В этом примере функция blit() отображает содержимое дополнительной поверхности mySurface на поверхности screen.

Метод pygame.display.flip()

Этот метод обновляет содержимое основного экрана, используя механизм двойной буферизации. Если он не будет вызван, ни одно из изменений, вызванных вызовом функции blit () , не будет отображаться на экране.

Метод pygame.display.update()

Механизм двойной буферизации

Метод pygame.display.flip() обновляет содержимое основного окна игры. При обновлении используется механизм двойной буферизации. Экранная картинка сначала формируется в памяти компьютера, где она невидима, а затем методом display.flip() переносится на экран. В результате изменения появляются не постепенно, а сразу, что позволяет избежать возникновения на экране изображений нарисованных лишь наполовину и уменьшить мерцания экрана.

Класс Draw

Класс Draw имеет 9 методов рисования геометрических фигур, которые имеют следующие общие параметры:

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

Рисование круга:

Рисование треугольника/многоугольника:

Рисование линий

1. Рисование линии между точками start=(x,y) и end=(x1,y1)

2. Рисование тонкой сглаженной линии между точками start=(x,y) и end=(x1,y1),blend– коэффициент сглаживания линии

3. Рисование ломаной линии, pointlist = ((x1,y1),(x2,y2),(x3,y4)) – координаты точек связанных отрезков, сlosed = (True или False) указывает замыкать ли крайние точки.

Рисование эллипсов:

Рисование дуги:

Движение круга

Алгоритм движения можно записать следующим образом.

В игровом цикле:

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

здесь x += 1 и у += 1 означает, что координаты круга изменяются на 1 пиксель на каждом игровом цикле.

  • нарисовать круг в памяти компьютера в новых координатах

pygame.draw.circle(screen, blue, (x, y), r)

Для игрового цикла мы использовали частоту 60 кадров в секунду. Следовательно, за 1 секунду центр круга сместиться на 60 пикселей по оси х, по оси y и через несколько секунд исчезнет за границей окна, поскольку главный цикл обновляет экран с частотой 60 кадров в секунду , постоянно перерисовывая его содержимое .

Отталкивание круга от границ окна

В PyGame используется э кранная система координат – это координатная система, заданная на экранной плоскости. Две ее оси параллельны сторонам экрана, ось OX направлена слева на право, OY – снизу вверх.

XOY

Запишем условия не выхода круга за границы игрового экрана. Введем переменные для скорости перемещения круга: dx, dy – количество пикселей, на которое смещается центр круга по оси x и оси y за один кадр

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

if y + r > H or y-r
dy = dy * -1
if x + r > W or x-r
dx = dx * -1

Полный листинг программы

Способы обработки событий клавиатуры и мыши

Есть два основных способа работы с клавиатурой, мышью.

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

Если вызывать метод pygame.event.get() в игровом цикле, то мы получим список событий для каждого кадра. Каждый элемент списка это объект типа Event, который имеет свойство type . Способ обработки этих событий зависит от типа самого события. Тип события можно проверить, прочитав поле event.type .

События клавиатуры могут иметь два типа

  • event.type == pygame.KEYDOWN – клавиша нажата;
  • event.type == pygame.KEYUP – клавиша отпущена.

Если вы нажали клавишу и отпустили, то в очередь событий будут записаны оба.

События мыши могут иметь четыре типа

  • event.type == pygame.MOUSEBUTTONDOWN – кнопка мыши нажата
  • event.type == pygame.MOUSEBUTTONUP – кнопка мыши отпущена
  • event.type == pygame.MOUSEMOTION –курсора мыши перемещается
  • event.type == pygame.MOUSEWHEEL – кручение колесика мыши.

Данный способ основан на работе с модулем клавиатуры и модулем мыши

Ознакомится с модулями можно здесь:

События клавиатуры

В качестве примера рассмотрим фрагмент программы, в котором при нажатии на курсорные клавиши будет перемещаться прямоугольник на экране

С помощью цикла for проходим по списку

Каждое возникающее событие последовательно извлекаем из цепочки событий, и сравниваем с типом события pygame.KEYDOWN , если тип события равен pygame.KEYDOWN , то у этого типа есть атрибут event.key . Теперь сравниваем этот атрибут со значениями курсорных клавиш K_LEFT, pygame.K_RIGHT, pygame.K_UP, pygame.K_DOWN. Если получили совпадение с одной из клавиш, то задаем смещение прямоугольника с помощью переменных dx или dy .

Далее определяем новые координаты для рисования прямоугольника

и рисуем прямоугольник в блоке формирования кадра

Обработка событий клавиатуры помощью с модуля клавиатуры pygame.key

Проверить состояние клавиш можно с помощью функции

которая возвращает кортеж двоичных значений. Индекс каждого значения соответствует своей клавиатурной константе. Само значение равно 1, если клавиша нажата, и 0 – если не нажата.

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

pygame - это библиотека модулей для языка Python, созданная для разработки 2D игр.

Для того чтобы установить pygame на свой компьютер необходимо открыть командную строку или терминал и написать команду

pip3 install pygame

После установки необходимо создать новый файл и импортировать модуль pygame и написать шаблон игры

Пользователь может взаимодействовать с нашей игрой. Каждое действие пользователя - это некоторое событие , которое мы можем обработать . Выражение pygame.event.get() - это список событий, произошедших в нашей игре.

Цикл for просто перебирает необработанные события. Каждое событие он присваивает переменной event (можно написать любую другую).

Поговорим о цикле while , основном цикле игры . Как часто он выполняется? Очень и очень часто, это зависит от мощности компьютера. Для обновления экрана в играх часто используют 60 кадров в секунду.

Ограничим количество выполнений цикла.

import pygame
from sys import exit

display = pygame.display. set_mode ( ( 800 , 600 ) )

Методу tick() передается желаемое количество кадров в секунду. Задержку он вычисляет сам. На каждой итерации основного цикла игры секунда делится на 60 и на вычисленную величину выполняется задержка.

В библиотеке pygame существует множество функций для рисования различных фигур.

Функция polygon() рисует произвольную фигуру. Она принимает 3 обязательных параметра (поверхность, цвет и кортеж координат) и 1 необязательный (толщину линий).

import pygame
from sys import exit

display = pygame.display. set_mode ( ( 800 , 600 ) )

FPS = 60
clock = pg.time. Clock ()
while True :
f or event in pygame.event. get ():
if event.type == pygame.QUIT:
pygame. quit ()
exit ()

display - наша поверхность

(255, 0, 0) - красный цвет , почитайте про rgb

( (0, 0), (100, 0), (100, 100), (0, 100) ) - координаты вершин квадрата. Возьмите листочек и нарисуйте его координатах (замените сотню на единицу).

Давайте нарисуем треугольник

import pygame
from sys import exit

display = pygame.display. set_mode ( ( 800 , 600 ) )

(0, 0, 255) - синий цвет

((100, 100), (200, 200), (100, 200)) - координаты вершин нашего треугольник.

Самостоятельно нарисуйте пятиугольник (вам помогут карандаш и лист бумаги)

Рисование окружностей

Чтобы нарисовать окружность нужно вызвать метод circle из модуля draw. Команда выглядит так: pygame.draw.circle(display, color, position, radius).

display - поверхность, на которой рисуем

color - цвет, записанный в кортеже из трех чисел. (еще раз про rgb)

position - координаты точки центра окружности ( кортеж из двух чисел (x, y) )

radius - радиус окружности в пикселях

import pygame
from sys import exit

display = pygame.display. set_mode ( ( 800 , 600 ) )

FPS = 60
clock = pg.time. Clock ()
while True :
f or event in pygame.event. get ():
if event.type == pygame.QUIT:
pygame. quit ()
exit ()

display - наша поверхнотсть для рисования

(255, 255, 0) - желтый цвет

(400, 200) - координаты точки центра (в нашем случае 400 пикселей от верхнего левого угла по горизонтали и 200 пикселей по вертикали)

100 - радиус нашей окружности в пикселях

Объявления переменных для цветов

Для нашего с вами удобства давайте объявим несколько переменных, в которые сохраним используемые нами цвета

import pygame
from sys import exit

WHITE = ( 255 , 255 , 255 )
BLACK = ( 0 , 0 , 0 )
PURPLE = ( 156 , 39 , 176 )
INDIGO = ( 63 , 81 , 181 )
BLUE = ( 33 , 150 , 243 )
GREEN = ( 76 , 175 , 80 )
YELLOW = ( 255 , 235 , 59 )
ORANGE = ( 255 , 152 , 0 )
GREY = ( 158 , 158 , 158 )

display = pygame.display. set_mode ( ( 800 , 600 ) )

FPS = 60
clock = pg.time. Clock ()
while True :
f or event in pygame.event. get ():
if event.type == pygame.QUIT:
pygame. quit ()
exit ()

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

Для отрисовки прямоугольников можно использовать метод rect.

pygame.draw.rect(display, color, (x, y, width, height) )

color - цвет (теперь можно просто написать имя переменную)

(x, y, width, height) - кортеж из четырех значений. Первые два значения - это координаты верхнего левого угла прямоугольника, а два последних - это ширина и высота.

import pygame
from sys import exit

WHITE = ( 255 , 255 , 255 )
BLACK = ( 0 , 0 , 0 )
PURPLE = ( 156 , 39 , 176 )
INDIGO = ( 63 , 81 , 181 )
BLUE = ( 33 , 150 , 243 )
GREEN = ( 76 , 175 , 80 )
YELLOW = ( 255 , 235 , 59 )
ORANGE = ( 255 , 152 , 0 )
GREY = ( 158 , 158 , 158 )

display = pygame.display. set_mode ( ( 800 , 600 ) )

FPS = 60
clock = pg.time. Clock ()
while True :
f or event in pygame.event. get ():
if event.type == pygame.QUIT:
pygame. quit ()
exit ()

Если ваша творческая натура требует большего, то вот ссылка на документацию модулю draw

Там можно найти рисование линий, дуг, эллипсов.

Большой пример ( запусти его у себя на компьтере:

Прежде чем мы начнём программировать что-то полезное на Python, давайте закодим что-нибудь интересное. Например, свою игру, где нужно не дать шарику упасть, типа Арканоида. Вы, скорее всего, играли в детстве во что-то подобное, поэтому освоиться будет просто.

Логика игры

Есть игровое поле — простой прямоугольник с твёрдыми границами. Когда шарик касается стенки или потолка, он отскакивает в другую сторону. Если он упадёт на пол — вы проиграли. Чтобы этого не случилось, внизу вдоль пола летает платформа, а вы ей управляете с помощью стрелок. Ваша задача — подставлять платформу под шарик как можно дольше. За каждое удачное спасение шарика вы получаете одно очко.

Алгоритм

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

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

Получается, что нам нужно определить три класса — платформу, сам шарик и счёт, и определить, как они реагируют на действия друг друга. Поле нам самим определять не нужно — для этого есть уже готовая библиотека. А потом в этих классах мы пропишем методы — они как раз и будут отвечать за поведение наших объектов.

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

По коням, пишем на Python

Для этого проекта вам потребуется установить и запустить среду Python. Как это сделать — читайте в нашей статье.

Начало программы

Чтобы у нас появилась графика в игре, используем библиотеку Tkinter. Она входит в набор стандартных библиотек Python и позволяет рисовать простейшие объекты — линии, прямоугольники, круги и красить их в разные цвета. Такой простой Paint, только для Python.

Чтобы создать окно, где будет видна графика, используют класс Tk(). Он просто делает окно, но без содержимого. Чтобы появилось содержимое, создают холст — видимую часть окна. Именно на нём мы будем рисовать нашу игру. За холст отвечает класс Canvas(), поэтому нам нужно будет создать свой объект из этого класса и дальше уже работать с этим объектом.

Если мы принудительно не ограничим скорость платформы, то она будет перемещаться мгновенно, ведь компьютер считает очень быстро и моментально передвинет её к другому краю. Поэтому мы будем искусственно ограничивать время движения, а для этого нам понадобится модуль Time — он тоже стандартный.

Последнее, что нам глобально нужно, — задавать случайным образом начальное положение шарика и платформы, чтобы было интереснее играть. За это отвечает модуль Random — он помогает генерировать случайные числа и перемешивать данные.

Запишем всё это в виде кода на Python:

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

Шарик

Сначала проговорим словами, что нам нужно от шарика. Он должен уметь:

  • задавать своё начальное положение и направление движение;
  • понимать, когда он коснулся платформы;
  • рисовать сам себя и понимать, когда нужно отрисовать себя в новом положении (например, после отскока от стены).


Этого достаточно, чтобы шарик жил своей жизнью и умел взаимодействовать с окружающей средой. При этом нужно не забыть о том, что каждый класс должен содержать конструктор — код, который отвечает за создание нового объекта. Без этого сделать шарик не получится. Запишем это на Python:

Платформа

Сделаем то же самое для платформы — сначала опишем её поведение словами, а потом переведём в код. Итак, вот что должна уметь платформа:

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

А вот как это будет в виде кода:

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

От счёта нам нужно только одно (кроме конструктора) — чтобы он правильно реагировал на касание платформы, увеличивал число очков и выводил их на экран:

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

Посмотрите, как лаконично выглядит код непосредственно самой игры:

Что дальше

На основе этого кода вы можете сделать свою модификацию игры:

  • добавить второй шарик;
  • раскрасить элементы в другой цвет;
  • поменять размеры шарика; поменять скорость платформы;
  • сделать всё это сразу;
  • поменять логику программы на свою.

Любишь Python? Зарабатывай на нём!
Любишь Python? Зарабатывай на нём!
Любишь Python? Зарабатывай на нём!
Любишь Python? Зарабатывай на нём!

Читайте также: