Корзина

0 Товары - 0.00 RUB
В корзину

Курсы Валют

Курсы Валют  Дата ЦБ
Нал.USD
23.11 59.01
Нал.EUR
23.11 69.40
Нал.CNY
23.11 89.18

Оплата

visa

Реклама

Блог

Клон игры Super Hexagon на FPGA.

Super Hexagon — инди-игра в жанре Action, разработанная Терри Кавана. В Super Hexagon игроку предстоит управлять небольшим треугольником, который может вращаться вокруг центрального шестиугольника (англ. Hexagon). Целью игры является избежания контакта треугольника с надвигающимися «стенами». Если игрок сталкивается с передней стороной одной из этих стен (касания боковых сторон разрешены), то игра заканчивается. После того, как игрок проиграет, ему покажут его время выживания за последнюю попытку, а также его лучшее время на этом уровне. Все рекорды отслеживаются на доске лидеров, на которой игроки могут просматривать рекорды своих друзей и мировые рекорды. У игры есть шесть уровней сложности: набор «нормальных» режимов — Hexagon, Hexagoner и Hexagonest — и набор «гипер»-версий предыдущих уровней, которые открываются после 60 секунд выживания в «нормальных» режимах.

Месторасположение стен различается на каждом уровне сложности. Стены закручены в «рукава» (секции повторяющихся стен), которые различаются при каждой попытке прохождения, заставляя игрока изучать как пройти каждый рукав, а не уровень целиком. «Гипер»-версии нормальных уровней содержат похожие рукава с небольшими вариациями, но рукава появляются быстрее, чем на обычных уровнях. Завершением игры считается выживание в течение 60 секунд на уровнях Hexagonest (нормальная концовка) или Hyper Hexagonest («настоящая» концовка). За завершение каждого уровня предусмотрены достижения в Steam, Game Center и Google Play Игры.

На ресурсе hackaday.io была найдена реализация этой замечательной игры. Мы конечно же незамедлительно решили перенести этот проект, на нашу плату VE-EP4CE10E.

Ядром всего проекта является модуль драйвера VGA. Это та часть дизайна , которая в конечном итоге будет отображать графику на экране. Для получения данные на экране был выбран конвейерный подход для расчета пикселей. На каждом пиксельклоке модуль драйвера VGA выводит координату x/y. Каждая координата затем проходит по конвейеру и обрабатывается до тех пор, пока цвет RGB не появится на выходе конвеера. Этот цвет затем подается обратно в модуль драйвера VGA. Ниже представлена упрощенная блок-схема:

pic1

Проблема, с которой я столкнулся во время разработки, заключалась в поиске способа, позволяющего убить игрока при столкновении с передней стеной, но все же позволяющего игроку перемещаться в стороны. Решение было достигнуто путем хранения старых и новых координат игрока. Если новая координата сталкивается, а старая нет, то позиция игрока возвращается к прежним координатам. Эта логика столкновения была встроена в основной игровой автомат:

pic2

Еще одна интересная часть проекта (Все было интересно!) это конвеер стен. В настоящее время активные стены хранятся в массиве 6bitx128 в оперативной памяти. Два указателя индексируют этот массив, один для того, чтобы стены двигались внутрь к игроку, а другой для того, чтобы обновлять стены новыми, когда они выходят из экрана. Новые стены будут получены (псевдо)случайным образом из набора из 16 предопределенных шаблонов. Пример такого шаблона приведен ниже:

Verilog Code:
  1. walls_maze[0] = 6'b011111;
  2. walls_maze[1] = 6'b000000;
  3. walls_maze[2] = 6'b101111;
  4. walls_maze[3] = 6'b000000;
  5. walls_maze[4] = 6'b110111;
  6. walls_maze[5] = 6'b000000;
  7. walls_maze[6] = 6'b111011;
  8. walls_maze[7] = 6'b000000;
  9. walls_maze[8] = 6'b111101;
  10. walls_maze[9] = 6'b000000;
  11. walls_maze[10] = 6'b111110;
  12. walls_maze[11] = 6'b000000;
  13. walls_maze[12] = 6'b011111;
  14. walls_maze[13] = 6'b000000;
  15. walls_maze[14] = 6'b101111;
  16. walls_maze[15] = 6'b000000;

После того, как мы разобрались со стенами и игроком на месте, единственное, что осталось добавить сумасшедшее вращение и мигающие цвета, чтобы отвлечь игрока. Вращение было достигнут путем поворота начальных координаты X и Y путем умножения на SIN и COS. Изменение цвета осуществляется простым поиском в массив предопределенных цветов, основанных на том, присутствует ли стена, игрок или фон на каком-либо конкретном пикселе. Есть в общей сложности 4 цветовые схемы, которые меняются каждый раз, когда вращение становится немного быстрее.

Результат показан на следующем видео:

Проект игры Super Hexagon: SuperHexagonFPGA.zip

Перевод

Вход

Или классический вход:

Время

Карта сайта Визуальная электроника