Введение
В данной статье будет рассматриваться актуальность и выгода выбора ассемблера в качестве языка, используемого для проектирования и разработки игровой модели одной из популярнейших игр - «Пятнашки». «Пятнашки» — популярная головоломка, придуманная в 1878 году Ноем Чепмэном. Представляет собой набор одинаковых квадратных костяшек с нанесёнными числами, заключённых в квадратную коробку. Длина стороны коробки в четыре раза больше длины стороны костяшек для набора из 15 элементов, соответственно в коробке остаётся незаполненным одно квадратное поле. Цель игры — перемещая костяшки по коробке, добиться упорядочивания их по номерам, желательно сделав как можно меньше перемещений.
Почему для разработки был выбран ассемблер?
Как известно, ассемблер считается самым быстрым (в плане выполнения команд) языком программирования, так какассемблер максимально приближен к машинному коду, его команды затрачивают меньше ресурсов, чем в таких языках как С++, JavaScript, Python и т.д. Так же преобразование низкоуровневого языка программирования в машинный код происходит гораздо быстрее, высокоуровневого языка программирования.
Визуальная реализация
Для максимальной скорости выполнения программы визуальная модель игры реализована в качестве консольного приложения. Возможная сложность заключается лишь в том, что при каждой смене положения костяшек по коробке требуется выводить данные коробки в консоль заново, но это происходит настолько быстро, что не заметно человеческому глазу.
Рис. 1. Запущенная игра
Управление
Управление осуществляется клавишами W, A, S, D, так как это самые популярные в мире клавиши по перемещению вверх, вниз, влево, вправо. Выход из игры происходит нажатием клавиши ESC.
Хранение данных
Для хранения данных берется 35 однобайтовых ячеек памяти, они сформированы в одномерный массив. В процессе моделирования данной игры этот одномерный массив был представлен в качестве двумерного.
Рис. 2. Модель хранения данных
Функции перемещения костяшек по коробке
Выше видно, что выделено 19 ячеек с 0, их можно посчитать лишними, но они выделены для максимально быстрых функций перемещения костяшек по коробке, используя минимальное количество условий. Так как на каждую ячейку выделен один байт памяти, то перемещение костяшек осуществляется смещением на +1, -1, +6, -6. Если при проверке числа в ячейке мы не попадаем на 0, то осуществляем перемещение. При таких составляющих мы выполняем всего лишь одну команду сравнения, что очень ускоряет выполнение программы игры.
Рис. 3. Пример одной из функций перемещения
Функция вывода результатов в консоль
Вывод результатов в консоль осуществляется посимвольно. Эта функция самая большая по количеству выполняемых команд, их количество которых ~550.
Функция проверки победы
Функция проверки победы осуществлена максимально продуктивно, используя минимальное количество команд проверки условия. Сначала проверяем ячейку со смещением +7, если там 1, проверяем дальше ячейку +8, если там 2, то дальше и т.д. до ячейки со смещением +27, если какое-то условие не выполняется, возвращаемся к вводу следующего перемещения костяшек.
Заключение
В данной работе была рассмотрена тема преимущества использования ассемблера в проектировании и разработке игровой модели на данном языке программирования. Так как команды ассемблера выполняются гораздо быстрее команд высокоуровневых языков программирования, то рассмотренные функции и другие составляющие программы игры, реализованные на ассемблере имеют преимущество их же реализации на других языках, поэтому проектирование и разработка игровой модели на ассемблере актуальна до сих пор, конкурируя с проектированием и разработкой игровых моделей на других языках программирования.
Библиографический список
Шаманаев И.Р. Использование Ассемблера на примере одной игры [Электронный ресурс] / И.Р. Шаманаев, О.Ф. Абрамова // Студенческий научный форум – 2019 : доклады XI международной студенческой электронной научной конференции. Направление «Технические науки» (секция «Актуальные проблемы компьютерной визуализации») / РАЕ. - Москва, 2019. - Режим доступа : https://scienceforum.ru/2019/forum.
Лукин Д.Р. Использование вставок на Assembler в разработке компьютерных игр [Электронный ресурс] / Д.Р. Лукин, О.Ф. Абрамова // Студенческий научный форум – 2019 : доклады XI международной студенческой электронной научной конференции. Направление «Технические науки» (секция «Актуальные проблемы компьютерной визуализации») / РАЕ. - Москва, 2019. - Режим доступа : https://scienceforum.ru/2019/forum.
Лясин Д.Н. Объектно-ориентированный анализ и реализация программной системы на примере разработки компьютерной игры [Электронный ресурс]: учеб. пособие / Д.Н. Лясин, О.Ф. Абрамова; ВПИ (филиал) ВолгГТУ. - Волгоград, 2017. - 1 электрон. опт. диск (CD-ROM). - 103 с.
Мозговой М. В. Занимательное программирование: Самоучитель. — СПб.: Питер, 2005. — 208 с. — ISBN 5-94723-853-5.
Гарднер М. Математические досуги / Пер. с англ. Ю. А. Данилова. Под ред. Я. А. Смородинского. — М.: Мир, 1972.