Аналог игры Wack-a-mole на LabVIEW

в 18:30, , рубрики: Без рубрики, метки:

Статей по тематике LabVIEW на хабре довольно немного (скорее всего в виду использования этой среды). Не так давно меня попросили сделать на LabVIEW упрощенный аналог игрушки «wack-a-mole» и я решил поделиться своим творчеством на хабре. Использовать я буду LabVIEW версии 7.1 — старой, но зато простой.
Аналог игры Wack a mole на LabVIEW
Змейка же есть уже тут, так почему бы не быть еще и кротам? Суть игры (которая изначально существовала в виде механических игровых автоматов) проста — на игровом поле расположены «норы» из одной из которых на некоторое время появляется голова «крота», по которой игрок должен успеть ударить специальным молотком.

Требования к игре

Сформировать игровое поле, состоящее из 4 объектов 2D-picture одинакового цвета. После нажатия кнопки «Start» один из этих объектов, выбранный случайным образом, подсвечивается и остается подсвеченным некоторое время t. В течение этого времени пользователь имеет возможность щелкнуть на нем мышью. Если пользователь успел это сделать, то его счет (S) увеличивается на 2, если нет — то уменьшается на 1 (в начале игры S = 10). Также счет уменьшается на 1 при нажатии на «нору», в которой на данный момент «крот» отсутствует.
При истечении интервала времени t случайным образом подсвечивается следующий случайно выбранный объект. Если счет пользователя достиг 20, величина t уменьшается на 20%. Игра продолжается, пока счет S не достигнет нуля.
Во время выполнения программы на передней панели отображаются текущие значения S, t и время, прошедшее с начала выполнения программы.

Интерфейс игры

Интерфейс игры состоит из, собственно, картинок (2D-picture), одной кнопки и нескольких индикаторов для отображения счета, таймаута (времени, спустя которое «крот» сменит свою дислокацию) в миллисекундах и отсчета времени с момента начала игры в секундах. Также я использовал пару рамок для визуального разделения игрового поля и индикаторов. В роли «крота» используется картинка со злым смайликом, которая загружается из файла.

Блок-диаграмма игры

На первом этапе разработки создадим самого «крота» и научим его перемещаться между «норами».
Аналог игры Wack a mole на LabVIEW
Для загрузки изображения в 2D-picture необходимо сначала считать его bycnhevtynjv Read JPEG File, а затем использовать Draw Flattened Pixmap, на выходе которого уже получим массив пикселей для загрузки в 2D-picture. В принципе, можно нарисовать крота и программно — с помощью графических примитивов (линии, окружности, прямоугольники и т.д.). Структура Case служит для того, чтобы вывести крота на один индикатор, а на все остальные подать «пустую картинку» с константы.
Аналог игры Wack a mole на LabVIEW
Для обработки нажатий на картинки используется Event Structure, в которой номер «норы», полученный от генератора случайных чисел, сравнивается с константой и затем принимается решение об изменении счета. Также эта структура обрабатывает и таймаут (пользователь не успел нажать на картинку). На данном этапе величина таймаута принята равной 1000 миллисекунд и внесена в константу.

На втором этапе в блок-диаграмму добавляем изменение величины таймаута в зависимости от счета. Поскольку в условии не указано каким именно образом нужно это делать, то я решил, что скорость перемещения «крота» будет меняться от 1000 до 200 миллисекунд (с шагом в 200 миллисекунд) каждые 20 очков счета. Чтобы играть было проще, скорость уменьшается при уменьшении счета, так что эту возможность я тоже реализовал через Case Structure. Значения счета игры и текущего таймаута передаются между итерациями цикла через Shift Registers.
Аналог игры Wack a mole на LabVIEW
Наконец, для подсчета времени, прошедшего с начала игры, я использовал 2 инструмента Tick Count: первый считывает системный таймер в момент старта программы (перед запуском цикла), а второй — при каждой итерации. Далее ищем разницу показаний и делим ее на 1000, чтобы получить величину времени, выраженную в секундах. Это не слишком точный вариант, но для такой задачи как игра можно себе позволить небольшую погрешность.

Итоги

Конечно, LabVIEW — не лучший инструмент для разработки игровых приложений, но для таких небольших игрушек его вполне можно использовать.
Исходник игры

Автор: akceptor

Источник


  1. Саша:

    Здравствуйте! Можно ли как-то получить исходный код этого прибора?)

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js