Оглавление:

Сапер: 5 шагов (с изображениями)
Сапер: 5 шагов (с изображениями)

Видео: Сапер: 5 шагов (с изображениями)

Видео: Сапер: 5 шагов (с изображениями)
Видео: Как играть в Сапера 2024, Ноябрь
Anonim
Тральщик
Тральщик

Для нашего финального проекта CPE 133 мы с Чейзом решили создать игру «Сапер», в которой использовались бы кнопки и переключатели ввода с платы Basys-3, а также код VHDL. Лучшим названием для игры вполне могло бы быть «Русская рулетка», однако мы хотели использовать более понятное для всей семьи название. В игре пользователь нажимает среднюю кнопку на доске Basys, чтобы случайным образом назначить один из 16 переключателей «активным» с бомбой. Затем два игрока по очереди по очереди поднимают переключатели, пока один из игроков не щелкнет переключателем с помощью «бомбы». Когда это происходит, семисегментный дисплей предупреждает игроков о том, что этот игрок только что проиграл игру.

Шаг 1. Обзор

В проекте использовалось множество модулей VHDL, которые мы использовали в течение этого квартала. Четырехбитный счетчик использовался вместе с фронтом тактового сигнала, чтобы имитировать случайное четырехбитное число для активации одного из переключателей. Диаграмма состояний также использовалась для вывода различных слов на семисегментный дисплей, от «ИГРАТЬ», когда игроки находятся в середине своей игры, до «ПРОИГРЫВАТЬ», когда один из игроков щелкнул активным переключателем.

Шаг 2: материалы

  • Совет по разработке Basys3 от Digilent, Inc.
  • Vivado Design Suite BC_DEC.vhd (Этот файл был предоставлен нам на Polylearn и написан Брайаном Мили)
  • 4-битный счетчик из T-образных триггеров
  • Автомат

Шаг 3: создание игры

Создание игры
Создание игры
Создание игры
Создание игры

Первым шагом к созданию этой игры было построение принципиальной схемы со всеми компонентами, которые мы будем использовать. Входами для этой системы были кнопка 1, 16 переключателей и часы. Выходами были семисегментный дисплей и аноды. После рисования принципиальной схемы мы написали отдельные исходные файлы для каждого компонента в Vivado и собрали их вместе, используя карты портов в основном исходном файле.

Вся основа игры вращается вокруг случайного назначения одного из 16 переключателей активным с бомбой, и чтобы игроки не знали, какой переключатель активен, пока этот активный переключатель не будет включен. Мы изучили генераторы случайных и псевдослучайных чисел в Интернете, но в конце концов решили, что использование 4-битного счетчика и назначение соответствующего переключателя активным является достаточно случайным для того, что мы искали. Мы смогли перепрофилировать наш 4-битный счетчик, который мы создали в предыдущем проекте, чтобы он мог работать для этого задания. Мы использовали счетчик для создания случайного числа от 0 до 15; затем в компоненте main1 мы присвоили десятичный эквивалент случайного числа соответствующему переключателю на плате. Как видно на схеме, как выход X («активная бомба») от компонента main1, так и переключатели, которые включают игроки, переходят к FSM1. Конечный автомат выводит однобитовое значение Z, которое затем считывается BC_DEC1. Используемый нами конечный автомат имеет два разных состояния: в состоянии A семисегментный дисплей выводит «PLAY», и автомат остается в этом состоянии до тех пор, пока не обнаружит, что активированный переключатель перевернут. Как только это происходит, конечный автомат переходит в состояние B, где он выводит «LOSE» на семисегментный дисплей и остается в этом состоянии до тех пор, пока все 16 переключателей не перейдут в «0». Когда это условие выполнено, автомат снова переходит в состояние A и ожидает, что игроки начнут новую игру. Диаграмма Мура, помогающая понять этот автомат, показана выше.

Шаг 4: Будущие модификации

Несколько модификаций, которые мы планировали внести в нашу игру, включают добавление большего количества бомб на поле (возможно, увеличение с одной до трех), добавление счетчика очков и нескольких раундов. В конечном итоге мы отказались от этих улучшений, так как обнаружили, что играть в более продолжительную и расширенную игру обычно было более напряженно и, в конце концов, веселее, чем в игре, которая обычно заканчивалась после трех или четырех переключений.

Шаг 5: Заключение

Мы были очень довольны конечным результатом этого проекта; не только потому, что в финальную версию игры было интересно играть, но и потому, что создание и программирование проекта потребовали от нас использовать большую часть, если не все, что мы узнали в этом квартале. Мы использовали триггеры, счетчики, конечные автоматы, часы, ввод данных пользователем с платы и вывод на семисегментный дисплей.

Мы также узнали, как несколько синтаксических ошибок могут полностью нарушить работу программы (даже если они будут считаться нормальными на других языках программирования, таких как Python или Java), и это только после нескольких симуляций и нескольких итераций кода, загруженного и проверенного на доска, сможете ли вы, наконец, избавиться от всех ошибок в своем коде.

Рекомендуемые: