Isi kandungan:

Permainan Pemain VS Kompetitif 2 Masa: 4 Langkah
Permainan Pemain VS Kompetitif 2 Masa: 4 Langkah

Video: Permainan Pemain VS Kompetitif 2 Masa: 4 Langkah

Video: Permainan Pemain VS Kompetitif 2 Masa: 4 Langkah
Video: SUKSES TIDAK DATANG PADA ORANG YANG MALAS | Short Movie 2024, Julai
Anonim
2 Pemain Masa Pertandingan VS Kompet-t.webp
2 Pemain Masa Pertandingan VS Kompet-t.webp

Anda perlu:

1. Digilent Basys 3, FPGA Board (atau FPGA lain,)

2. Versi Vivado yang agak terkini, atau persekitaran VHDL lain

3. Komputer yang dapat menjalankan program yang disebutkan.

Langkah 1: Permainan Sendiri

Permainan itu Sendiri
Permainan itu Sendiri

Bagaimana FSM berinteraksi dengan modul.

Cara bermain

Untuk memulakan, anda menekan butang tengah. Ini akan menyebabkan "99", yang menunjukkan kesihatan pemain dua, untuk dipaparkan pada paparan tujuh segmen. Kemudian, LED akan menyala secara berurutan dari kanan ke kiri. Ini membentuk bar kuasa. Setelah bar kuasa penuh, ia akan ditetapkan semula. Objek pemain adalah untuk menukar suis mereka apabila palang setinggi mungkin. Semakin banyak lampu LED menyala, semakin banyak kerosakan pemain yang dilakukan oleh pemain dua. Setelah pemain mengundurkan suisnya, kerosakan yang ditanggung dikurangkan dari kesihatan pemain dua. Kemudian, ia beralih ke giliran pemain dua. Sekarang, nombor yang ditunjukkan mewakili kesihatan pemain, dan power bar mengisi dari kiri ke kanan. Setelah pemain dua bergerak, kerosakan akan ditolak, dan gilirannya kembali kepada pemain. Ini berulang sehingga satu pemain mencapai 0 kesihatan. Video mengenai fungsi ini dilampirkan.

Langkah 2: FSM

FSM
FSM
FSM
FSM
FSM
FSM
FSM
FSM

Permainan ini pada dasarnya adalah satu mesin keadaan terhingga besar, yang logik kompleks berlaku berdasarkan keadaan di mana FSM berada.

Nyatakan 1: Menu Keadaan pertama adalah skrin menu, yang merupakan salah satu keadaan yang lebih sederhana. Ini termasuk tampilan tujuh segmen yang menampilkan kata "MAIN", dan tombol yang menyebabkan permainan dimulakan. Butang, BTN, membawa kita ke keadaan seterusnya, iaitu giliran pemain satu.

Nyatakan 2: Giliran Pemain Satu

Giliran pemain satu mengaktifkan isyarat yang menyebabkan paparan tujuh segmen menunjukkan kesihatan Pemain dua. Isyarat lain menyala untuk mengaktifkan shift shift yang diimport dari modul lain yang kami buat (Pone.vhd). Daftar pergeseran ini menjadikan lampu LED menyala seperti pengukur daya yang meningkat pada permainan lain, dan kemudian akan diset semula ke 0 ketika mencapai jumlah maksimum LED yang dapat menyala. Ia mengemas kini bahagian tepi jam yang diperoleh dari barclock.vhd, yang diubah suai dari fail makmal yang dipinjam. Kami mempunyai bar pemain satu bermula dari kanan, dan mengisi ke kiri, kerana suis pemain satu juga berada di sebelah kiri (untuk pengalaman pengguna yang intuitif). Setelah suis dibalik, keadaan beralih ke pemain satu tolak, dan jumlah aktif LED disimpan dalam isyarat.

Nyatakan 3: Pemotongan Pemain Satu Isyarat dengan jumlah aktif LED menentukan jumlah kesihatan yang mendapat potongan. Ini dilakukan dengan mempunyai register pergeseran lain (deductor1.vhd) yang daripada menambah LED, mengurangkannya. Ini penurunan pada sisi naik salah satu modul div jam yang kami pinjam dan ubah suai (downcounterclock.vhd). Sebaik sahaja satu LED dimatikan, satu titik kesihatan dipotong dari keseluruhan kesihatan pemain dua. Sekiranya selama proses ini dua pemain mencapai 0 kesihatan, kita berhenti dan segera beralih ke keadaan "Game over". Jika tidak, apabila vektor LED mencapai "0000000000000000", kita beralih ke giliran pemain dua.

Nyatakan 4: Giliran Pemain Dua Giliran pemain dua sama seperti giliran pemain satu, kecuali daftar geser untuknya (Ptwo.bhd) bergerak dari kiri ke kanan, dan suis berada di sebelah kanan papan. Isyarat diaktifkan untuk memaparkan paparan kesihatan Pemain 1. Setelah suis 2 aktif, ini beralih ke giliran pemotongan Pemain Dua.

Tahap 5: Pemotongan Pemain Dua Sama seperti giliran pemain dua, pemotongan pemain dua sama seperti pemotongan pemain satu. Perbezaan utama adalah bahawa daftar pergeseran yang mengawal pemadaman LED pergi ke arah yang bertentangan, yang merupakan pengubahsuaian mudah untuk dilakukan setelah anda memotong pemain yang berfungsi dengan baik.

Tahap 6: Permainan Berakhir Sekiranya pada tahap mana-mana pemain mencapai tahap kesihatan yang sifar, permainan beralih ke keadaan ini. Tiada paparan mewah. Sekiranya BTN ditekan, maka kesihatannya diset semula ke 99, dan keadaan kembali ke menu, dengan berkesan memulakan permainan.

Langkah 3: Modul

Modul
Modul

Rajah Kotak Hitam untuk Permainan

Downcounterclock (berdasarkan modul clk_div.vhd oleh Bryan Mealy):

Ini adalah jam yang menangani masa pemotong. Pemalar bernama max_count 3x lebih banyak daripada pemalar max_count barclock. Ini akan menjadikan pemotong 3x lebih perlahan daripada kelajuan palang.

Barclock - (berdasarkan modul clk_div.vhd oleh Bryan Mealy):

Jam ini menangani masa pengukur daya, yang kami buat dengan cepat untuk menambahkan kesukaran pada permainan. Waktu ini dapat disesuaikan dengan keinginan anda, meningkatkan kecepatan dengan menjadikan jumlah maksimum_ jumlah tetap menjadi lebih besar, atau menurunkannya dengan membuat jumlah_paksimum menjadi bilangan yang lebih kecil. Sseg_dec - (Ditulis oleh Bryan Mealy): Modul ini mengambil nombor 8 bit sebagai input, yang disahkodkan, menukar nombor menjadi setara perpuluhannya, dan kemudian output ke paparan tujuh segmen. Agar fail ini berfungsi, anda perlu memastikan kekangan anda sesuai dengan masalah kami.

Pone:

Ini adalah daftar pergeseran yang menggeser bit ke kiri, menambahkan satu bit panas untuk membuatnya kelihatan seperti tolok kuasa yang semakin meningkat. Apabila semua bit panas, semua bit diset semula ke ‘0’, dan kitaran bermula semula.

Ptwo:

Ini adalah versi terbalik dari modul P1.

Deduktor1:

Ini adalah gabungan dari register shift dan subtraktor. Register shift bergerak ke arah yang berlawanan dari register shift P1, yang menunjukkan pemotongan. Ini juga mengurangkan 1 dari kesihatan Pemain 2 untuk setiap pusingan jam, jadi dengan kombinasi kedua fungsi ini, kesihatan lawan akan kelihatan seperti penurunan 1 untuk setiap bar bar kesihatan yang turun.

Deductor2: Ini adalah versi fledped dari modul Deductor1.

PlayDecoder (dipinjam dan dimodifikasi secara perlahan dari ekchen35649 arahannya 133): Ini digunakan dalam keadaan menu untuk memaparkan perkataan "MAIN" pada penyahkod tujuh segmen.

Langkah 4: Uji

Permainan ini pada mulanya diilhamkan oleh salah satu permainan mini dari Kirby. Ini adalah permainan dua pemain sederhana yang boleh dimainkan di Papan Basys 3, atau FPGA mana pun.

Langkah 1: Bahan yang Diperlukan

Anda akan memerlukan: Digilent Basys 3, FPGA Board (atau yang lain) Versi Vivado yang agak terkini, atau persekitaran vhdl lain Komputer yang dapat menjalankan program yang disebutkan Otak

Langkah 2: Permainan Sendiri

Cara bermain

Untuk memulakan, anda menekan butang tengah. Ini akan menyebabkan "99", yang menunjukkan kesihatan pemain dua, untuk dipaparkan pada paparan tujuh segmen. Kemudian, LED akan menyala secara berurutan dari kanan ke kiri. Ini membentuk bar kuasa. Setelah bar kuasa penuh, ia akan ditetapkan semula. Objek pemain adalah untuk menukar suis mereka apabila palang setinggi mungkin. Semakin banyak LED menyala, semakin banyak kerosakan pemain yang dilakukan oleh pemain dua. Setelah pemain mengundurkan suisnya, kerosakan yang ditanggung dikurangkan dari kesihatan pemain dua. Kemudian, ia beralih ke giliran pemain dua. Sekarang, nombor yang ditunjukkan mewakili kesihatan pemain, dan bar kuasa mengisi dari kiri ke kanan. Setelah pemain dua bergerak, kerosakan akan ditolak, dan gilirannya kembali kepada pemain. Ini berulang sehingga satu pemain mencapai 0 kesihatan. Video mengenai fungsi ini dilampirkan.

Untuk bermain permainan, muatkan di papan basys, dan tekan butang tengah. Cuba putar suis dengan seberapa banyak LED yang aktif, dan kemudian tunggu dan perhatikan ketika papan memotong mata tersebut dari kesihatan lawan anda. Kemudian, serahkan kepada rakan anda, dan

Langkah 3: FSM

Permainan ini pada dasarnya adalah satu mesin keadaan terhingga besar, yang logik kompleks berlaku berdasarkan keadaan di mana FSM berada.

(Gambarajah Negeri)

Nyatakan 1: Menu

Keadaan pertama adalah skrin menu, yang merupakan salah satu keadaan yang lebih sederhana. Ini termasuk tampilan tujuh segmen yang menampilkan kata "MAIN", dan tombol yang menyebabkan permainan dimulakan. Butang, BTN, membawa kita ke keadaan seterusnya, iaitu giliran pemain satu.

Nyatakan 2: Giliran Pemain Satu

Giliran pemain satu mengaktifkan isyarat yang menyebabkan paparan tujuh segmen menunjukkan kesihatan Pemain dua. Isyarat lain menyala untuk mengaktifkan shift shift yang diimport dari modul lain yang kami buat (Pone.vhd). Daftar pergeseran ini menjadikan lampu LED menyala seperti pengukur daya yang meningkat pada permainan lain, dan kemudian akan diset semula ke 0 ketika mencapai jumlah maksimum LED yang dapat menyala. Ia mengemas kini bahagian tepi jam yang diperoleh dari barclock.vhd, yang diubah suai dari fail makmal yang dipinjam. Kami mempunyai bar pemain satu bermula dari kanan, dan mengisi ke kiri, kerana suis pemain satu juga berada di sebelah kiri (untuk pengalaman pengguna yang intuitif). Setelah suis dibalik, keadaan beralih ke pemain satu tolak, dan jumlah aktif LED disimpan dalam isyarat.

Nyatakan 3: Pemotongan Pemain Satu

Isyarat dengan jumlah aktif LED menentukan jumlah kesihatan yang dikurangkan. Ini dilakukan dengan mempunyai register pergeseran lain (deductor1.vhd) yang daripada menambah LED, mengurangkannya. Ini penurunan pada kelebihan salah satu modul div jam yang kami pinjam dan ubah suai (downcounterclock.vhd). Sebaik sahaja satu LED dimatikan, satu titik kesihatan dipotong dari keseluruhan kesihatan pemain dua. Sekiranya selama proses ini dua pemain mencapai 0 kesihatan, kita berhenti dan segera beralih ke keadaan "Game over". Jika tidak, apabila vektor LED mencapai "0000000000000000", kita beralih ke giliran pemain dua.

Nyatakan 4: Giliran Pemain Dua

Giliran pemain dua sama seperti giliran pemain satu, kecuali daftar geser untuknya (Ptwo.bhd) bergerak dari kiri ke kanan, dan suis berada di sebelah kanan papan. Isyarat diaktifkan untuk memaparkan paparan kesihatan Pemain 1. Setelah suis 2 aktif, ini beralih ke giliran pemotongan Pemain Dua.

Tahap 5: Potongan Pemain Dua

Sama seperti giliran pemain dua, pemotongan pemain dua bertindak seperti pemotongan pemain satu. Perbezaan utama adalah bahawa daftar pergeseran yang mengawal pemadaman LED pergi ke arah yang bertentangan, yang merupakan pengubahsuaian mudah untuk dilakukan setelah anda memotong pemain yang berfungsi dengan baik.

Tahap 6: Permainan Berakhir Sekiranya pada tahap mana-mana pemain mencapai tahap kesihatan yang sifar, permainan beralih ke keadaan ini. Tiada paparan mewah. Sekiranya BTN ditekan, maka keadaan kesihatan ditetapkan semula ke 99, dan keadaan kembali ke menu, dengan berkesan memulakan permainan.

Kotak hitam

Langkah 4: Modul

Downcounterclock (berdasarkan modul clk_div.vhd oleh Bryan Mealy):

Ini adalah jam yang menangani masa pemotong. Pemalar bernama max_count 3x lebih banyak daripada pemalar max_count barclock. Ini akan menjadikan pemotong 3x lebih perlahan daripada kelajuan palang.

Barclock - (berdasarkan modul clk_div.vhd oleh Bryan Mealy): Jam ini menangani masa pengukur daya, yang kami buat dengan cepat untuk menambah kesukaran pada permainan. Waktu ini dapat disesuaikan dengan keinginan anda, meningkatkan kecepatan dengan menjadikan jumlah maksimum_ jumlah tetap menjadi lebih besar, atau menurunkannya dengan membuat jumlah_paksimum menjadi bilangan yang lebih kecil. Sseg_dec - (Ditulis oleh Bryan Mealy): Modul ini mengambil nombor 8 bit sebagai input, yang disahkodkan, menukar nombor menjadi setara perpuluhannya, dan kemudian output ke paparan tujuh segmen. Agar fail ini berfungsi, anda perlu memastikan kekangan anda sesuai dengan masalah kami.

Pone: Ini adalah register shift yang menggeser bit ke kiri, menambahkan satu bit panas untuk membuatnya kelihatan seperti tolok kuasa yang semakin meningkat. Apabila semua bit panas, semua bit diset semula ke ‘0’, dan kitaran bermula semula.

Ptwo: Ini adalah versi terbalik dari modul P1.

Deductor1: Ini adalah gabungan dari register shift dan subtraktor. Register shift bergerak ke arah yang berlawanan dari register shift P1, yang menunjukkan pemotongan. Ini juga mengurangkan 1 dari tahap kesihatan Pemain 2 untuk setiap pusingan jam, jadi dengan kombinasi kedua fungsi ini, kesihatan lawan akan kelihatan seperti penurunan 1 untuk setiap petunjuk bar kesihatan yang turun.

Deductor2: Ini adalah versi fledped dari modul Deductor1.

PlayDecoder (dipinjam dan sedikit diubah dari ekchen35649 133 arahannya):

Ini digunakan dalam keadaan menu untuk menampilkan kata "MAIN" pada penyahkod tujuh segmen.

Yang Perlu Dilakukan: gambar, video

Disyorkan: