Բովանդակություն:
Video: 2 խաղացողի մրցակցային VS ժամանակային խաղ. 4 քայլ
2024 Հեղինակ: John Day | [email protected]. Վերջին փոփոխված: 2024-01-30 09:50
Ձեզ հարկավոր կլինի.
1. Digilent Basys 3, FPGA Board (կամ որևէ այլ FPGA,)
2. Vivado- ի կամ այլ VHDL միջավայրի համեմատաբար արդիական տարբերակ
3. Համակարգիչ, որը կարող է գործարկել նշված ծրագիրը:
Քայլ 1. Խաղն ինքնին
Ինչպես է FSM- ն փոխազդում մոդուլների հետ:
Ինչպես խաղալ
Սկսելու համար սեղմեք միջին կոճակը: Սա կհանգեցնի նրան, որ «99» -ը, որը ներկայացնում է խաղացողի երկրորդ վիճակը, կցուցադրվի յոթ հատվածի էկրանին: Այնուհետեւ, LED- ները հաջորդաբար կլուսավորվեն աջից ձախ: Սա ձևավորում է հոսանքի գոտի: Էլեկտրաէներգիայի սանդղակը լցվելուց հետո այն վերակայվում է: Խաղացողի առաջին նպատակն է շրջել իրենց անջատիչը, երբ բարը հնարավորինս բարձր է: Որքան ավելի շատ լուսադիոդային լուսարձակներ են լուսավորվում, այնքան ավելի մեծ վնաս է հասցնում նվագարկիչը երկրորդին: Այն բանից հետո, երբ խաղացողներից մեկը շրջում է իր անջատիչը, պատճառված վնասը հանվում է երկրորդ խաղացողի առողջությունից: Այնուհետև այն անցնում է խաղացողի հերթին: Այժմ ցուցադրված թիվը ներկայացնում է խաղացողի առողջությունը, և հոսանքի տողը լրացվում է ձախից աջ: Երբ երկրորդ խաղացողը կատարում է իր քայլը, վնասը հանվում է, և այն կրկին վերադառնում է խաղացողի հերթին: Սա կրկնվում է այնքան ժամանակ, մինչև մեկ խաղացող կհասնի 0 առողջության: Այս աշխատանքի տեսագրությունը կցված է:
Քայլ 2: FSM
Այս խաղը, ըստ էության, մեկ մեծ սահմանափակ մեքենա է, որը տեղի է ունենում մի բարդ տրամաբանությամբ ՝ հիմնվելով այն վիճակի վրա, որում գտնվում է FSM- ը:
Պետություն 1. Մենյու Առաջին վիճակը ցանկի էկրանն է, որն ավելի պարզ վիճակներից է: Այն ներառում է յոթ հատվածի ցուցադրում, որը ցուցադրում է «PLAY» բառը և այն կոճակը, որն առաջացնում է խաղի սկիզբը: BTN կոճակը մեզ տանում է դեպի հաջորդ վիճակ, որը հերթն է խաղացողի:
Պետություն 2. Խաղացողի հերթը
Խաղացողի հերթը միացնում է ազդանշանը, որի արդյունքում յոթ հատվածի էկրանին ցուցադրվում է նվագարկչի երկրորդի առողջությունը: Մեկ այլ ազդանշան է միանում ՝ մեր ստեղծած մեկ այլ մոդուլից ներմուծված հերթափոխի գրանցամատյան ակտիվացնելու համար: Այս հերթափոխի գրանցամատյանը լուսարձակում է LED- ի լույսը, ինչպես մյուս խաղերում աճող հզորության չափիչը, և այն կվերականգնվի 0 -ի, երբ այն հասնի լուսադիոդների առավելագույն քանակին, որը հնարավոր է լուսավորել: Այն թարմացվում է barclock.vhd- ից ստացված ժամացույցի աճող եզրին, որը փոփոխված է փոխառված լաբորատոր ֆայլից: Մենք ունեինք նվագարկչի բարը սկսած աջից և լրացնելով մինչև ձախը, քանի որ խաղացողի անջատիչը նույնպես ձախ կողմում է (օգտագործողի ինտուիտիվ փորձի համար): Անջատիչը շրջվելուց հետո վիճակը անցնում է նվագարկիչի մեկ նվազեցման վրա, և LED- ի ակտիվի չափը պահվում է ազդանշանում:
Նահանգ 3. Առաջին խաղացողը նվազեցնում է LED- ի ակտիվի չափով ազդանշանը որոշում է նվազեցվող առողջության չափը: Դա արվում է մեկ այլ հերթափոխի գրանցամատյան ունենալու միջոցով (deductor1.vhd), որը ոչ թե ավելացնում է LED- ները, այլ նվազեցնում դրանք: Սա նվազում է ժամացույցի div մոդուլներից մեկի աճող եզրին, որը մենք վերցրել և փոփոխել ենք (downcounterclock.vhd): Հենց որ մեկ LED- ն անջատված է, առողջության մեկ միավորը հանվում է խաղացողի երկրորդ ընդհանուր առողջությունից: Եթե այս գործընթացի ընթացքում խաղացողի երկուսը հասնում են 0 -ի առողջության, մենք կանգ ենք առնում և անմիջապես անցնում «Խաղ ավարտված» վիճակին: Հակառակ դեպքում, երբ LED վեկտորը հասնի «000000000000000000» -ին, մենք անցնում ենք խաղացողի երկրորդ հերթին:
Պետություն 4. Երկրորդ խաղացողի հերթը Խաղացողի երկուսի հերթը նույնն է, ինչ հերթը մեկին: Ազդանշանը ակտիվանում է ՝ Player 1 -ի առողջ էկրան ունենալու համար: Երբ անջատիչ 2 -ն ակտիվ է, այն անցնում է Երկրորդ խաղացողի նվազեցման շրջադարձին:
Փուլ 5. Երկրորդ խաղացողը հանում է Ինչպես խաղացողի հերթը, այնպես էլ երկու խաղացողի պահվածքը շատ նման է մեկ խաղացողի: Հիմնական տարբերությունն այն է, որ հերթափոխի գրանցամատյանը, որը վերահսկում է LED- ի անջատումը, ընթանում է հակառակ ուղղությամբ, ինչը հեշտ փոփոխություն է, երբ խաղացողը նվազեցումը ճիշտ աշխատի:
Փուլ 6. Ոչ մի շքեղ ցուցադրում: Եթե BTN մեկը սեղմված է, ապա առողջությունը վերականգնվում է 99 -ի, և վիճակը վերադառնում է ընտրացանկ ՝ արդյունավետ խաղը սկսելով:
Քայլ 3: Մոդուլներ
Սև արկղի դիագրամ խաղի համար
Downcounterclock (հիմնված clk_div.vhd մոդուլի կողմից ՝ Բրայան Միլիի կողմից).
Սա այն ժամացույցն է, որը կարգավորում է նվազեցումների ժամանակը: Max_count անունով հաստատունը 3x -ով ավել է, քան ժամացույցի max_count հաստատունից: Սա նվազեցնող սարքերը 3 անգամ ավելի դանդաղ կդարձնի ձողի արագությունից:
Barclock - (հիմնված clk_div.vhd մոդուլի կողմից ՝ Բրայան Միլիի կողմից).
Այս ժամացույցը կարգավորում է էներգաչափիչների ժամանակը, որը մենք արագորեն ավելացրեցինք ՝ խաղին դժվարություն ավելացնելու համար: Այս ժամանակը կարող է ճշգրտվել ըստ ձեր ցանկության ՝ արագությունը մեծացնելով ՝ հաստատուն max_count- ը ավելի մեծ թիվ դարձնելով, կամ նվազեցնելով ՝ max_count- ը ավելի փոքր թիվ դարձնելով: Sseg_dec - (Գրված է Բրայան Միլիի կողմից). Այս մոդուլը որպես մուտքագրում վերցնում է 8 բիթանոց համար, որը վերծանում է ՝ համարը վերածելով տասնորդական համարժեքի, այնուհետև ՝ ելքեր յոթ հատվածի ցուցադրման: Որպեսզի այս ֆայլը աշխատի, դուք պետք է համոզվեք, որ ձեր սահմանափակումները համապատասխանում են մերին:
Պոնե:
Սա հերթափոխի գրանցամատյան է, որը բիթերը տեղափոխում է ձախ ՝ ավելացնելով մեկ տաք բիթ, որպեսզի այն տեսնի, որ ուժաչափը մեծանում է: Երբ բոլոր բիթերը տաք են, բոլոր բիթերը վերակայվում են «0», և ցիկլը սկսվում է նորից:
Ptwo:
Սա P1 մոդուլի շրջված տարբերակն է:
Դեդուկտոր 1:
Սա հերթափոխի գրանցամատյանի և հանողի համադրություն է: Հերթափոխի ռեգիստրը գնում է P1- ի հերթափոխի մատյանների հակառակ ուղղությամբ ՝ նշելով նվազեցում: Սա նաև խաղացողի 2 -ի առողջությունից հանում է 1 ժամացույցի յուրաքանչյուր ցիկլի համար, այնպես որ այս երկու գործառույթների համադրությամբ, թվում է, թե հակառակորդի առողջությունը 1 -ով նվազում է առողջության սանդղակի իջեցման համար:
Deductor2: Սա Deductor1 մոդուլի շրջված տարբերակն է:
PlayDecoder (փոխառված և դանդաղ փոփոխված ekchen35649- ից իր 133 -ի ուսանելի). Սա օգտագործվում է ընտրացանկի վիճակում ՝ յոթ հատվածի ապակոդավորման վրա «PLAY» բառը ցուցադրելու համար:
Քայլ 4: Փորձարկում
Այս խաղն ի սկզբանե ոգեշնչված էր Կիրբիի մինի խաղերից մեկով: Դա պարզ երկու խաղացող խաղ է, որը կարելի է խաղալ Basys 3 խաղատախտակի վրա կամ ցանկացած FPGA- ի վրա:
Քայլ 1: Պահանջվող նյութեր
Ձեզ հարկավոր կլինի ՝ Digilent Basys 3, FPGA Board (կամ որևէ այլ) Vivado- ի համեմատաբար արդիական տարբերակ կամ այլ vhdl միջավայր Համակարգիչ, որը կարող է գործարկել նշված ուղեղը A
Քայլ 2. Խաղն ինքնին
Ինչպես խաղալ
Սկսելու համար սեղմեք միջին կոճակը: Սա կհանգեցնի նրան, որ «99» -ը, որը ներկայացնում է երկրորդ խաղացողի առողջությունը, կցուցադրվի յոթ հատվածի ցուցադրման վրա: Այնուհետեւ, LED- ները հաջորդաբար կլուսավորվեն աջից ձախ: Սա ձևավորում է հոսանքի գոտի: Էլեկտրաէներգիայի սանդղակը լցվելուց հետո այն վերակայվում է: Խաղացողի առաջին նպատակն է շրջել իրենց անջատիչը, երբ բարը հնարավորինս բարձր է: Որքան ավելի շատ լուսադիոդային լուսարձակներ վառվեն, այնքան ավելի մեծ վնաս է հասցնում նվագարկիչը երկրորդին: Այն բանից հետո, երբ խաղացողներից մեկը շրջում է իր անջատիչը, պատճառված վնասը հանվում է խաղացողի երկրորդ առողջությունից: Այնուհետև այն անցնում է խաղացողի հերթին: Այժմ ցուցադրված թիվը ներկայացնում է խաղացողի առողջությունը, և հոսանքի տողը լրացվում է ձախից աջ: Երբ երկրորդ խաղացողը կատարում է իր քայլը, վնասը հանվում է, և այն կրկին վերադառնում է խաղացողի հերթին: Սա կրկնվում է այնքան ժամանակ, մինչև մեկ խաղացող կհասնի 0 առողջության: Այս աշխատանքի տեսագրությունը կցված է:
Խաղը խաղալու համար տեղադրեք այն տախտակի վրա և սեղմեք միջին կոճակը: Փորձեք շեղել անջատիչը հնարավորինս շատ LED- ով, այնուհետև սպասեք և դիտեք, թե ինչպես է տախտակը այդ միավորները հանում ձեր հակառակորդի առողջությունից: Այնուհետև փոխանցեք այն ձեր ընկերոջը և
Քայլ 3: FSM
Այս խաղը, ըստ էության, մեկ մեծ սահմանափակ մեքենա է, որը տեղի է ունենում մի բարդ տրամաբանությամբ ՝ հիմնվելով այն վիճակի վրա, որում գտնվում է FSM- ը:
(Պետական դիագրամ)
Պետություն 1. Մենյու
Առաջին վիճակը ցանկի էկրանն է, որն ավելի պարզ վիճակներից է: Այն ներառում է յոթ հատվածի ցուցադրում, որը ցուցադրում է «PLAY» բառը և այն կոճակը, որն առաջացնում է խաղի սկիզբը: BTN կոճակը մեզ տանում է դեպի հաջորդ վիճակ, որը հերթն է խաղացողի:
Պետություն 2. Խաղացողի հերթը
Խաղացողի հերթը միացնում է ազդանշանը, որի արդյունքում յոթ հատվածի էկրանին ցուցադրվում է նվագարկիչի երկրորդի առողջությունը: Մեկ այլ ազդանշան է միանում ՝ մեր ստեղծած մեկ այլ մոդուլից ներմուծված հերթափոխի գրանցամատյան ակտիվացնելու համար: Այս հերթափոխի գրանցամատյանը լուսարձակում է LED- ի լույսը, ինչպես մյուս խաղերում աճող հզորության չափիչը, և այն կվերականգնվի 0 -ի, երբ այն հասնի լուսադիոդների առավելագույն քանակին, որը հնարավոր է լուսավորել: Այն թարմացվում է barclock.vhd- ից ստացված ժամացույցի աճող եզրին, որը փոփոխված է փոխառված լաբորատոր ֆայլից: Մենք ունեինք նվագարկչի բարը սկսած աջից և լրացնելով մինչև ձախը, քանի որ խաղացողի անջատիչը նույնպես ձախ կողմում է (օգտագործողի ինտուիտիվ փորձի համար): Անջատիչը շրջվելուց հետո վիճակը անցնում է նվագարկիչի մեկ նվազեցման վրա, և LED- ի ակտիվի չափը պահվում է ազդանշանում:
Պետություն 3. Խաղացող One նվազեցում
LED- ի ակտիվի չափով ազդանշանը որոշում է առողջության չափը, որը հանվում է: Դա արվում է մեկ այլ հերթափոխի գրանցամատյան ունենալու միջոցով (deductor1.vhd), որը ոչ թե ավելացնում է LED- ները, այլ նվազեցնում դրանք: Սա նվազում է ժամացույցի div մոդուլներից մեկի աճող եզրին, որը մենք վերցրել և փոփոխել ենք (downcounterclock.vhd): Հենց որ մեկ LED- ն անջատված է, առողջության մեկ միավորը հանվում է խաղացողի երկրորդ ընդհանուր առողջությունից: Եթե այս գործընթացի ընթացքում խաղացողի երկուսը հասնում են 0 -ի առողջության, մենք կանգ ենք առնում և անմիջապես անցնում «Խաղ ավարտված» վիճակին: Հակառակ դեպքում, երբ LED վեկտորը հասնի «000000000000000000» -ին, մենք անցնում ենք խաղացողի երկրորդ հերթին:
Պետություն 4. Խաղացողի հերթը հերթն է
Երկրորդ խաղացողի հերթը նույնն է, ինչ հերթը մեկին: Ազդանշանը ակտիվանում է ՝ Player 1 -ի առողջ էկրան ունենալու համար: Երբ անջատիչ 2 -ն ակտիվ է, այն անցնում է Երկրորդ խաղացողի նվազեցման շրջադարձին:
5 -րդ փուլ. Խաղացողի երկրորդ հանում
Ինչպես խաղացողի հերթը երկուն է, այնպես էլ խաղացող երկու պահումները շատ նման են մեկ խաղացողի: Հիմնական տարբերությունն այն է, որ հերթափոխի գրանցամատյանը, որը վերահսկում է LED- ի անջատումը, ընթանում է հակառակ ուղղությամբ, ինչը հեշտ փոփոխություն է, երբ խաղացողը նվազեցումը ճիշտ աշխատի:
Փուլ 6. Ոչ մի շքեղ ցուցադրում: Եթե BTN մեկը սեղմված է, ապա առողջությունը վերականգնվում է 99 -ի, և վիճակը վերադառնում է ընտրացանկ ՝ արդյունավետ խաղը սկսելով:
Սեւ տուփ
Քայլ 4: Մոդուլներ
Downcounterclock (հիմնված clk_div.vhd մոդուլի կողմից ՝ Բրայան Միլիի կողմից).
Սա այն ժամացույցն է, որը կարգավորում է նվազեցումների ժամանակը: Max_count անունով հաստատունը 3x -ով ավելի է, քան ժամացույցի max_count հաստատունից: Սա նվազեցնող սարքերը 3 անգամ ավելի դանդաղ կդարձնի ձողի արագությունից:
Clամացույց - (հիմնված է clk_div.vhd մոդուլի կողմից ՝ Բրայան Միլիի) Այս ժամանակը կարող է ճշգրտվել ըստ ձեր ցանկության ՝ արագությունը մեծացնելով ՝ հաստատուն max_count- ը ավելի մեծ թիվ դարձնելով, կամ նվազեցնելով ՝ max_count- ը ավելի փոքր թիվ դարձնելով: Sseg_dec - (Գրված է Բրայան Միլիի կողմից). Այս մոդուլը որպես մուտքագրում վերցնում է 8 բիթանոց համար, որը վերծանում է ՝ համարը վերածելով տասնորդական համարժեքի, այնուհետև ելքը յոթ հատվածի ցուցադրման: Որպեսզի այս ֆայլը աշխատի, դուք պետք է համոզվեք, որ ձեր սահմանափակումները համապատասխանում են մերին:
Պոնե. Սա հերթափոխի գրանցամատյան է, որը բիթերը տեղափոխում է ձախ ՝ ավելացնելով մեկ տաք բիթ, որպեսզի այն տեսք ունենա, որ ուժաչափը մեծանում է: Երբ բոլոր բիթերը տաք են, բոլոր բիթերը վերակայվում են «0», և ցիկլը սկսվում է նորից:
Ptwo: Սա P1 մոդուլի շրջված տարբերակն է:
Դեդուկտոր 1. Սա հերթափոխի գրանցիչի և հանողի համակցություն է: Հերթափոխի ռեգիստրը գնում է P1- ի հերթափոխի մատյանների հակառակ ուղղությամբ ՝ նշելով նվազեցում: Սա նաև խաղացողի 2 -ի առողջությունից հանում է 1 ժամացույցի յուրաքանչյուր ցիկլի համար, այնպես որ այս երկու գործառույթների համադրությամբ, թվում է, թե հակառակորդի առողջությունը 1 -ով նվազում է առողջության սանդղակի իջեցման համար:
Deductor2: Սա Deductor1 մոդուլի շրջված տարբերակն է:
PlayDecoder (փոխառված և փոքր -ինչ փոփոխված ekchen35649- ից իր 133 հրահանգիչ).
Սա օգտագործվում է ընտրացանկի վիճակում ՝ յոթ հատվածի ապակոդավորման վրա «PLAY» բառը ցուցադրելու համար:
Անելիք. Նկարներ, տեսանյութեր
Խորհուրդ ենք տալիս:
Թակել apիածան - 2 խաղացողի արագ արձագանքման խաղ. 4 քայլ (նկարներով)
Հպեք Հպեք ainիածանը. 2 խաղացող Արագ արձագանքման խաղ. 2 շաբաթ առաջ աղջիկս հանճարեղ գաղափար ունեցավ ծիածանի գույներով արագ արձագանքման խաղ պատրաստել (նա ծիածանի փորձագետ է. D): Ինձ անմիջապես դուր եկավ գաղափարը, և մենք սկսեցինք մտածել, թե ինչպես կարող ենք այն վերածել իսկական խաղի: Գաղափարն այն էր. Դուք ծիածան ունեք
Մրցակցային ազդանշանային համակարգ `5 քայլ
Մրցակցային ազդանշանային համակարգ. Այս նախագծում նախագծված մրցունակ ազդանշանային համակարգը գործում է նմանապես բզզող համակարգերի համար, որոնք օգտագործվում են Գիտական գավաթի տարածաշրջանային և ազգային մրցույթներում: Այս նախագիծը ոգեշնչվեց իմ մասնակցությամբ իմ ավագ դպրոցի գիտական բաժակի թիմի հետ երեք տարի
Aruduino LED խաղ Արագ կտտացնելով երկու խաղացողի խաղ. 8 քայլ
Aruduino LED խաղ Արագ սեղմում երկու խաղացողի խաղ. Այս նախագիծը ոգեշնչված է @HassonAlkeim- ից: Եթե պատրաստ եք խորը հայացք նետել, այստեղ կա մի հղում, որը կարող եք ստուգել https://www.instructables.com/id/Arduino-Two-Player-Fast-Button-Clicking-Game/: Այս խաղը Alkeim's- ի կատարելագործված տարբերակն է: Դա է
Ինչպես հրապարակել ESP32 տվյալները NTP ժամանակային նշանով IoT ամպում ՝ 5 քայլ
Ինչպես հրապարակել ESP32 տվյալները NTP ժամանակային նշանով IoT ամպին. Շատ ծրագրերում օգտվողները պետք է ուղարկեն իրենց տվյալները, ինչպես նաև բեռնվածքում ուղարկվող արժեքների տեղական ժամանակային նշանը AskSensors IoT ամպին: Estամկետային ձևաչափը UNIX դարաշրջանն է ՝ միլիվայրկյանների թիվը, որոնք անցել են հունվարից
8x16 LED Matrix Pong խաղ (2 թիակ խաղացողի տարբերակով) ՝ 3 քայլ
8x16 LED Matrix Pong խաղ (2 թիակ յուրաքանչյուր խաղացողի համար). Ինձ ոգեշնչել է Arduino- ում կիրառվող դասական պոնգ խաղի բազմաթիվ տատանումներ `օգտագործելով 8x8 LED մատրից: Այս ուսանելիում ես ձեզ ցույց կտամ, թե ինչպես կարելի է կառուցել իմ սիրած պոնգի տարբերակը, որն ունի երկու թիավար ՝ հարձակվող և դարպասապահ ՝ յուրաքանչյուր խաղացողի համար: