Mündəricat:

Mayın tarama gəmisi: 5 addım (şəkillərlə)
Mayın tarama gəmisi: 5 addım (şəkillərlə)

Video: Mayın tarama gəmisi: 5 addım (şəkillərlə)

Video: Mayın tarama gəmisi: 5 addım (şəkillərlə)
Video: Pərdə arxası #2 - Fahişə həyatı - uşaqlar baxmasın 2024, Iyul
Anonim
Minaaxtaran
Minaaxtaran

CPE 133 son layihəmiz üçün, Chase və mən düyməni istifadə edərək Basys-3 lövhəsindən girişi və VHDL kodunu istifadə edən 'Minesweeper' oyunu yaratmağa qərar verdik. Oyun üçün daha yaxşı bir ad 'Rus ruleti' ola bilər, amma daha çox ailə dostu bir adla getmək istədik. Oyun, istifadəçinin Basys lövhəsindəki orta düyməni basaraq təsadüfi olaraq 16 açardan birini bomba ilə 'aktiv' təyin etməsini nəzərdə tutur. Daha sonra iki oyunçu növbə ilə açarları çevirir, oyunçulardan biri "bomba" ilə açarı çevirənə qədər. Bu baş verdikdə, yeddi seqmentli ekran oyunçulara o oyunçunun oyunu yenicə uduzduğunu bildirir.

Addım 1: Baxış

Layihə, bu rüb ərzində istifadə etdiyimiz bir çox VHDL modulundan istifadə etdi. Açarlardan birini aktivləşdirmək üçün təsadüfi dörd bitli bir rəqəmi simulyasiya etmək üçün saat kənarları ilə birlikdə dörd bit sayğacı istifadə edilmişdir. Yeddi seqmentli ekrana fərqli sözlər çıxarmaq üçün bir vəziyyət diaqramı da istifadə edildi, oyunçular oyunun ortasında 'PLAY' dan oyunçulardan biri aktiv açarı çevirdikdə 'LOSE' ə qədər.

Addım 2: Materiallar

  • Digilent, Inc -dən Basys3 İnkişaf Şurası
  • Vivado Design Suite BC_DEC.vhd (Bu fayl bizə Polylearn -da verilmiş və Bryan Mealy tərəfindən yazılmışdır)
  • T flip floplardan hazırlanmış 4 bitlik sayğac
  • Bir FSM

Addım 3: Oyunun hazırlanması

Oyunun hazırlanması
Oyunun hazırlanması
Oyunun hazırlanması
Oyunun hazırlanması

Bu oyunu etmək üçün ilk addım, istifadə edəcəyimiz bütün komponentləri olan bir dövrə diaqramı çəkmək idi. Bu sistemin girişləri düymə 1, 16 açar və Saat idi. Çıxışlar yeddi seqmentli ekran və anodlar idi. Dövrə diaqramını çəkdikdən sonra Vivadoda hər bir komponent üçün fərdi mənbə faylları yazdıq və əsas mənbə faylının altından liman xəritələri istifadə edərək bir araya gətirdik.

Oyunun bütün əsası təsadüfi olaraq 16 açarlardan birinə bomba ilə aktiv olmaq və oyunçuların bu açar açılana qədər hansı açarın aktiv olduğunu bilməməsi ilə bağlıdır. Təsadüfi və yalançı təsadüfi ədəd generatorlarına baxdıq, amma nəticədə qərar verdik ki, 4 bitlik sayğacdan istifadə edərək müvafiq açarın aktiv olmasını təyin etdiyimiz şey üçün kifayət qədər təsadüfi olur. Bu tapşırıq üçün işləyə bilmək üçün əvvəlki bir layihədə yaratdığımız 4 bitlik sayğacımızı yenidən təyin edə bildik. 0-15 arasında təsadüfi bir ədəd yaratmaq üçün sayğacdan istifadə etdik; sonra main1 komponentində, lövhədəki müvafiq açarına təsadüfi ədədin ondalık ekvivalentini təyin etdik. Şemada göründüyü kimi, main1 komponentindən həm X çıxışı ("aktiv bomba"), həm də oyunçuların açarları FSM1 -ə keçir. Dövlət maşını bir az Z dəyəri çıxarır, sonra BC_DEC1 tərəfindən oxunur. İstifadə etdiyimiz sonlu vəziyyət maşınının iki fərqli vəziyyəti var: A vəziyyətində yeddi seqmentli ekran 'PLAY' çıxır və maşın aktivləşdirilmiş açarın çevrildiyini qəbul edənə qədər həmin vəziyyətdə qalır. Bu baş verdikdən sonra, FSM yeddi seqment ekranına 'LOSE' çıxardığı B vəziyyətinə keçir və bütün 16 açar '0' a çevrilənə qədər bu vəziyyətdə qalır. Bu şərt yerinə yetirildikdə, FSM daha sonra A vəziyyətinə keçir və oyunçuların başqa bir oyuna başlamasını gözləyir. Bu FSM -ni anlamağa kömək edəcək bir Moore diaqramı yuxarıda göstərilmişdir.

Addım 4: Gələcək dəyişikliklər

Oyununuzu etməyi düşündüyümüz bir neçə dəyişiklik, sahəyə daha çox bomba əlavə etmək (ehtimal ki, birdən üçə artırmaq), bir hesab sayğacı və birdən çox tur əlavə etməkdir. Nəticədə bu inkişaflara qarşı qərar verdik, çünki daha uzun, uzun bir oyun oynamağın ümumiyyətlə daha gərgin və sonunda üç və ya dörd keçiddən sonra bitən bir oyundan daha əyləncəli olduğunu gördük.

Addım 5: Nəticə

Bu layihənin son nəticəsindən çox məmnun olduq; yalnız oyunun son versiyasının oynamaq çox əyləncəli olduğu üçün deyil, həm də layihənin yaradılması və proqramlaşdırılması bizdən bu rübdə öyrəndiklərimizin hamısı olmasa da ən çox istifadə etməyimizi tələb etdiyi üçün. Flip Floplardan, sayğaclardan, FSM -lərdən, saatdan, lövhədən istifadəçi girişindən və yeddi seqmentli ekrana çıxışdan istifadə etdik.

Bir neçə sintaksis səhvinin proqramı necə tamamilə poza biləcəyini (Python və ya Java kimi digər proqramlaşdırma dillərində yaxşı sayılsalar belə) və yalnız birdən çox simulyasiyadan və kodun çoxlu təkrarlanmasından sonra yüklənib test edildiyini öyrəndik. board, nəhayət kodunuzdakı bütün səhvləri işlədə biləcəksiniz.

Tövsiyə: