ВВЕДЕНИЕ
В современном мире важную роль в жизни каждого человека играют цифровые технологии. Они проникли во все сферы нашей жизни, включая образование, работу, развлечения и межличностные взаимодействия. Особое место среди цифровых технологий занимают компьютерные игры, которые стали не только популярным видом развлечения, но и инструментом для обучения, тренировки и развития навыков.
Разработка и создание игр – увлекательный и креативный процесс. Это уникальный способ выразить свою творческую натуру и внести вклад в мир развлечений, так как игры стали неотъемлемой частью современной культуры и развлечения, привлекая миллионы игроков по всему миру, поэтому я считаю выбранную мной тему актуальной.
Многие подростки, увлечённые компьютерными играми, даже не задумываются о том, что самостоятельно могут создать «идеальную» игру, придумав свой оригинальный сюжет и дизайн.
Я предполагаю, что любой школьник, даже ранее не знакомый с программированием, может создать свою уникальную компьютерную игру, углубившись в изучение какого-либо языка программирования, чем заинтересует и привлечёт сверстников к изучению информатики.
Объектом исследования моего проекта является разработка 2D-игры.
Предмет исследования проекта – язык программирования Python.
Целью моего проекта является создание собственной компьютерной игры в среде разработки Python.
Задачи, которые необходимо будет реализовать в проекте:
изучить основы программирования на языке Python и особенности разработки игр;
придумать сюжет и дизайн будущей игры;
написать программный код.
Методы исследования: сбор, анализ, обобщение и систематизация материала, сравнение, просмотр обучающих видеороликов и чтение дополнительной литературы, создание своей игры.
В своей работе я использовала обучающую литературу и учебные пособия для знакомства с языком программирования Python. Также, для создания собственной игры необходимо было изучить достаточное количество материалов про специальные библиотеки Python и инструменты для создания игр.
Несмотря на то, что на данный момент существует большое количество разнообразных приложений и игр, я хотела бы создать нечто уникальное и творческое, что впоследствии могло бы повысить интерес к изучению информатики в игровой форме.
1. СОЗДАНИЕ 2D-ИГРЫ
1.1. Разработка дизайна, идеи и жанра будущей игры
Процесс создания игры, как и многого другого, состоит из нескольких этапов. Самым первым из них является проектирование будущего продукта, обдумывание идеи, а в случае игры, ещё и выбор жанра.
Компьютерные игры бывают разнообразных жанров, однако большинство из них очень сложны в реализации, особенно для новичков. Поэтому, изучив некоторые варианты, я остановила свой выбор на простой развлекательной игре-лабиринте, где целью будет добраться до финиша, обойдя все препятствия и не столкнувшись с врагами.
Саму игру я захотела создать в стилистике подводного мира, а персонажей игры – в виде морских обитателей. По моей задумке на игровом поле должны будут располагаться 4 видов спрайтов, то есть объектов компьютерной графики, расположенных на экране, за исключением фона. А именно: 1 главный герой, 4 стены-барьера, 2 врага, 1 «знак финиша» и спрайты-пули, которыми главный герой может победить врагов.
Для создания наиболее подходящей атмосферы подводного мира, я решила сделать не просто однотонный цветной фон, а разместить на заднем плане полноценную картинку (см. Приложение 1).
Главный герой моей игры – рыбка Дори (см. Приложение 2), которая хочет добраться до сундука с сокровищами. Однако на своём пути ей нужно будет не только обходить препятствия, но и избегать столкновения с врагами, защищающими сундук: злым удильщиком (см. Приложение 3) и осьминогом (см. Приложение 4). Но у рыбки Дори будет возможность стрелять по врагам специальными «пулями-пузырями», что позволит ей беспрепятственно добраться до финала – сундука с сокровищами. Управление необходимо только главному герою и будет осуществляться по клавишам «Вверх», «Вниз», «Влево», «Вправо»; также нажатием на клавишу «Пробел», будет производиться «выстрел». Движение врагов должно быть автоматическим и осуществляться без вмешательства игрока.
Придумав концепцию и сюжет игры, я смогла выбрать персонажей моей работы и, соответственно, полностью визуализировать свой будущий продукт, а также представить всю механику игры и управление главным героем. После чего, можно было приступать к написанию кода.
1.2. Написание программного кода 2D-игры
Первым шагом создания игры было ознакомление со всей нужной мне информацией, а именно с внутренней составляющей компьютерных игр и языком программирования Python. После чего можно было приступать к написанию программного кода с помощью редактора VS Code, который используется для написания программ на Python. Далее я создала файл своей работы, чтобы производить дальнейшие сохранения по ходу написания кода.
Написание игры началось с выбора библиотек, классов и модулей. У Python существует 2 библиотеки, которые подходят для создания игр: Pygame и Arcade. Изучив каждую из них, я остановила свой выбор на Pygame, потому что запланированная игра – одноуровневая и не требует множества кнопок для управления. Pygame – это «игровая библиотека», то есть набор инструментов, помогающих программистам создавать игры. К ним относятся: графика, анимация, звук, управление и многое другое. После установки библиотеки Pygame, необходимо было импортировать её в созданный заранее файл, а дальше начинается написание самого кода игры.
В двухмерной игре все, что вы видите на экране, является спрайтами, а так как по моей задумке в игре должно присутствовать 4 вида спрайтов, необходимо будет создать 4 специальных класса, то есть 4 шаблона для создания игровых объектов.
Первый вид спрайтов и, соответственно, первый класс – неподвижные объекты на экране. К таким спрайтам будут относиться стены лабиринта и сундук с сокровищами – знак завершения игры. Данный класс пишется на основе уже существующего в библиотеке Pygame класса и создаёт неподвижные объекты, поэтому в нём будет описываться не так много: размеры спрайта, его расположение, внешний вид и функция, непосредственно отображающая объект на экране:
from pygame import
class GameSprite(sprite.Sprite):
def __init__(self, player_image, player_x, player_y, size_x, size_y):
sprite.Sprite.__init__(self)
self.image = transform.scale(image.load(player_image), (size_x, size_y))
self.rect = self.image.get_rect()
self.rect.x = player_x
self.rect.y = player_y
def reset(self):
window.blit(self.image, (self.rect.x, self.rect.y))
Все последующие классы будут создаваться на основе данного и только приобретать отличительные функции.
Второй вид спрайтов и второй класс – это класс игрока, в котором будет описано движение персонажа, а именно функция задающая скорость и функция, обрабатывающая столкновения героя со стенами и не позволяющая проходить сквозь барьеры, а также функция стрельбы:
class Player(GameSprite):
def __init__(self, player_image, player_x, player_y, size_x, size_y, player_x_speed,player_y_speed):
GameSprite.__init__(self, player_image, player_x, player_y,size_x, size_y)
self.x_speed = player_x_speed
self.y_speed = player_y_speed
def update(self):
self.rect.x += self.x_speed
self.rect.y += self.y_speed
def update(self):
if hero.rect.x <= win_width-80 and hero.x_speed > 0 or hero.rect.x >= 0 and hero.x_speed < 0:
self.rect.x += self.x_speed
platforms_touched = sprite.spritecollide(self, barriers, False)
if self.x_speed > 0:
for p in platforms_touched:
self.rect.right = min(self.rect.right, p.rect.left)
elif self.x_speed < 0:
for p in platforms_touched:
self.rect.left = max(self.rect.left, p.rect.right)
if hero.rect.y <= win_height-80 and hero.y_speed > 0 or hero.rect.y >= 0 and hero.y_speed < 0:
self.rect.y += self.y_speed
platforms_touched = sprite.spritecollide(self, barriers, False)
if self.y_speed > 0:
for p in platforms_touched:
self.rect.bottom = min(self.rect.bottom, p.rect.top)
elif self.y_speed < 0:
for p in platforms_touched:
self.rect.top = max(self.rect.top, p.rect.bottom)
def fire(self):
bubble = Bubbles('bubbles.png', self.rect.right, self.rect.centery, 15, 20, 15)
bubbles.add(bubble)
Единственный объект данного класса – главный герой.
Третий вид спрайтов и третий класс является шаблоном для создания двух врагов. Скорость объектов данного класса – постоянная, а в функции описано автоматическое движение персонажей влево и вправо:
class Enemy(GameSprite):
side = 'left'
def __init__(self, player_image, player_x, player_y, size_x, size_y, player_speed):
GameSprite.__init__(self, player_image, player_x, player_y, size_x, size_y)
self.speed = player_speed
def update(self):
if self.rect.x <= 490:
self.side = 'right'
if self.rect.x >= win_width - 85:
self.side = 'left'
if self.side == 'left':
self.rect.x -= self.speed
else:
self.rect.x += self.speed
На основе четвёртого класса создаются «пули-пузыри», с помощью которых стреляет главный герой, также в нём описывается их движение и функция, которая убирает врага с экрана при попадании в него:
class Bubbles(GameSprite):
def __init__(self, player_image, player_x, player_y, size_x, size_y, player_speed):
GameSprite.__init__(self, player_image, player_x, player_y, size_x, size_y)
self.speed = player_speed
def update(self):
self.rect.x += self.speed
if self.rect.x > win_width + 10:
self.kill()
Основной код игры пишется после описанных ранее классов. Создаётся окно программы, которому задаются размеры, и устанавливается выбранный фон. Также на основе написанных классов создаются: стены лабиринта, главный герой, враги и финальный спрайт.
В игровом цикле описывается движение главного героя при нажатии на клавиши «Вверх», «Вниз», «Влево», «Вправо» и выстрел при нажатии на «Пробел». Все созданные персонажи и объекты располагаются и отображаются на экране:
finish = False
run = True
while run:
time.delay(50)
for e in event.get():
if e.type == QUIT:
run = False
elif e.type == KEYDOWN:
if e.key == K_LEFT:
hero.x_speed = -5
elif e.key == K_RIGHT:
hero.x_speed = 5
elif e.key == K_UP:
hero.y_speed = -5
elif e.key == K_DOWN:
hero.y_speed = 5
elif e.key == K_SPACE:
hero.fire()
elif e.type == KEYUP:
if e.key == K_LEFT:
hero.x_speed = 0
elif e.key == K_RIGHT:
hero.x_speed = 0
elif e.key == K_UP:
hero.y_speed = 0
elif e.key == K_DOWN:
hero.y_speed = 0
if not finish:
window.blit(picture,(0,0))
barriers.draw(window)
bubbles.draw(window)
hero.reset()
final.reset()
bubbles.update()
hero.update()
sprite.groupcollide(enemis, bubbles, True, True)
enemis.update()
enemis.draw(window)
sprite.groupcollide(bubbles, barriers, True, False)
Самыми последними описываются условия проигрыша и победы. Столкновение главного героя с врагами означает проигрыш, если же рыбка Дори успешно добралась до сундука с сокровищами – игрок победил, после чего появляется соответствующая надпись.
По итогам практической работы, я не только изучила основы программирования на языке Python, но и придумала концепцию собственной игры, а самое главное – смогла написать программный код, в котором описано создание всех объектов на экране, движение персонажей, их особенности, а также условия победы и проигрыша. В результате у меня получилась простая, но забавная 2D-игра (см. Приложение 5).
ЗАКЛЮЧЕНИЕ
Современный мир наполнен различными технологиями, что делает его интересным и многогранным. Современные школьники с раннего возраста интересуются компьютерными играми, и этот интерес может быть использован с пользой. Процесс разработки игры увлекательный и интересный, улучшает способность запоминать и обрабатывать информацию, учит находить нестандартные решения сложных задач, развивает интеллект и умственные способности
Познакомившись с основами программирования на Python, я смогла понять какие инструменты, шаблоны и функции понадобятся мне при разработке собственной игры, так как в нём представлены все необходимые графические средства для изображения объектов на экране и структур управления.
Определившись с жанром игры и придумав её сюжет, я подобрала локацию – фон для своей программы, а также выбрала персонажей игры. Продумала то, как будет осуществляться движение главного героя, и решила добавить ему отличительную черту – возможность стрелять во врагов.
В итоге, у меня получилось написать код, в котором описывается создание всех объектов на экране, движение персонажей, их особенности, а также условия победы и проигрыша.
В ходе проделанной работы мне удалось добиться желаемого результата. У меня получилось создать собственную простую 2D-игру на языке программирования Python.
В результате своего исследования, я убедилась, что даже подросток, ранее не знакомый с программированием и разработкой приложений, может создать свою уникальную игру. В дальнейшем я планирую усовершенствовать свои навыки и продолжить создавать игры с более сложными сценариями, а возможно и в более сложных программах.
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
Брякалов Г. А. и др. «Информатика и информационные технологии» – 1-е изд. – СПб.: Корона принт, 2005. – 672 с.
М. Лутц «Изучаем Python» – 4-е изд. – Пер. с англ. – СПб: Символ-Плюс, 2011. – 1280 с.
Н. Прохоренок , В. Дронов. «Python и PyQt 5. Разработка приложений» – 2-е изд. – СПб.: Профессиональное Программирование, 2016. – 832 с.
Ю.Д. Романова «Информатика и информационные технологии» – 3-е изд. – Новое Экономическое Образование, 2009. – 688 с.
Э. Свейгарт «Учим Python, делая крутые игры» – 4-е изд. – Пер. с англ. – М.: Бомбора, 2018
Python для разработки игр: возможности и неудачи / [Электронный ресурс] // https://dtf.ru: [сайт]. – URL: https://dtf.ru/u/735923-productstar/1674682-python-dlya-razrabotki-igr-vozmozhnosti-i-neudachi (дата обращения: 01.08.2024)
ПРИЛОЖЕНИЯ
Приложение 1
Приложение 2
Приложение 3
Приложение 4
Приложение 5