Оглавление:
- Шаг 1. Обзор
- Шаг 2: материалы
- Шаг 3: создание игры
- Шаг 4: Отображение результата
- Шаг 5: Собираем все вместе
- Шаг 6: Будущие модификации
- Шаг 7: Заключение
Видео: FPGA Asteroid Game: 7 шагов (с изображениями)
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:53
Для нашего финального проекта CPE 133 мы решили создать игру с астероидами на нашей ПЛИС, используя два кнопочных переключателя и 7-сегментный дисплей. Игра работает так, что астероид появляется в одном из трех случайно выбранных рядов и летит к кораблю с другой стороны 7-сегментного дисплея. Верхнюю и нижнюю кнопки можно использовать, чтобы убрать ваш корабль с пути астероида. В случае неудачи на дисплее на мгновение отображается «BAnG», а затем игра быстро перезапускается, чтобы пользователь мог повторить попытку. Далее следует краткое описание того, как был создан проект, чтобы любой пользователь мог воспроизвести или улучшить наш дизайн.
Шаг 1. Обзор
Проект в основном состоит из конечных автоматов (FSM), которые используют логику для передачи FPGA между состояниями, которые хранят и отображают различные значения положения корабля и скалы. Двумя основными модулями являются игровые конечные автоматы для скалы и корабля и конечные автоматы декодера двоичного изображения в 7-сегментный дисплей, которые объединены вместе с использованием очень простой структурной модели в VHDL.
Были созданы конечные автоматы для положения корабля, скалы и 7-сегментного декодера. Назначение FSM корабля состоит в том, чтобы корабль мог перемещаться в правильное положение, когда игрок нажимает кнопку вверх или вниз. FSM необходим, потому что он должен помнить, в какой позиции он был последним, чтобы перейти в правильную позицию.
Цель FSM камня - переместить камень в правильное положение в зависимости от того, в каком ряду он находится, и последней позиции в этом ряду. Кроме того, он отслеживает позицию модуля, который будет отображать его, и псевдослучайно выбирает новую строку, которая появится следующей.
FSM для 7-сегментного декодера дисплея использовался не только для отображения корабля и скалы, но и для отображения «BAnG», когда положение корабля и положение скалы совпадают.
Шаг 2: материалы
В проекте использовались следующие материалы:
- Совет по разработке Basys3 от Digilent, Inc.
- Дизайнерский люкс Vivado
- sseg_dec.vhd (Этот файл был предоставлен нам на Polylearn и был написан Брайаном Мили)
- Clk_div.vhd (Этот файл был предоставлен нам на Polylearn и был написан Брайаном Мили)
- Три конечных автомата (FSM)
Шаг 3: создание игры
Игровой модуль был создан с использованием поведенческого моделирования для описания состояний корабля и камня для их собственных конечных автоматов. Преимущество этого состоит в том, что гораздо проще моделировать поведение схемы, описывая то, что она делает, а не выяснять все компоненты, необходимые для проектирования оборудования.
Состояния горных пород были выполнены с использованием генератора псевдослучайных чисел для первой позиции породы. Для этого мы дали генератору собственные часы, которые были чрезвычайно быстрыми по сравнению со скоростью игры. На каждом нарастающем фронте трехбитовое число увеличивается, и все его значения соответствуют одному из трех начальных состояний корабля. Таким образом, три значения соответствуют позиции 3 (верхний правый), три соответствуют позиции 7 (центр) и два соответствуют позиции 11 (нижний правый угол).
После того, как произошло случайное генерирование и астероиду было присвоено начальное состояние, он беспрерывно движется в горизонтальном направлении к кораблю.
0 ← 1 ← 2 ← 3
4 ← 5 ← 6 ← 7
11 ← 10 ← 9 ← 8
Часы, используемые для логики следующего состояния камня, контролируют скорость игры; методом проб и ошибок мы обнаружили, что 9999999 - хорошее значение для максимального числа.
Логика корабля работает путем инициализации в центральном положении (положение 4) на крайней левой стороне. Если нажата верхняя или нижняя кнопка, корабль будет перемещаться вверх и вниз в положение 0 и 11, соответствующее нажатой кнопке.
Чтобы движение корабля было приятным для пользователя, мы не сделали его движение асинхронным. Мы использовали часы для изменения его состояния, и мы использовали максимальное количество 5555555.
Шаг 4: Отображение результата
Двоичный семисегментный декодер принимает 4-битные переменные положения для корабля и астероида и отображает соответствующее изображение (либо корабль и камень, либо сообщение «BAnG»).
Для этого сначала проверяется, равны ли они, а затем отображается сообщение «BAnG», если проверка вернула истину.
Если он не вернет истину, декодер отобразит корабль и камень, переключаясь между ними на очень высокой тактовой частоте и обманывая глаз, заставляя их видеть их так, как будто они отображаются одновременно.
Шаг 5: Собираем все вместе
Мы объединили конечный автомат корабля и камня в один большой автомат, который мы подключили к конечному автомату дисплея. Входами в игру являются кнопка «вверх» и «вниз» на плате BASYS3 и системные часы. Выходами являются сегментный и анодный векторы семисегментного дисплея.
Эти входы и выходы будут видны в файле ограничений, где они сопоставлены с портами.
Шаг 6: Будущие модификации
В будущем добавление в проект дополнительных функций движения кораблей станет улучшением. Этого можно достичь, просто введя еще 2 кнопки и позволив кораблю принимать положения (состояния), отличные от 0, 4 и 8. Другой возможной модификацией может быть контроль времени следующего состояния астероида, чтобы он начинал медленно и увеличивал скорость на В 1,5 раза каждый раз, когда он промахивается по кораблю, пока не получит попадание, после чего перезапустится и снова станет медленным. Это увеличило бы сложность игры и сделало бы ее более интересной для пользователя, если бы она была реализована, и это можно было бы сделать, создав переменную для максимального количества часов следующего состояния камня, умножая эту переменную на 1,5 каждый раз, когда астероид не работает. 't hit, и сбрасывая его на начальное значение каждый раз, когда камень ударяется.
Шаг 7: Заключение
Этот проект помог нам лучше понять конечные автоматы, часы и интерактивное отображение на семисегментных дисплеях.
Самая большая особенность конечных автоматов - это то, что важно знать (помнить), в каком состоянии вы сейчас находитесь, чтобы перейти к следующему желаемому состоянию. Как ни странно, хороший жизненный совет; вы должны знать, где вы, чтобы знать, куда вы идете.
Управляя различными экземплярами часов, мы могли случайным образом генерировать числа, перемещать камень в следующую позицию и управлять отображением корабля, камня и сообщения об окончании игры.
Мы узнали, что нельзя отображать более одного анода одновременно. В данном нам модуле использовано то преимущество, что человеческий глаз может видеть разницу только до определенной частоты. Поэтому была выбрана более высокая частота переключения анодов. Корабль и скала, которые видны одновременно, на самом деле являются намеком, поскольку каждый отображается отдельно, но очень быстро. Эта концепция была применена для отображения движения корабля, скалы и сообщения «BAnG».
Рекомендуемые:
Восстановление Game Boy или подобной электроники: 7 шагов (с изображениями)
Восстановите Game Boy или подобную электронику: Прежде всего, спасибо, что ознакомились с моим руководством! Во-вторых, я много времени уделяю видео на YouTube, так что посмотрите его тоже, он все объясняет. Видео:
Как установить управляемую переднюю подсветку AGS-001 в оригинальный Game Boy Advance (без LOCA!): 5 шагов (с изображениями)
Как установить управляемую переднюю подсветку AGS-001 в оригинальный Game Boy Advance (без LOCA!): Вы хотите осветить экран своего старого Game Boy Advance. Вы нигде не найдете эти новомодные комплекты IPS с подсветкой, а старые комплекты AGS-101 отсутствуют в наличии или по завышенной цене. Кроме того, вы хотите, чтобы экран был виден на улице
LED Rocker Game: 7 шагов (с изображениями)
LED Rocker Game: LED Rocker Game - это простая игра для Arduino. В основном он состоит из 9 светодиодов (8 синих светодиодов и 1 красный светодиод посередине), 1 кнопки, 1 динамика и 1 ЖК-панели. Цель этой игры - нажать кнопку, когда мигает красный светодиод. Начинается с того, что мигают 9 светодиодов
Aruduino LED Game Fast Clicking Two Player Game: 8 шагов
Aruduino LED Game Игра для двух игроков с быстрым щелчком: этот проект вдохновлен @HassonAlkeim. Если вы хотите глубже изучить, вот ссылка, которую вы можете проверить https://www.instructables.com/id/Arduino-Two-Player-Fast-Button-Clicking-Game/. Эта игра является улучшенной версией Alkeim's. Это
Arduino как дешевый макет FPGA: 5 шагов (с изображениями)
Arduino как дешевый макет FPGA: проектирование аппаратных логических схем может быть увлекательным занятием. Старый школьный способ сделать это заключался в использовании логических элементов NAND на макетной плате, соединенных перемычками. Это все еще возможно, но это не займет много времени, прежде чем количество ворот выйдет из-под контроля. Более новый opti