Разработка и создание игры

XXIII Международный конкурс научно-исследовательских и творческих работ учащихся
Старт в науке

Разработка и создание игры

Бурмей А.А. 1
1МАОУ СОШ №8
Комлева С.А. 1
1МАОУ СОШ №8
Автор работы награжден дипломом победителя I степени
Текст работы размещён без изображений и формул.
Полная версия работы доступна во вкладке "Файлы работы" в формате PDF

ВВЕДЕНИЕ

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

Разработка и создание игр – увлекательный и креативный процесс. Это уникальный способ выразить свою творческую натуру и внести вклад в мир развлечений, так как игры стали неотъемлемой частью современной культуры и развлечения, привлекая миллионы игроков по всему миру, поэтому я считаю выбранную мной тему актуальной.

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

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

Объектом исследования моего проекта является разработка 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. Брякалов Г. А. и др. «Информатика и информационные технологии» – 1-е изд. – СПб.: Корона принт, 2005. – 672 с.

  2. М. Лутц «Изучаем Python» – 4-е изд. – Пер. с англ. – СПб: Символ-Плюс, 2011. – 1280 с.

  3. Н. Прохоренок , В. Дронов. «Python и PyQt 5. Разработка приложений» – 2-е изд. – СПб.: Профессиональное Программирование, 2016. – 832 с.

  4. Ю.Д. Романова «Информатика и информационные технологии» – 3-е изд. – Новое Экономическое Образование, 2009. – 688 с.

  5. Э. Свейгарт «Учим Python, делая крутые игры» – 4-е изд. – Пер. с англ. – М.: Бомбора, 2018

  6. 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

Просмотров работы: 41