Создание игрового приложения с использованием среды разработки игр Unity

Автор: Бахтин И.В.

Журнал: Форум молодых ученых @forum-nauka

Статья в выпуске: 2 (30), 2019 года.

Бесплатный доступ

В статье рассмотрена взаимодействие языка программирования C# и среды разработки игр Unity.

Игровое приложение, кроссплатформенность, сross platform

Короткий адрес: https://sciup.org/140285738

IDR: 140285738

Текст научной статьи Создание игрового приложения с использованием среды разработки игр Unity

Для демонстрации средств Unity, создадим игру «Пятнашки».

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

В общем виде табло можно представить в виде таблицы 1.

Таблица 1 Образец табло

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

Таблица 2 – Правильно заполненное табло

РАЗРАБОТКА ПОСТАВЛЕННОЙ ЗАДАЧИ

Описание игры

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

В данном приложении предполагалось создание:

  • -    интуитивно понятного интерфейса;

  • -    минималистичного, но графически точного табло, где происходит переход блоков;

  • -    удобного для пользователя управления.

В приложении использовались следующие разделы C#:

  • -    управляющие структуры (условия, циклы);

  • -    массивы;

  • -    символы и строки;

  • -    работа с файлами и графическими возможностями.

В итоге получилось приложение-игра, в которой использовались возможности языка программирования C#.

Описание решения задачи

Для реализации нашего приложения будем использовать паттерн MVC (Model-View-Controller). Model (модель) предоставляет данные и реагирует на команды контроллера, изменяя своё состояние. View (представление) отвечает за отображение данных модели пользователю, реагируя на изменения модели. Controller (контроллер) интерпретирует действия пользователя, оповещая модель о необходимости изменений.

Нарисуем блок-схему приложения, для более наглядного представления реализации нашего проекта. Блок-схема приложения представлена в соответствии с рисунком 1.

Рисунок 1 – Блок-схема приложения

ПРОЕКТИРОВАНИЕ ИГРОВОГО ПРИЛОЖЕНИЯ

Описание переменных, классов и методов

Логика программы выполнена в среде языка программирования C#. Для реализации графического интерфейса используется среда разработки Unity. Программой обрабатываются события от нажатия клавиш мыши, выбора пунктов меню, а также считывание количества ходов.

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

  • -    основные методы и классы (методы и классы, которые отвечают за саму игру и взаимодействие с пользователем во время игры;

  • -    вспомогательные методы и классы (методы и классы, которые дополняют данное приложение дополнительными функциями и упрощают исходный код программы).

К основным методам и класса относятся:

  • -    game (метод, который инициализирует игру);

  • -    start (метод, который позволяет начать игру);

  • -    shuffle (метод, перемешивающий фишки);

  • -    pressat (метод, позволяющий управлять фишками);

  • -    shift (метод, который позволяет передвигать фишки);

  • -    getdigitat (метод, который позволяет узнать, где какая фишка находится на поле);

  • -    solved (метод, проверяющий правильность решения);

  • -    map (структура, где будет храниться рабочая доска).

К вспомогательным методам и классам относятся:

  • -    coord (структура, которая работает с координатами x и y);

  • -    onboard (метод, который позволяет узнать, попадает ли координата на поле);

  • -    add (метод, изменяющий координату для перемещения);

  • -    set (сеттер, структуры Map);

  • -    get (геттер, структуры Map);

  • -    copy (метод, который копирует координаты куда копируем и то значение откуда).

Проектирование пользовательского интерфейса

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

Рисунок 2 – Предполагаемый интерфейс

РЕАЛИЗАЦИЯ ИГРОВОГО ПРИЛОЖЕНИЯ

Выбор языка программирования и среды разработки

Для реализации игрового приложения воспользуемся языком программирования C#. C# – простой, современный объектно-ориентированный язык программирования. Благодаря множеству нововведений C# обеспечивает возможность быстрой разработки приложений, но при этом сохраняет выразительность и элегантность, присущую языкам C. Для написания кода будем использовать среду разработки Visual Studio 2017.

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

Разработка приложения

Для реализации исходного кода необходимо владеть знаниями языка программирования. Для того чтобы код был читаемым и понятным для остальных желательно разбить программный код на отдельные классы и провести рефакторинг кода. В среде Visual Studio нажмём создать и выберем «Библиотека классов». Создание библиотеки классов представлена в соответствии с рисунком 3.

Рисунок 3 – Выбор библиотеки классов

Далее приступим к написанию исходного кода. Для этого создадим 3 класса: - map (игровое поле);

  • -    coord (координаты поля);

  • -    game (игра).

Структура «Coord» представлена в соответствии с рисунком 4.

struct Coord

{ public int x;

public int уj ссылай: Э I 0 измекгий D авгаро^О изменений public Coord (int x^ int y) { this-x = x;

this.у = у;

} ссылай: 2 I 0 измегси-ий D авторов 0 изменений public Coord (int size)

{ x = size - 1;

у = size - 1;

} ссылай: 2 I 0 изуе-е-ий D авторов О изменений public bool QnBoard(i.nt size)

<

i-F [x < 3 || x > size - 1) return False;

iF (y < 3 || у > size - 1) return False; return true;

  • □!■■: 2 | 0 изуе-е-ий 0 авторов. О изменений

public IEnuierable

For (у = в; у < size; y++)

For (x = 0; x < size; x++) yield return this;

} пзвж 11 Dизменении I О гвтззов, 0 измвнвний public Coord Add(int sx^ int sy) { return new Coord(x + sx^ у + sy);

}

Рисунок 4 – Структура сoord

Структура «Map» представлена в соответствии с рисунком 5.

struct Map int size; int[,] eap;

cneeer 11 Dизменений | 1 авторов, 0 пшниий public Map (int size) < thisL5ize = size;

  • ■ap = new int[size> size]; 1

ссылок: 2 Окзус-е-дй 0 заторов, О изменений public void Set (Coord xy, int value) { i-F [му.OnBoard[Eize)) пар[му.х± xy.y] = value;

ссылок: 3 | Q измекрий U заторов, О именем™ public int Get (Coord xy) { i-F [му .OnBo-ard[size))

return вар[му.хл xy.y];

return 0;

} спевег 11 0 изменений I О авторов, 0 нзмене-тий public void Copy^Cnord fronij Coord to) <

Set [to j Get (-From));

Рисунок 5 – Структура map

Класс «Game» представлен в соответствии с рисунками 6, 7 и 8.

IUD1LC С135 5 US’S ■ int size;

"эр eap;

Coord space;

кылан: 2 | О ил*е-е-лй I D авторов О *■«#■ public int eaves -[ get; private set; } шеи: 11 ОиэмемемиР I О ангороц, D нзмвмший public 6ame(int size)

{ thisbsize = size; ■ap = new Map(size);

} cmeer 11 ОиамЕнвниР I 0 аетэзов, 0 изменмий public void start(int seed = e)

< int digit = B;

-Fore a ch (Coord xy in new Coord() .YieldCoard(size)) ■нр.5е1(ху, ++digit);

space = пен1 Coord[size); if [seed > 6)

5huffle(seed^;

■oves = Э;

шеи: 11 ОиамЕМЕМиР I О зетэзов, D изменший void Shuffle (int seed)

{

Random random = new Randoe(seed);

for (int j = 0; j < seed; j++)

}

Рисунок 6 – Класс game (1)

Рисунок 7 – Класс game (2)

int GetDigitAt(Coord xy)

{

return 0;

I return true;

Рисунок 8 – Класс game (3)

Так как мы создавали не исполняемый файл, а библиотеку классов, то это упростит реализацию паттерна MVC. Мы можем использовать уже ранее созданный «.dll» файл с нашими классами в различных проектах.

Разработка пользовательского интерфейса

Для реализации интерфейса воспользуемся средой разработки Unity. Также воспользуемся нашим макетом приложения. Портретный режим является наиболее удобным для того, чтобы играть в игру «Пятнашки». Для того чтобы создать приложение необходимо в настройках Unity выбрать необходимую платформу для реализации приложения. Выбор соответствующей платформы представлен в соответствии с рисунком 9. Так же добавим ранее созданную библиотеку классов, звуковые эффекты и создадим необходимые скрипты для реализации приложения.

Рисунок 9 – Выбор интересующей платформы

Добавим необходимые элементы на рабочее пространство, а, именно:

  • -    фоновое изображение (картинка, которая будет за плашками);

  • -    кнопки с цифрами (игровые плашки);

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

  • -    текст (в главном меню он является приветственным, а в ходе игры он указывает на количество ходов).

Расположим добавленные элементы в соответствии с нашим макетом. После расположения элементов по полю наше игровое пространство представлено в соответствии с рисунком 10.

Рисунок 10 – Готовое игровое поле

Далее приступим к реализации паттерна MVC. Для этого напишем необходимые методы для связки ранее написанной логики и элементов, которые были добавлены в среде Unity. Необходимые методы представлены в соответствии с рисунками 11 и 12. Данные методы используют возможности как языка программирования, так и средства среды разработки. Для добавления музыки воспользуемся стандартными средствами Unity. Исходный код скрипта «Sound» представлен в соответствии с рисунком 13.

const int size = 4;

Game game;

Sound sound;

public Text TextMoves;

ссылок: 0

void Start () { game = new Game(size);

sound = GetComponent();

HideButtons();

} ссылок: 0

public void OnStart() { game.5tart(20|);

1 ShowButtons();

sound.PlayStart();

)

ссылок: 0

if (game.PressAt(x, y) > 0)

sound.PlayMove();

game.PressAt(Xj y);

! showButtons();

  • 1    1 sound.Play5olved();

}

Рисунок 11 – MainScript (1)

ссылка: 1

void HideButtons()

{ for (int x = 0; x < size; x++)

for (int у = 0; у < size; y++)

5howOigitAt(0, x, y);

.              1

  • •     ссылок: 2

void 5howButtons()

{ for (int x = 0; x < size; x++)

for (int у = 0; у < size; y++)

5howOigitAt(game.GetDigitAt(x,y), x, y);

.                 1

■ ссылок: 2

]; void ShowOigitAt (int digit, int x, int y)

{ string name = x + *" + y;

van text = button.GetComponentlnChildren();

[ ссылка: 1

]! string DecToHex(int digit)

{ if (digit == 0) return *";

1 if (digit < 10) return digit.To5tring();

return ((char)('A' + digit - 10)).To5tring();

: 1

Рисунок 12 – MainScript (2)

using UnityEngine;

ссылок: 2

□public class Sound : MonoBehaviour {

I   AudioSource sound;

;   AudioClip audioMove;

;   AudioClip audioStart;

AudioClip audiosolved;

  • 1     ссылок: 0

E    void start ()

{ sound = GetComponent();

. }

  • ‘ ссылка: 1

В* public void PlayMov€() { sound.PlayOne5hot(audioMove);

.      } ссылка: 1

  • 0    public void Play5tart()|

{ sound.PlayOneShot(audioStart);

  • • ссылка: 1

В; public void Play5olved() { sound.PlayOneShat(audioSolved);

Рисунок 13 – Sound

Тестирование

После реализации нашей задумки необходимо протестировать работу нашего приложения. Для этого необходимо выбрать в пункте «Build Settings» выбрать «Build». После некоторого будет создано наше приложение, которое можно протестировать на устройстве, тестирование приложения представлено на рисунке 14. Игровое поле представлено на рисунке 15. Правильная комбинация представлена в соответствии с рисунком 16.

Рисунок 14 – Приветствие пользователя

Рисунок 15 – Игровое поле

Рисунок 16 – Правильная комбинация

ЗАКЛЮЧЕНИЕ

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

Список литературы Создание игрового приложения с использованием среды разработки игр Unity

  • C sharp - Википедия [Электронный ресурс].- Режим доступа: https://ru.wikipedia.org/wiki/C_Sharp (дата обращения: 15.02.2019)
  • Unity (игровой движок) - Википедия [Электронный ресурс].- Режим доступа: https://ru.wikipedia.org/wiki/Unity_(игровой_движок) (дата обращения: 17.02.2019)
Статья научная