Mundarija:
Video: 2 o'yinchi raqobatbardosh va boshqa vaqt o'yini: 4 qadam
2024 Muallif: John Day | [email protected]. Oxirgi o'zgartirilgan: 2024-01-30 13:27
Sizga kerak bo'ladi:
1. Digilent Basys 3, FPGA kengashi (yoki boshqa har qanday FPGA,)
2. Vivado yoki boshqa VHDL muhitining nisbatan yangilangan versiyasi
3. Ko'rsatilgan dasturni ishga tushiradigan kompyuter.
1 -qadam: O'yinning o'zi
FSM modullar bilan qanday aloqada.
Qanday o'ynash kerak
Boshlash uchun siz o'rta tugmani bosishingiz kerak. Bu "o'yinchi" ning sog'lig'ini aks ettiruvchi "99" raqamini etti segmentli displeyda ko'rsatilishiga olib keladi. Keyin LEDlar ketma -ket o'ngdan chapga yonadi. Bu quvvat paneli hosil qiladi. Quvvat paneli to'ldirilgach, u qayta tiklanadi. Birinchi o'yinchining maqsadi - bar iloji boricha balandroq bo'lsa, kalitni almashtirish. LEDlar qancha ko'p yonsa, o'yinchi ikkinchi o'yinchiga shunchalik ziyon etkazadi. Bir o'yinchi o'z kalitini almashtirgandan so'ng, etkazilgan zarar ikkinchi o'yinchining sog'lig'idan olinadi. Keyin, u o'yinchining ikki navbatiga o'tadi. Endi ko'rsatilgan raqam o'yinchining sog'lig'ini anglatadi va quvvat paneli chapdan o'ngga to'ldiriladi. Ikkinchi o'yinchi harakat qilgandan so'ng, zarar ushlab qolinadi va yana o'yinchi navbatiga qaytadi. Bu bitta o'yinchi sog'lig'i 0 ga yetguncha takrorlanadi. Bu ishning videosi ilova qilingan.
2 -qadam: FSM
Bu o'yin, aslida, bitta katta cheklangan holatli mashina bo'lib, u FSM joylashgan holatga asoslanib sodir bo'ladi.
1 -holat: Menyu Birinchi holat - bu oddiy holatlardan biri bo'lgan menyu ekrani. U "PLAY" so'zini ko'rsatadigan ettita segmentli displeyni va o'yinni boshlaydigan tugmani o'z ichiga oladi. BTN tugmasi bizni navbatdagi holatga olib boradi, bu esa o'yinchi o'z navbatida.
2 -holat: Birinchi o'yinchi navbat
O'yinchining bir burilishi signalni faollashtiradi, bu etti segmentli displeyda ikkinchi o'yinchining sog'lig'ini ko'rsatadi. Biz yaratgan boshqa moduldan (Pone.vhd) import qilingan smenali registrni faollashtirish uchun boshqa signal yoqiladi. Bu smenali registr LEDning yorug'ligini boshqa o'yinlarda kuchayib borayotgan quvvat o'lchagichi kabi yondiradi va u yoqilishi mumkin bo'lgan LEDlarning maksimal miqdoriga yetganda 0 ga qaytariladi. U qarz olingan laboratoriya faylidan o'zgartirilgan barclock.vhd -dan olingan soatning ko'tarilgan chekkasida yangilanadi. Bizda pleyerning bir satri o'ngdan boshlanadi va chapga to'ldiriladi, chunki o'yinchining kommutatori ham chapda (foydalanuvchi intuitiv tajribasi uchun). Kalit aylantirilgandan so'ng, davlat o'yinchiga bitta chegirmaga o'tadi va LED faolligi signalda saqlanadi.
3 -holat: Birinchi o'yinchi chegirmasi LED faolligi ko'rsatilgan signal, sog'liqni saqlash miqdorini belgilaydi. Bu svetodiodlarni ko'paytirish o'rniga ularni kamaytiradigan boshqa smenali registrga (deductor1.vhd) ega bo'lish orqali amalga oshiriladi. Bu biz qarz olgan va o'zgartirgan soat div modullaridan birining ko'tarilish chekkasida kamayadi (downcounterclock.vhd). Xuddi bitta LED o'chirilganida, ikkinchi o'yinchining umumiy sog'lig'idan bir nuqta sog'ligi chiqarib tashlanadi. Agar bu jarayon davomida ikki o'yinchi sog'lig'i 0 ga yetsa, biz to'xtab, darhol "O'yin tugadi" holatiga o'tamiz. Aks holda, LED vektori "0000000000000000" ga yetganda, biz ikkinchi o'yinchining navbatiga o'tamiz.
4 -holat: Ikkinchi o'yinchining burilishi Ikkinchi o'yinchining burilishi aynan o'yinchining navbatiga o'xshaydi, faqat uning almashish registri (Ptwo.bhd) chapdan o'ngga o'tadi va kalit taxtaning o'ng tomonida joylashgan. 1 -o'yinchining sog'lig'ini ko'rsatish uchun signal yoqiladi. 2 -tugmachani ishga tushirgandan so'ng, bu ikkinchi o'yinchining chegirmali navbatiga o'tadi.
5 -bosqich: Ikkinchi o'yinchining chegirmasi Ikki o'yinchining navbatida bo'lgani kabi, ikkita o'yinchi ham bir o'yinchiga o'xshaydi. Asosiy farq shundaki, LEDni o'chirishni boshqaruvchi smenali registr qarama -qarshi tomonga o'tadi, bu sizning o'yinchining chegirmasi to'g'ri ishlagandan so'ng uni o'zgartirish oson.
6 -bosqich: O'yin tugadi Agar biron bir o'yinchining sog'lig'i nolga yetsa, o'yin shu holatga o'tadi. Hech narsa chiroyli ko'rinmaydi. Agar BTN tugmachasi bosilsa, sog'lik 99 ga tiklanadi va shtat menyuga qaytadi va o'yinni samarali boshlaydi.
3 -qadam: Modullar
O'yin uchun qora quti diagrammasi
Quyi soat (Bryan Meali tomonidan clk_div.vhd moduliga asoslangan):
Bu deduktorlarning vaqtini boshqaradigan soat. Max_count deb nomlangan doimiy shtrixning max_count sobitidan 3 barobar ko'p. Bu deduktorlarni bar tezligidan 3 barobar sekinroq qiladi.
Barclock - (Bryan Mealy tomonidan clk_div.vhd moduli asosida):
Bu soat quvvat o'lchagichlarining vaqtini boshqaradi, biz o'yinga qiyinchilik qo'shish uchun tezlik bilan oshirdik. Bu vaqtni sizning xohishingizga ko'ra sozlash mumkin, max_count doimiy sonini kattaroq qilib tezlikni oshirish yoki max_countni kichikroq qilib kamaytirish. Sseg_dec - (Bryan Meali tomonidan yozilgan): Ushbu modul kirish uchun 8 bitli raqamni oladi, u dekodlanadi, raqamni o'nlik ekvivalentiga aylantiradi va keyin etti segmentli displeyga chiqadi. Bu fayl ishlashi uchun siz cheklovlaringiz biznikiga mos kelishiga ishonch hosil qilishingiz kerak.
Pone:
Bu bitni chapga siljitadigan, registrni quvvat o'lchagichi ortib borayotganga o'xshab ko'rinishi uchun bitta issiq tugmani qo'shadigan smenali registr. Barcha bitlar qizib ketganda, barcha bitlar "0" ga qaytariladi va tsikl qayta boshlanadi.
Ptwo:
Bu P1 modulining burilgan versiyasi.
Deduktor1:
Bu smenali registr va olib tashlovchining kombinatsiyasi. Shift registri P1 smenali registrining teskari yo'nalishi bo'yicha ketadi, bu chegirmani ko'rsatadi. Bu, shuningdek, har bir soat tsikli uchun 2 -o'yinchining sog'lig'idan 1 -ni olib tashlaydi, shuning uchun bu ikkita funktsiyani birlashtirganda, raqibning sog'lig'i pastga tushadigan har bir chiziq uchun 1 -ga kamayadi.
Deductor2: Bu Deductor1 modulining burilgan versiyasi.
PlayDecoder (ekchen35649 -dan qarzga olingan va o'zgartirilgan, uning 133 ko'rsatmasi): Bu menyu holatida etti segmentli dekoderda "PLAY" so'zini ko'rsatish uchun ishlatiladi.
4 -qadam: Sinov
Bu o'yin dastlab Kirbining mini o'yinlaridan biridan ilhomlangan. Bu oddiy ikki o'yinchi o'yini, uni Basys 3 taxtasida yoki har qanday FPGA-da o'ynash mumkin.
1 -qadam: kerakli materiallar
Sizga kerak bo'ladi: Digilent Basys 3, FPGA platasi (yoki boshqa) Vivadoning nisbatan yangilangan versiyasi yoki boshqa vhdl muhiti, yuqorida aytib o'tilgan A dasturini ishga tushiradigan kompyuter.
2 -qadam: O'yinning o'zi
Qanday o'ynash kerak
Boshlash uchun siz o'rta tugmani bosishingiz kerak. Bu "o'yinchi" ning sog'lig'ini aks ettiruvchi "99" raqamini etti segmentli displeyda ko'rsatilishiga olib keladi. Keyin LEDlar ketma -ket o'ngdan chapga yonadi. Bu quvvat paneli hosil qiladi. Quvvat paneli to'ldirilgach, u qayta tiklanadi. Birinchi o'yinchining maqsadi - bar iloji boricha balandroq bo'lsa, kalitni almashtirish. LEDlar qancha ko'p yonsa, o'yinchi ikkinchi o'yinchiga shunchalik ziyon etkazadi. Bir o'yinchi o'z tugmachasini aylantirgandan so'ng, etkazilgan zarar ikkinchi o'yinchining sog'lig'idan olinadi. Keyin, u o'yinchining ikki navbatiga o'tadi. Endi ko'rsatilgan raqam o'yinchining sog'lig'ini anglatadi va quvvat paneli chapdan o'ngga to'ldiriladi. Ikkinchi o'yinchi harakat qilgandan so'ng, zarar ushlab qolinadi va yana o'yinchi navbatiga qaytadi. Bu bitta o'yinchi sog'lig'i 0 ga yetguncha takrorlanadi. Bu ishning videosi ilova qilingan.
O'yinni o'ynash uchun uni asosiy taxtaga yuklang va o'rta tugmani bosing. Kommutatorni iloji boricha faol LED yoritgichi bilan aylantirishga harakat qiling, so'ngra taxtada bu fikrlar raqibingizning sog'lig'idan chiqarilishini kuting. Keyin uni do'stingizga topshiring va
3 -qadam: FSM
Bu o'yin, aslida, FSM joylashgan holatga asoslanib sodir bo'ladigan murakkab mantiqiy bitta katta cheklangan davlat mashinasidir.
(Davlat diagrammasi)
1 -holat: Menyu
Birinchi holat - bu menyu ekrani, bu oddiy holatlardan biri. U "PLAY" so'zini ko'rsatadigan ettita segmentli displeyni va o'yinni boshlaydigan tugmani o'z ichiga oladi. BTN tugmasi bizni navbatdagi holatga olib boradi, bu esa o'yinchi o'z navbatida.
2 -holat: Birinchi o'yinchi navbat
O'yinchining bir burilishi signalni faollashtiradi, bu esa etti segmentli displeyda ikkinchi o'yinchining sog'lig'ini ko'rsatadi. Biz yaratgan boshqa moduldan (Pone.vhd) import qilingan smenali registrni faollashtirish uchun boshqa signal yoqiladi. Bu smenali registr LEDning yorug'ligini boshqa o'yinlarda kuchayib borayotgan quvvat o'lchagichi kabi yoritadi va u yoqilishi mumkin bo'lgan LEDlarning maksimal miqdoriga yetganda 0 ga qaytadi. U qarz olingan laboratoriya faylidan o'zgartirilgan barclock.vhd -dan olingan soatning ko'tarilgan chekkasida yangilanadi. Bizda pleyerning bir satri o'ngdan boshlanadi va chapga to'ldiriladi, chunki o'yinchining kommutatori ham chapda (foydalanuvchi intuitiv tajribasi uchun). O'chirish tugmasi bosilgandan so'ng, davlat o'yinchiga bitta chegirmaga o'tadi va LED faolligi signalda saqlanadi.
3 -holat: Birinchi o'yinchi chegirma
Svetodiod faolligini ko'rsatadigan signal, sog'liqni saqlash miqdorini aniqlaydi. Bu svetodiodlarni ko'paytirish o'rniga ularni kamaytiradigan boshqa smenali registrga (deductor1.vhd) ega bo'lish orqali amalga oshiriladi. Bu biz qarz olgan va o'zgartirgan soat div modullaridan birining ko'tarilish chekkasida kamayadi (downcounterclock.vhd). Xuddi bitta LED o'chirilganida, ikkinchi o'yinchining umumiy sog'lig'idan bir nuqta sog'ligi chiqarib tashlanadi. Agar bu jarayon davomida ikkita o'yinchi sog'lig'i 0 ga yetsa, biz to'xtab, darhol "O'yin tugadi" holatiga o'tamiz. Aks holda, LED vektori "0000000000000000" ga yetganda, biz ikkinchi o'yinchining navbatiga o'tamiz.
4 -holat: Ikkinchi o'yinchi navbat
Ikkinchi o'yinchining burilishi aynan o'yinchining navbatiga o'xshaydi, faqat uning almashish registri (Ptwo.bhd) chapdan o'ngga o'tadi va kalit taxtaning o'ng tomonida joylashgan. 1 -o'yinchining sog'lig'ini ko'rsatish uchun signal yoqiladi. 2 -tugmachani ishga tushirgandan so'ng, bu ikkinchi o'yinchining chegirmali navbatiga o'tadi.
5 -bosqich: Ikkinchi o'yinchi chegirma
Xuddi ikkinchi o'yinchi navbatida bo'lgani kabi, ikkita o'yinchi ham bir chegirmaga o'xshaydi. Asosiy farq shundaki, LEDni o'chirishni boshqaruvchi smenali registr qarama -qarshi yo'nalishda harakat qiladi, bu sizning o'yinchining chegirmasi to'g'ri ishlagandan so'ng uni o'zgartirish oson.
6 -bosqich: O'yin tugadi Agar biron bir o'yinchining sog'lig'i nolga yetsa, o'yin shu holatga o'tadi. Hech narsa chiroyli ko'rinmaydi. Agar BTN tugmachasi bosilsa, sog'lik 99 ga tiklanadi va shtat menyuga qaytadi va o'yinni samarali boshlaydi.
Qora quti
4 -qadam: Modullar
Quyi soat (Bryan Meali tomonidan clk_div.vhd moduliga asoslangan):
Bu deduktorlarning vaqtini boshqaradigan soat. Max_count nomli doimiy shtrixning max_count sobitidan 3 barobar ko'p. Bu deduktorlarni bar tezligidan 3 barobar sekinroq qiladi.
Barclock - (Bryan Mealy tomonidan ishlab chiqarilgan clk_div.vhd moduliga asoslangan): Bu soat o'yinni qiyinlashtirishi uchun biz tezlik bilan oshirgan quvvat o'lchagichlarining vaqtini boshqaradi. Bu vaqtni sizning xohishingizga ko'ra sozlash mumkin, max_count doimiy sonini kattaroq qilib tezlikni oshirish yoki max_countni kichikroq qilib kamaytirish. Sseg_dec - (Bryan Meali tomonidan yozilgan): Ushbu modul kirish uchun 8 bitli raqamni oladi, u dekodlanadi, raqamni o'nlik ekvivalentiga aylantiradi va keyin etti segmentli displeyga chiqadi. Bu fayl ishlashi uchun siz cheklovlaringiz biznikiga mos kelishiga ishonch hosil qilishingiz kerak.
Pone: Bu registr registr bo'lib, u bitlarni chapga siljitadi va quvvat o'lchagichi ortib borayotganga o'xshab ko'rinishi uchun bitta hot bit qo'shadi. Barcha bitlar qizib ketganda, barcha bitlar "0" ga qaytariladi va tsikl qayta boshlanadi.
Ptwo: Bu P1 modulining burilgan versiyasi.
Deductor1: Bu smenali registr va olib tashlovchining kombinatsiyasi. Shift registri P1 smenali registrining teskari yo'nalishi bo'yicha ketadi, bu chegirmani ko'rsatadi. Bu, shuningdek, har bir soat tsikli uchun 2 -o'yinchining sog'lig'idan 1 -ni olib tashlaydi, shuning uchun bu ikki funktsiyani birlashtirganda, raqibning sog'lig'i pastga tushadigan har bir chiziq uchun 1 -ga kamayadi.
Deductor2: Bu Deductor1 modulining burilgan versiyasi.
PlayDecoder (ekchen35649dan olingan va biroz o'zgartirilgan, uning 133 ko'rsatmasi):
Bu menyu holatida etti segmentli dekoderda "PLAY" so'zini ko'rsatish uchun ishlatiladi.
Amal qilish: rasmlar, video
Tavsiya:
Aruduino LED O'yini Ikki O'yinchi O'yinini Tez bosish: 8 qadam
Aruduino LED O'yini Ikki O'yinchi O'yinini Tez Kliklash: Bu loyiha @HassonAlkeimdan ilhomlangan. Agar siz bu erga chuqurroq nazar tashlamoqchi bo'lsangiz, havolani https://www.instructables.com/id/Arduino-Two-Player-Fast-Button-Clicking-Game/ havolasida ko'rishingiz mumkin. Bu o'yin Alkeimning takomillashtirilgan versiyasidir. Bu bir
8x16 LED matritsali pong o'yini (har bir o'yinchi versiyasiga 2 ta belkurak): 3 qadam
8x16 LED matritsali pong o'yini (har bir o'yinchi versiyasiga 2 ta belkurak): Menga 8x8 o'lchamli LED matritsasi yordamida Arduino -da ishlatilgan klassik pong o'yinining ko'p turlaridan ilhomlangan. Bu yo'riqnomada men sizga har bir o'yinchi uchun ikkita eshkakli - hujumchi va darvozabonli sevimli Pong versiyasini qanday qurishni ko'rsataman.
O'yinchi oddiy o'yini: 12 qadam
O'yinchi oddiy o'yini: Bu o'yin oddiy (ehtimol siz sarlavha orqali bilasiz). Uning bitta bloki bor (u sizsiz) va u boshqa platformali yoki boshqa rangli blokdan iborat. Bu o'yin uchun sizga kerak bo'ladi: A yo yo o'yinlari Gamemaker studio 2 ga kirish uchun hisob
Vaqt bomba o'yini qanday o'chiriladi: 6 qadam
Vaqt bomba o'yinini qanday o'chirish mumkin: Bu fikr menga g'oyib bo'ldi. Men haqiqatan ham shunga o'xshash narsani topa olmadim. Asl g'oya ko'proq ishtirok etdi, shuning uchun bu o'yinning soddalashtirilgan versiyasi. Bu "vaqt bombasi". Siz uni soatdan oldin o'chirishingiz kerak
Kichik limonli batareya va nolli elektr energiyasi va batareyasiz boshqa yorug'lik uchun boshqa dizaynlar: 18 qadam (rasmlar bilan)
Kichkina limonli batareya va nolga teng elektr energiyasi va akkumulyatorsiz yorug'lik uchun boshqa dizaynlar: Salom, ehtimol siz limon batareyalari yoki bio-batareyalar haqida bilasiz. Ular odatda o'quv maqsadlarida ishlatiladi va ular past kuchlanishli elektrokimyoviy reaktsiyalardan foydalanadilar, ular odatda yonib turgan lampochka yoki lampochka ko'rinishida ko'rsatiladi. Bular