Wack-a-Mole на LabVIEW, частина 2


Продовжуємо розпочату у попередній статті розробку гри Wack-a-Mole на LabVIEW. Основну частину функціоналу гри було вже розроблено попереднього разу, але що ж це за така гра, у якій не можливо програти? Тепер займемося створенням проблем для гравців 🙂

За умовою завдання нам треба зробити так, щоб кожного разу як гравець не встиг “спіймати крота” рахунок зменшувався на 1. Але перед цим я пропоную ще одну каверзу: якщо ви натиснете не на ту нору, де зараз сидить кріт, то рахунок теж зменшиться на 1 – це відіб’є бажання тупо клацати на одному місці і чекати поки прийде кріт. Щоб таке зробити просто змінимо константу “0” у всіх станах структури event, що відповідають за обробку натискання на картинку нори на “-1” (особливо жорстокі можуть навіть замінити на “-2”).

Тепер перейдемо до зменшення рахунку за таймером. Щоб не винаходити колесо, я просто вирішив використати функцію Timeout, яка підтримується структурою event – слід просто вказати період часу (у мілісекундах), після кожного проходження якого автоматично виконуватиметься відповідний обробник події. У зв’язку з цим штучну затримку у програмі тепер можна забрати.

Wack-a-Mole на LabVIEW

Wack-a-Mole на LabVIEW

Що ще залишилося? Зменшення тривалості затримки на 20% при досягненні гравцем рахунку у 20 балів. Тут, щоправда, в умові не вказано ані початкову тривалість таймауту, ані те, чи треба зменшувати його при досягненні 40, 60, 80 і т.д. балів. І що робити як рахунок досягне 20, а потім знову опуститься до 19? У випадку комерційного проекту, за який замовник платить гроші, такі речі треба обов’язково уточняти, щоб не вийшло “я це уявляв собі не так” або “отут треба трішечки переробити”, але ми тут працюємо задля власного задоволення, тому і ТЗ сформулюємо самі 😉

Wack-a-Mole на LabVIEW - подія "Таймаут"

Wack-a-Mole на LabVIEW - подія "Таймаут"

Я вирішив, що за кожні 20 балів рахунку таймаут зменшуватиметься на 200 мілісекунд (таким чином до 20 балів він рівний 1000 мс., від 21 до 40 – 800 мс, від 41 до 60 – 600 мс, від 61 до 80 – 400 мс і від 81 і далі – 200 мс.) і при зменшенні рахунку нижче порогового значення повертатиметься до свого попереднього рівня. Реалізовано все це через структуру case і ще один зсувний регістр.

Wack-a-Mole на LabVIEW : блок-діаграма

Wack-a-Mole на LabVIEW : блок-діаграма

Нарешті, для підрахунку часу, що пройшов з початку гри, я використав 2 інструменти Tick Count: перший зчитує системний таймер у момент старту програми (перед запуском циклу), а другий – при кожній ітерації. Далі шукаємо різницю показів і ділимо її на 1000, щоб отримати величину, виражену у секундах. Це зовсім не найкращий варіант, оскільки він не надто точний, але для такого завдання як гра можна собі дозволити невеличку похибку.

Wack-a-Mole на LabVIEW : інтерфейс користувача

Wack-a-Mole на LabVIEW : інтерфейс користувача

Наостанок сама гра у вигляді VI для LabVIEW 7.1 та скріншот трохи підрихтованого юзер-інтерфейсу.

Почитайте ще оце:

Залиште коментар

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *