Распознавание жестов, или как я стал призером GitHubGameOff
Для желающих сразу пощупать игру своими пальцами ее можно:
1. скачать на Google Play
2. поиграть на itch
3. посмотреть на GitHub
На разработку собственной системы распознавания жестов меня натолкнул doodle от google на хеллоуин 2016. Достать код распознавания жестов оттуда не получилось, поэтому я решил притворится веломастером и сделать свой велосипед.
Для распознавания жеста нужно решить две задачи:
1. отбросить избыточные данные пользовательского ввода
2. на основе полученных данных угадать, что же хотел нарисовать пользователь
Для решения первой задачи я сначала хотел использовать библиотеку paper.js. Она умеет превращать набор точек в ломанаю линию или кривую Безье. Но она требует для своей работы дополнительный canvas и возвращает результат в крайне замысловатой структуре, поэтому от нее пришлось отказатся. К счастью, добрые люди давно выложили код функции для отбрасывания "ненужных" элементов с массива точек (установка погрешности около 10 позволяет получить вполне приличные результаты).
Следующий шаг - определить, на какую фигуру похожи наши точки. Умные люди с Вашингтонского университета разработали для этого библиотеки $1 и $p (для фигур с одной и нескольких линий соответсвенно), используя метод "тучи точек". Но, как показали опыты, библиотека оказалась слишком безотказной - она не умеет определять, что жест не похож ни на один из шаблонов.
Я решил использовать более простой, но весьма эффективный метод. Программа абстрагируется от реальных координат точек и запоминает только направление движения (-1, 0, 1 по вертикали и горизонтали); если два соседних направления одинаковы, то второе отбрасывается. Уже на основании этих направлений и подготовленных шаблонов программа решает, что за жест был нарисован.
Увидев пост о начале GitHubGameOff, я решил попытать судьбу и принять участие. Т.к. тема соревнования - throwback, я решил пересмотреть геймплей PAC-MAN и адаптировать его под распознавание жестов. Единственным рабочим вариантом было следующее размещение персонажей - протагонист стоит в центре, а враги приближаются от краев экрана. Но у Пакмана нет анимации спокойствия, поэтому было принято решение перевернуть игру с ног на голову - Блинки стал протагонистом, а Пакман - антагонистом.
Игру оценили вполне положительно: среди 209 игр она заняла 3-е место в категории Геймплей, 10-е в категории Инновационность и 20-е за общее впечатление.
Спасибо за внимание) Буду рад услышать отзывы и предложения
Идея и реализация отличные, главное, что интуитивно всё понятно сразу же становится.
Понятно, что это забава на 5 минут, но залипательно весьма :)
Без гифки ваще непонятно о чём речь
а где ссылочка на гитхаб ?)