İçindekiler:
Video: 2 Kişilik Rekabetçi Zamanlamaya Karşı Oyun: 4 Adım
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:20
İhtiyacın olacak:
1. Digilent Basys 3, FPGA Board (veya başka herhangi bir FPGA,)
2. Vivado'nun nispeten güncel bir sürümü veya başka bir VHDL ortamı
3. Bahsedilen programı çalıştırabilen bir bilgisayar.
Adım 1: Oyunun Kendisi
FSM'nin modüllerle nasıl etkileşime girdiği.
Nasıl oynanır
Başlamak için orta düğmeye basın. Bu, yedi segmentli ekranda ikinci oyuncunun sağlığını temsil eden “99”un görüntülenmesine neden olur. Ardından, LED'ler sırayla sağdan sola yanacaktır. Bu bir güç çubuğu oluşturur. Güç çubuğu dolduğunda, sıfırlanır. Birinci oyuncunun amacı, çubuk mümkün olduğu kadar yüksek olduğunda anahtarı çevirmektir. LED'ler ne kadar çok yanarsa, birinci oyuncu ikinci oyuncuya o kadar fazla hasar verir. Birinci oyuncu anahtarı çevirdikten sonra, verilen hasar ikinci oyuncunun sağlığından düşülür. Ardından, ikinci oyuncunun sırasına geçer. Şimdi, görüntülenen sayı oyuncunun sağlığını temsil ediyor ve güç çubuğu soldan sağa doluyor. İkinci oyuncu hamlesini yaptığında, hasar düşülür ve sıra tekrar birinci oyuncuya döner. Bu, bir oyuncu 0 sağlığa ulaşana kadar tekrar eder. Bu işleyişin videosu ektedir.
2. Adım: FSM
Bu oyun esasen büyük bir sonlu durum makinesidir ve FSM'nin içinde bulunduğu duruma dayalı olarak bazı karmaşık mantıklar gerçekleşir.
Durum 1: Menüİlk durum, daha basit durumlardan biri olan menü ekranıdır. “PLAY” kelimesini gösteren yedi bölümlü ekranı ve oyunun başlamasına neden olan düğmeyi içerir. BTN düğmesi bizi bir sonraki duruma, yani oyuncunun sırası olana götürür.
Durum 2: Birinci Oyuncunun sırası
Birinci oyuncunun sırası, yedi segmentli ekranın Oyuncu ikinin sağlığını göstermesine neden olan bir sinyali etkinleştirir. Oluşturduğumuz başka bir modülden (Pone.vhd) aktarılan bir kaydırma kaydını etkinleştirmek için başka bir sinyal açılır. Bu kaydırma kaydı, LED'lerin diğer oyunlarda artan bir güç göstergesi gibi yanmasını sağlar ve daha sonra, yanabilecek maksimum LED miktarına ulaştığında 0'a sıfırlanır. Ödünç alınan bir laboratuvar dosyasından değiştirilen barclock.vhd'den elde edilen saatin yükselen kenarında güncellenir. Birinci oyuncunun çubuğunun sağdan başlayıp sola doğru doldurmasını sağladık, çünkü birinci oyuncunun anahtarı da soldadır (sezgisel kullanıcı deneyimi için). Anahtar çevrildiğinde, durum oyuncu bir kesintiye geçer ve LED'in aktif miktarı bir sinyale kaydedilir.
Durum 3: Oyuncu Bir kesinti LED'in aktif miktarına sahip sinyal, düşülen sağlık miktarını belirler. Bu, LED'leri artırmak yerine azaltan başka bir kaydırma kaydına (deductor1.vhd) sahip olarak yapılır. Bu, ödünç aldığımız ve değiştirdiğimiz saat div modüllerinden birinin yükselen kenarında azalır (downcounterclock.vhd). Bir LED kapatıldığında, ikinci oyuncunun toplam sağlığından bir sağlık puanı düşülür. Bu işlem sırasında 2. oyuncu 0 sağlığa ulaşırsa, durur ve hemen “Oyun bitti” durumuna geçeriz. Aksi takdirde, LED vektörü “0000000000000000” değerine ulaştığında, ikinci oyuncunun sırasına geçiyoruz.
Durum 4: Oyuncu İki'nin sırası İkinci oyuncunun sırası, birinci oyuncunun sırası gibidir, bunun için vardiya kaydının (Ptwo.bhd) soldan sağa gitmesi ve anahtarın tahtanın sağ tarafında olması dışında. Oyuncu 1'in sağlık göstergesine sahip olmak için bir sinyal etkinleştirilir. Anahtar 2 aktif olduğunda, bu, Oyuncu İki'nin kesinti sırasına geçer.
Aşama 5: İkinci Oyuncu Kesintisi Tıpkı ikinci oyuncunun sırası gibi, ikinci oyuncunun düşülmesi, oyuncunun bir kesintisi gibi davranır. Ana fark, LED'in kapanmasını kontrol eden kaydırma yazmacının ters yönde gitmesidir; bu, oyuncunun kesintisinin düzgün bir şekilde çalışmasını sağladıktan sonra yapılması kolay bir değişikliktir.
Aşama 6: Oyun Bitti Herhangi bir noktada oyunculardan herhangi biri sıfır sağlığa ulaşırsa, oyun bu duruma geçer. Gösterişli bir şey yok. BTN one'a basılırsa, sağlık 99'a sıfırlanır ve durum menüye geri dönerek oyunu etkin bir şekilde başlatır.
Adım 3: Modüller
Oyun için Kara Kutu Şeması
Downcounterclock (Bryan Mealy'nin clk_div.vhd modülüne göre):
Bu, indirgeyicilerin zamanlamasını yöneten saattir. max_count adlı sabit, barclock'un max_count sabitinden 3 kat daha fazladır. Bu, indirgeyicileri çubuğun hızından 3 kat daha yavaş yapacaktır.
Barclock - (Bryan Mealy'nin clk_div.vhd modülüne göre):
Bu saat, oyuna zorluk eklemek için hızlı bir şekilde artırdığımız güç göstergelerinin zamanlamasını yönetiyor. Bu zamanlama, beğeninize göre ayarlanabilir, sabit max_count'u daha büyük bir sayı yaparak hızı artırabilir veya max_count'u daha küçük bir sayı yaparak azaltabilirsiniz. Sseg_dec - (Yazan Bryan Mealy): Bu modül girdi olarak 8 bitlik bir sayı alır, kodunu çözer, sayıyı ondalık eşdeğerine dönüştürür ve ardından yedi segmentli ekrana çıktı verir. Bu dosyanın çalışması için, kısıtlamalarınızın bizimkilerle eşleştiğinden emin olmanız gerekir.
ponpon:
Bu, güç göstergesi artıyormuş gibi görünmesi için bir sıcak bit ekleyerek bitleri sola kaydıran bir kaydırma yazmacıdır. Tüm bitler sıcak olduğunda, tüm bitler '0'a sıfırlanır ve döngü baştan başlar.
2. bölüm:
Bu, P1 modülünün çevrilmiş bir versiyonudur.
çıkarıcı1:
Bu, bir kaydırma yazmacı ve bir çıkarıcının birleşimidir. Kaydırmalı yazmaç, P1'in kaydırma yazmacının ters yönüne gider ve bir kesinti gösterir. Bu aynı zamanda her saat döngüsü için Oyuncu 2'nin sağlığından 1 çıkarır, bu nedenle bu iki işlevin kombinasyonu ile, düşen sağlık çubuğunun her ledi için rakibin sağlığı 1 azalıyor gibi görünecektir.
Deductor2: Bu, Deductor1 modülünün çevrilmiş bir versiyonudur.
PlayDecoder (ekchen35649'un 133 talimatından ödünç alınmış ve kısmen değiştirilmiştir): Bu, menü durumunda yedi segmentli kod çözücüde “OYNAT” kelimesini görüntülemek için kullanılır.
4. Adım: Test edin
Bu oyun orijinal olarak Kirby'nin mini oyunlarından birinden esinlenmiştir. Basys 3 Board veya herhangi bir FPGA üzerinde oynanabilen basit iki oyunculu bir oyundur.
Adım 1: Gerekli Malzemeler
Şunlara ihtiyacınız olacak: Digilent Basys 3, FPGA Board (veya başka herhangi bir) Vivado'nun nispeten güncel bir sürümü veya başka bir vhdl ortamı Söz konusu programı çalıştırabilen bir bilgisayar Bir beyin
2. Adım: Oyunun Kendisi
Nasıl oynanır
Başlamak için orta düğmeye basın. Bu, yedi segmentli ekranda ikinci oyuncunun sağlığını temsil eden “99”un görüntülenmesine neden olur. Ardından, LED'ler sırayla sağdan sola yanacaktır. Bu bir güç çubuğu oluşturur. Güç çubuğu dolduğunda, sıfırlanır. Birinci oyuncunun amacı, çubuk mümkün olduğu kadar yüksek olduğunda anahtarı çevirmektir. LED'ler ne kadar çok yanarsa, birinci oyuncu ikinci oyuncuya o kadar fazla hasar verir. Birinci oyuncu anahtarı çevirdikten sonra, verilen hasar ikinci oyuncunun sağlığından düşülür. Ardından, ikinci oyuncunun sırasına geçer. Şimdi, görüntülenen sayı oyuncunun sağlığını temsil ediyor ve güç çubuğu soldan sağa doluyor. İkinci oyuncu hamlesini yaptığında, hasar düşülür ve sıra tekrar birinci oyuncuya döner. Bu, bir oyuncu 0 sağlığa ulaşana kadar tekrarlanır. Bu işleyişin videosu ektedir.
Oyunu oynamak için bir basys tahtasına yükleyin ve orta tuşa basın. Mümkün olduğu kadar çok LED aktifken anahtarı çevirmeye çalışın ve ardından tahtanın bu puanları rakibinizin sağlığından düşürmesini bekleyin ve izleyin. Ardından, arkadaşınıza iletin ve
3. Adım: FSM
Bu oyun esasen büyük bir sonlu durum makinesidir ve FSM'nin içinde bulunduğu duruma dayalı olarak bazı karmaşık mantıklar gerçekleşir.
(Durum diyagramı)
Durum 1: Menü
İlk durum, daha basit durumlardan biri olan menü ekranıdır. “PLAY” kelimesini gösteren yedi bölümlü ekranı ve oyunun başlamasına neden olan düğmeyi içerir. BTN düğmesi bizi bir sonraki duruma, yani oyuncunun sırası olana götürür.
Durum 2: Birinci Oyuncunun sırası
Birinci oyuncunun sırası, yedi segmentli ekranın Oyuncu ikinin sağlığını göstermesine neden olan bir sinyali etkinleştirir. Oluşturduğumuz başka bir modülden (Pone.vhd) aktarılan bir kaydırma kaydını etkinleştirmek için başka bir sinyal açılır. Bu kaydırma kaydı, LED'lerin diğer oyunlarda artan bir güç göstergesi gibi yanmasını sağlar ve daha sonra, yanabilecek maksimum LED miktarına ulaştığında 0'a sıfırlanır. Ödünç alınan bir laboratuvar dosyasından değiştirilen barclock.vhd'den elde edilen saatin yükselen kenarında güncellenir. Birinci oyuncunun çubuğunun sağdan başlayıp sola doğru doldurmasını sağladık, çünkü birinci oyuncunun anahtarı da soldadır (sezgisel kullanıcı deneyimi için). Anahtar çevrildiğinde, durum oyuncu bir kesintiye geçer ve LED'in aktif miktarı bir sinyale kaydedilir.
Durum 3: Oyuncu Bir kesintisi
LED'in aktif miktarı ile sinyal, düşülen sağlık miktarını belirler. Bu, LED'leri artırmak yerine azaltan başka bir kaydırma kaydına (deductor1.vhd) sahip olarak yapılır. Bu, ödünç aldığımız ve değiştirdiğimiz saat div modüllerinden birinin yükselen kenarında azalır (downcounterclock.vhd). Bir LED kapatıldığında, ikinci oyuncunun toplam sağlığından bir sağlık puanı düşülür. Bu işlem sırasında 2. oyuncu 0 sağlığa ulaşırsa, durur ve hemen “Oyun bitti” durumuna geçeriz. Aksi takdirde, LED vektörü “0000000000000000” değerine ulaştığında, ikinci oyuncunun sırasına geçiyoruz.
Durum 4: İkinci Oyuncunun sırası
İkinci oyuncunun sırası, birinci oyuncunun sırası gibidir, bunun için vardiya kaydının (Ptwo.bhd) soldan sağa gitmesi ve anahtarın tahtanın sağ tarafında olması dışında. Oyuncu 1'in sağlık göstergesine sahip olmak için bir sinyal etkinleştirilir. Anahtar 2 aktif olduğunda, bu, Oyuncu İki'nin kesinti sırasına geçer.
Aşama 5: İkinci Oyuncu Kesintisi
Tıpkı ikinci oyuncunun sırası gibi, ikinci oyuncunun düşülmesi, oyuncunun bir kesintisi gibi davranır. Ana fark, LED'in kapanmasını kontrol eden kaydırma yazmacının ters yönde gitmesidir; bu, oyuncunun kesintisinin düzgün bir şekilde çalışmasını sağladıktan sonra yapılması kolay bir değişikliktir.
Aşama 6: Oyun Bitti Herhangi bir noktada oyunculardan herhangi biri sıfır sağlığa ulaşırsa, oyun bu duruma geçer. Gösterişli bir şey yok. BTN one'a basılırsa, sağlık 99'a sıfırlanır ve durum menüye geri dönerek oyunu etkin bir şekilde başlatır.
Siyah kutu
Adım 4: Modüller
Downcounterclock (Bryan Mealy'nin clk_div.vhd modülüne göre):
Bu, indirgeyicilerin zamanlamasını yöneten saattir. max_count adlı sabit, barclock'un max_count sabitinden 3 kat daha fazladır. Bu, indirgeyicileri çubuğun hızından 3 kat daha yavaş yapacaktır.
Barclock - (Bryan Mealy'nin clk_div.vhd modülüne dayalı): Bu saat, oyuna zorluk eklemek için hızlı bir şekilde artırdığımız güç göstergelerinin zamanlamasını yönetir. Bu zamanlama, beğeninize göre ayarlanabilir, sabit max_count'u daha büyük bir sayı yaparak hızı artırabilir veya max_count'u daha küçük bir sayı yaparak azaltabilirsiniz. Sseg_dec - (Yazan Bryan Mealy): Bu modül girdi olarak 8 bitlik bir sayı alır, kodunu çözer, sayıyı ondalık eşdeğerine dönüştürür ve ardından yedi segmentli ekrana çıktı verir. Bu dosyanın çalışması için, kısıtlamalarınızın bizimkilerle eşleştiğinden emin olmanız gerekir.
Pone: Bu, bitleri sola kaydıran ve güç göstergesi artıyormuş gibi görünmesi için bir sıcak bit ekleyen bir kaydırma yazmacıdır. Tüm bitler sıcak olduğunda, tüm bitler '0'a sıfırlanır ve döngü baştan başlar.
Ptwo: Bu, P1 modülünün çevrilmiş bir versiyonudur.
Deductor1: Bu, bir kaydırma yazmacı ve bir çıkarıcının birleşimidir. Kaydırmalı yazmaç, P1'in kaydırma yazmacının ters yönüne gider ve bir kesinti gösterir. Bu aynı zamanda her saat döngüsü için Oyuncu 2'nin sağlığından 1 çıkarır, bu nedenle bu iki işlevin kombinasyonu ile, düşen sağlık çubuğunun her ledi için rakibin sağlığı 1 azalıyor gibi görünecektir.
Deductor2: Bu, Deductor1 modülünün çevrilmiş bir versiyonudur.
PlayDecoder (ekchen35649'un 133 talimatından ödünç alındı ve biraz değiştirildi):
Bu, menü durumunda yedi segmentli kod çözücüde “OYNAT” kelimesini görüntülemek için kullanılır.
Yapılacaklar: resimler, video
Önerilen:
Lazer Hırsızlığa Karşı Cihaz: 4 Adım
Lazer Hırsızlığa Karşı Cihaz: Başkalarının evini istila etmeyi ve insanlar uyurken çok değerli olan eşyalarını çalmayı seven o kadar çok hırsız var ki, bu sorunu çözmek için bu cihazı yarattım
Kablosuz 4 Kişilik Aile Oyun Kumandası: 3 Adım
Kablosuz 4 Kişilik Aile Oyun Kumandası: Bu, aynı anda 4 kişinin oyun oynayabileceği kablosuz arcade tarzı bir kumandadır. Kablosuzdur, böylece bilgisayarınızı 5 yaşındakiler tarafından kullanılan bir kontrol cihazına bağlamanız gerekmez. Her zaman düşüyorlar ve tüm oyuncaklarımı yok etmelerini istemiyorum
Rekabetçi Buzzer Sistemi: 5 Adım
Rekabetçi Sesli Uyarı Sistemi: Bu projede tasarlanan rekabetçi sesli uyarı sistemi, Bölgesel ve Ulusal Bilim Kase Müsabakalarında kullanılan sesli uyarı sistemlerine benzer şekilde çalışır. Bu proje, lisemin bilim kase takımına üç yıl boyunca dahil olmamdan ilham aldı
Aruduino LED Oyunu Hızlı Tıklama İki Kişilik Oyun: 8 Adım
Aruduino LED Oyunu Hızlı Tıklama İki Kişilik Oyun: Bu proje @HassonAlkeim'den esinlenmiştir. Derinlemesine bakmak isterseniz, https://www.instructables.com/id/Arduino-Two-Player-Fast-Button-Clicking-Game/ adresine göz atabileceğiniz bir bağlantı var. Bu oyun Alkeim'in geliştirilmiş bir versiyonudur. Bu bir
Pandora'nın Kutusunu Kullanarak Özel Seçim Çerçevesi Madeni Para Yuvaları ile 2 Kişilik Kendin Yap Bartop Oyun Salonu Nasıl Yapılır: 17 Adım (Resimlerle)
Pandora'nın Kutusunu Kullanarak Özel Seçim Çerçevesi Madeni Para Yuvaları ile 2 Oyunculu Kendin Yap Bartop Oyun Salonu Nasıl Yapılır: Bu, kayan yazı çerçevesine yerleşik özel madeni para yuvalarına sahip 2 oyunculu bir bar üstü arcade makinesinin nasıl oluşturulacağına dair adım adım bir eğitimdir. Madeni para yuvaları, yalnızca çeyrek ve daha büyük madeni paraları kabul edecek şekilde yapılacaktır. Bu oyun salonuna güç verilir