Mündəricat:
Video: 2 Oyunçu Rəqabətli VS Zamanlama Oyunu: 4 Addım
2024 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2024-01-30 07:47
Sizə lazım olacaq:
1. Digilent Basys 3, FPGA Board (və ya hər hansı digər FPGA,)
2. Vivadonun və ya başqa bir VHDL mühitinin nisbətən aktual versiyası
3. Qeyd olunan proqramı işlədə bilən kompüter.
Addım 1: Oyunun özü
FSM modullarla necə qarşılıqlı əlaqə qurur.
Necə oynamalı
Başlamaq üçün orta düyməni basın. Bu, iki oyunçunun sağlamlığını təmsil edən "99" un yeddi seqmentli ekranda göstərilməsinə səbəb olacaq. Sonra LEDlər sağdan sola ardıcıl olaraq yanacaq. Bu güc çubuğu meydana gətirir. Güc çubuğu dolduqdan sonra sıfırlanır. Bir oyunçunun məqsədi, çubuğu mümkün qədər yüksək olduqda açarını çevirməkdir. Nə qədər çox LED yanarsa, bir oyunçunun ikinci oyunçuya vurduğu ziyan daha çox olar. Bir oyunçu açarını çevirdikdən sonra vurulan zərər ikinci oyunçunun sağlamlığından çıxılır. Sonra iki oyunçunun növbəsinə keçir. İndi göstərilən nömrə oyunçunun sağlamlığını ifadə edir və güc çubuğu soldan sağa qədər dolur. İkinci oyunçu hərəkət etdikdən sonra, zərər çıxılır və yenidən oyunçunun növbəsinə qayıdır. Bu, bir oyunçunun sağlamlığı 0 -a çatana qədər təkrarlanır. Bu işin videosu əlavə olunur.
Addım 2: FSM
Bu oyun, FSM -in vəziyyətinə əsaslanaraq bəzi kompleks məntiqlərin meydana gəldiyi böyük bir sonlu dövlət maşınıdır.
Vəziyyət 1: Menyu İlk vəziyyət, sadə vəziyyətlərdən biri olan menyu ekranıdır. "PLAY" sözünü göstərən yeddi seqmentli ekranı və oyunun başlamasına səbəb olan düyməni ehtiva edir. BTN düyməsi bizi oyunçunun növbəsi olan növbəti vəziyyətə aparır.
Vəziyyət 2: Birinci oyunçunun növbəsi
Bir oyunçunun növbəsi, yeddi seqmentin ikinci oyunçunun sağlamlığını göstərməsinə səbəb olan bir siqnal aktivləşdirir. Başqa bir siqnal, yaratdığımız başqa bir moduldan (Pone.vhd) idxal edilmiş bir qeyd qeydini aktivləşdirmək üçün açılır. Bu keçid qeydiyyatı, LED -in işığını digər oyunlarda artan bir güc göstəricisi kimi yandırır və daha sonra yandırıla bilən maksimum LED -ə çatdıqda sıfıra sıfırlanır. Borclanmış bir laboratoriya sənədindən dəyişdirilmiş barclock.vhd -dən əldə edilən saatın yüksələn kənarını yeniləyir. Bir oyunçunun çubuğu sağdan başlayır və sola qədər doldururduq, çünki oyunçunun keçidi də soldadır (intuitiv istifadəçi təcrübəsi üçün). Keçid çevrildikdən sonra, vəziyyət oyunçudan bir çıxmağa keçir və LED -in aktiv miqdarı bir siqnalda saxlanılır.
Vəziyyət 3: Oyunçu Bir kəsmə LED aktivliyi olan siqnal, kəsilən sağlamlıq miqdarını təyin edir. Bu, LED -ləri artırmaq əvəzinə onları azaldan başqa bir keçid reyestrinin (deductor1.vhd) olması ilə edilir. Bu, borc aldığımız və dəyişdirdiyimiz saat div modullarından birinin yüksələn kənarında azalır (downcounterclock.vhd). Bir LED söndürüldükdə, bir oyunçunun ümumi sağlamlığından bir sağlamlıq nöqtəsi çıxılır. Bu proses zamanı iki oyunçu 0 sağlamlıq əldə edərsə, dayandırırıq və dərhal "Oyun bitdi" vəziyyətinə keçirik. Əks təqdirdə, LED vektoru "0000000000000000" ə çatdıqda iki oyunçunun növbəsinə keçirik.
Vəziyyət 4: İkinci Oyunçunun növbəsi İkinci oyunçunun növbəsi tam olaraq bir oyunçunun növbəsinə bənzəyir, bunun üçün keçid reyestri (Ptwo.bhd) soldan sağa gedir və keçid lövhənin sağ tərəfindədir. Oyunçu 1 -in sağlamlıq ekranına sahib olmaq üçün bir siqnal işə düşür. 2 -ci keçid aktiv olduqdan sonra, bu, İkinci Oyunçunun çıxma növbəsinə keçir.
Mərhələ 5: İki Oyunçunun Çıxarılması İkinci oyunçunun növbəsi olduğu kimi, iki oyunçu da bir oyunçunun bir çıxması kimi davranır. Əsas fərq, LED -in sönməsini idarə edən keçid qeydinin əks istiqamətdə getməsidir ki, bu da oyunçunun çıxışı düzgün işlədikdən sonra etmək asan bir dəyişiklikdir.
Mərhələ 6: Oyun bitdi Hər hansı bir anda hər iki oyunçunun sağlamlığı sıfıra çatırsa, oyun bu vəziyyətə keçir. Görünüşlü heç nə yoxdur. BTN -ə basıldığı təqdirdə, sağlamlıq 99 -a sıfırlanır və vəziyyət oyuna təsirli bir şəkildə başlayaraq menyuya qayıdır.
Addım 3: Modullar
Oyun üçün qara qutu diaqramı
Saat əqrəbi (Bryan Mealy tərəfindən clk_div.vhd modulu əsasında):
Deduktorların vaxtını idarə edən saat budur. Max_count adlı sabit, barclockun max_count sabitindən 3 dəfə çoxdur. Bu, dedüktörleri çubuğun sürətindən 3x daha yavaş edəcək.
Barclock - (Bryan Mealy tərəfindən clk_div.vhd modulu əsasında):
Bu saat, oyuna çətinlik əlavə etmək üçün sürətlə artırdığımız güc göstəricilərinin vaxtını idarə edir. Bu vaxt sabit max_count'u daha böyük bir rəqəm halına gətirərək sürəti artırmaqla və ya max_count'u daha kiçik bir sayı etməklə azaltmaqla zövqünüzə görə tənzimlənə bilər. Sseg_dec - (Bryan Mealy tərəfindən yazılmışdır): Bu modul, şifrəsini açaraq, rəqəmi ondalık ekvivalentinə çevirərək, sonra yeddi seqmentli ekrana çıxardığı giriş olaraq 8 bitlik bir rəqəm alır. Bu faylın işləməsi üçün məhdudiyyətlərinizin bizimki ilə uyğun olduğundan əmin olmalısınız.
Pone:
Bu, güc göstəricisinin artdığını göstərmək üçün bitləri sola çevirən bir isti bit əlavə edən bir keçid qeydidir. Bütün bitlər isti olduqda, bütün bitlər '0' sıfırlanır və dövr yenidən başlayır.
Ptwo:
Bu P1 modulunun çevrilmiş versiyasıdır.
Deduktor1:
Bu, bir dəyişmə reyestri ilə çıxarılanın birləşməsidir. Dəyişdirmə reyestri, P1 -in keçid qeydinin əks istiqamətinə gedir və bu da kəsilməni göstərir. Bu, hər bir oyun dövrü üçün Oyunçu 2 -nin sağlamlığından 1 çıxarır, buna görə də bu iki funksiyanın birləşməsi ilə düşən sağlamlıq çubuğunun hər bir ledinə görə rəqibin sağlamlığının 1 azaldığı görünür.
Deductor2: Bu Deductor1 modulunun çevrilmiş versiyasıdır.
PlayDecoder (ekchen35649 -dan 133 təlimatlı olaraq götürüldü və dəyişdirildi): Bu, yeddi seqmentli dekoderdə "PLAY" sözünü göstərmək üçün menyu vəziyyətində istifadə olunur.
Addım 4: Test edin
Bu oyun əvvəlcə Kirby mini oyunlarından ilhamlandı. Basys 3 lövhəsində və ya hər hansı bir FPGA-da oynana bilən sadə iki oyunçulu bir oyundur.
Addım 1: Lazımi materiallar
Ehtiyacınız olacaq: Digilent Basys 3, FPGA Board (və ya hər hansı digər) Vivadonun nisbətən yenilənmiş bir versiyası və ya başqa bir vhdl mühiti Qeyd olunan proqramı A beyini işlədə bilən kompüter
Addım 2: Oyunun Özü
Necə oynamalı
Başlamaq üçün orta düyməni basın. Bu, iki oyunçunun sağlamlığını təmsil edən "99" un yeddi seqmentli ekranda göstərilməsinə səbəb olacaq. Sonra LEDlər sağdan sola ardıcıl olaraq yanacaq. Bu güc çubuğu meydana gətirir. Güc çubuğu dolduqdan sonra sıfırlanır. Bir oyunçunun məqsədi, çubuğu mümkün qədər yüksək olduqda açarını çevirməkdir. Nə qədər çox LED yanarsa, bir oyunçunun ikinci oyunçuya vurduğu ziyan daha çox olar. Bir oyunçu açarını çevirdikdən sonra vurulan zərər ikinci oyunçunun sağlamlığından çıxılır. Sonra iki oyunçunun növbəsinə keçir. İndi göstərilən nömrə oyunçunun sağlamlığını ifadə edir və güc çubuğu soldan sağa qədər dolur. İkinci oyunçu hərəkət etdikdən sonra, zərər çıxılır və yenidən oyunçunun növbəsinə qayıdır. Bu, bir oyunçunun sağlamlığı 0 -a çatana qədər təkrarlanır. Bu işin videosu əlavə olunur.
Oyunu oynamaq üçün onu bir lövhəyə yükləyin və orta düyməni basın. Açarı mümkün qədər çox LED ilə çevirməyə çalışın və sonra lövhənin bu nöqtələri rəqibinizin sağlamlığından çıxardığını gözləyin. Sonra dostunuza verin və
Addım 3: FSM
Bu oyun, FSM -in vəziyyətinə əsaslanan bəzi kompleks məntiqlərin meydana gəldiyi böyük bir sonlu dövlət maşındır.
(Dövlət Diaqramı)
Vəziyyət 1: Menyu
Birinci vəziyyət, ən sadə vəziyyətlərdən biri olan menyu ekranıdır. "PLAY" sözünü göstərən yeddi seqmentli ekranı və oyunun başlamasına səbəb olan düyməni ehtiva edir. BTN düyməsi bizi oyunçunun növbəsi olan növbəti vəziyyətə aparır.
Vəziyyət 2: Birinci oyunçunun növbəsi
Bir oyunçunun növbəsi, yeddi seqmentin ikinci oyunçunun sağlamlığını göstərməsinə səbəb olan bir siqnal aktivləşdirir. Başqa bir siqnal, yaratdığımız başqa bir moduldan (Pone.vhd) idxal edilmiş bir qeyd qeydini aktivləşdirmək üçün açılır. Bu keçid qeydiyyatı, LED -in işığını digər oyunlarda artan bir güc göstəricisi kimi yandırır və yandırıla bilən maksimum LED -ə çatdıqda 0 -a sıfırlanır. Borclanmış bir laboratoriya sənədindən dəyişdirilmiş barclock.vhd -dən əldə edilən saatın yüksələn kənarını yeniləyir. Oyunçunun bir çubuğu sağdan başlayır və sola qədər doldururduq, çünki oyunçunun keçidi də soldadır (intuitiv istifadəçi təcrübəsi üçün). Keçid çevrildikdən sonra, vəziyyət oyunçudan bir çıxmağa keçir və LED -in aktiv miqdarı bir siqnalda saxlanılır.
Vəziyyət 3: Oyunçu 1 -dən endirim
LED -in aktiv olduğu siqnal, çıxarılan sağlamlıq miqdarını təyin edir. Bu, LED -ləri artırmaq əvəzinə onları azaldan başqa bir keçid reyestrinin (deductor1.vhd) olması ilə edilir. Bu, borc aldığımız və dəyişdirdiyimiz saat div modullarından birinin yüksələn kənarında azalır (downcounterclock.vhd). Bir LED söndürüldükdə, bir oyunçunun ümumi sağlamlığından bir sağlamlıq nöqtəsi çıxılır. Bu proses zamanı iki oyunçu 0 sağlamlıq əldə edərsə, dayandırırıq və dərhal "Oyun bitdi" vəziyyətinə keçirik. Əks təqdirdə, LED vektoru "0000000000000000" ə çatdıqda iki oyunçunun növbəsinə keçirik.
Vəziyyət 4: İkinci oyunçunun növbəsi
İkinci oyunçunun növbəsi tam olaraq bir oyunçunun növbəsinə bənzəyir, bunun üçün növbənin qeydiyyatı (Ptwo.bhd) soldan sağa gedir və açar lövhənin sağ tərəfindədir. Oyunçu 1 -in sağlamlıq ekranına sahib olmaq üçün bir siqnal işə düşür. 2 -ci keçid aktiv olduqdan sonra, bu, İkinci Oyunçunun çıxma növbəsinə keçir.
Mərhələ 5: İki Oyunçu Çıxar
İki oyunçunun növbəsi olduğu kimi, iki oyunçu da bir oyunçunun bir çıxması kimi davranır. Əsas fərq, LED -in sönməsini idarə edən keçid qeydinin əks istiqamətdə getməsidir ki, bu da oyunçunun çıxışı düzgün işlədikdən sonra etmək asan bir dəyişiklikdir.
Mərhələ 6: Oyun bitdi Hər hansı bir anda hər iki oyunçunun sağlamlığı sıfıra çatırsa, oyun bu vəziyyətə keçir. Görünüşlü heç nə yoxdur. BTN -ə basıldığı təqdirdə, sağlamlıq 99 -a sıfırlanır və vəziyyət oyuna təsirli bir şəkildə başlayaraq menyuya qayıdır.
Qara qutu
Addım 4: Modullar
Saat əqrəbi (Bryan Mealy tərəfindən clk_div.vhd modulu əsasında):
Deduktorların vaxtını idarə edən saat budur. Max_count adlı sabit, barclockun max_count sabitindən 3 dəfə çoxdur. Bu, dedüktörleri çubuğun sürətindən 3x daha yavaş edəcək.
Barclock - (Bryan Mealy tərəfindən hazırlanmış clk_div.vhd moduluna əsaslanaraq): Bu saat, oyuna çətinlik əlavə etmək üçün sürətlə artırdığımız güc göstəricilərinin vaxtını idarə edir. Bu vaxt sabit max_count'u daha böyük bir rəqəm halına gətirərək sürəti artırmaqla və ya max_count'u daha kiçik bir sayı etməklə azaltmaqla zövqünüzə görə tənzimlənə bilər. Sseg_dec - (Bryan Mealy tərəfindən yazılmışdır): Bu modul, şifrəsini açaraq, rəqəmi ondalık ekvivalentinə çevirərək, sonra yeddi seqmentli ekrana çıxardığı giriş olaraq 8 bitlik bir rəqəm alır. Bu faylın işləməsi üçün məhdudiyyətlərinizin bizimki ilə uyğun olduğundan əmin olmalısınız.
Pone: Bu, güc göstəricisinin artdığını göstərmək üçün bitləri sola sürüşdürən, bir isti bit əlavə edən bir keçid qeydidir. Bütün bitlər isti olduqda, bütün bitlər '0' sıfırlanır və dövr yenidən başlayır.
Ptwo: Bu P1 modulunun çevrilmiş versiyasıdır.
Deductor1: Bu, bir qeyd registrinin və bir çıxarıcının birləşməsidir. Vəziyyət reyestri, P1 -in keçid qeydinin əks istiqamətinə gedir, bu da bir endirimi göstərir. Bu, hər bir oyun dövrü üçün Oyunçu 2 -nin sağlamlığından 1 çıxarır, buna görə də bu iki funksiyanın birləşməsi ilə düşən sağlamlıq çubuğunun hər bir ledinə görə rəqibin sağlamlığının 1 azaldığı görünür.
Deductor2: Bu Deductor1 modulunun çevrilmiş versiyasıdır.
PlayDecoder (ekchen35649 -dan götürülmüş və biraz dəyişdirilmiş, onun 133 təlimatı):
Bu, yeddi seqmentli dekoderdə "PLAY" sözünü göstərmək üçün menyu vəziyyətində istifadə olunur.
Ediləcək işlər: şəkillər, video
Tövsiyə:
Arduino Nəzarətçiləri ilə Çox Oyunçu Oyunu Necə Hazırlanır: 6 Addım
Arduino Nəzarətçiləri ilə Çox Oyunçu Oyunu Necə Yapılır: Oyun tərtibatçılarının bütün dünyada insanların oynamağı sevdikləri heyrətamiz oyunlar necə yaratdıqlarını heç düşünmüsünüzmü? Yaxşı, bu gün bir Arduino contro tərəfindən idarə ediləcək kiçik bir çox oyunçu oyunu hazırlayaraq bu barədə sizə kiçik bir ipucu verəcəyəm
Zamanlama Sabun Dispenseri: 6 addım
Zamanlama Sabunu Dispenseri: Mövcud sağlamlıq vəziyyətimlə başa düşdüm ki, əllərimi nə qədər yuduğum barədə heç düşünməmişəm. Ən az 20 saniyə yuyulmağa başlandı, amma saymaq çox darıxdırıcıdır və düşünürəm ki, Hamımıza Müqəddəs Doğum Mahnısı kifayət qədər çatdı
Rəqabətli Buzzer Sistemi: 5 addım
Rəqabətli Buzzer Sistemi: Bu layihədə hazırlanan rəqabətli səs sistemi, Regional və Milli Elm Kase Müsabiqələrində istifadə edilən səs siqnal sistemlərinə bənzər şəkildə işləyir. Bu layihə, liseyimin elmi fincan komandası ilə işimdən ilham aldı
Aruduino LED Oyunu İki Oyunçu Oyunu Sürətli Tıklayır: 8 Addım
Aruduino LED Oyunu İki Oyunçu Oyunu Sürətli Tıklayaraq: Bu layihə @HassonAlkeim -dən ilhamlanıb. Bura dərindən baxmaq istəsəniz https://www.instructables.com/id/Arduino-Two-Player-Fast-Button-Clicking-Game/ yoxlaya biləcəyiniz bir linkdir. Bu oyun Alkeim -in təkmilləşdirilmiş bir versiyasıdır. Bu bir
8x16 LED Matrix Pong Oyunu (Oyunçu Versiyasına 2 Kürek): 3 addım
8x16 LED Matrix Pong Oyunu (Oyunçu Versiyasına 2 Kürek): 8x8 LED matrisindən istifadə edərək Arduinoda tətbiq olunan klassik Pong oyununun bir çox variantından ilham aldım. Bu təlimatda sizə oyunçu başına iki avarçəkən - hücumçu və qapıçı olan ən sevimli Pong versiyamın necə qurulacağını göstərəcəyəm