Სარჩევი:
- ნაბიჯი 1: მიმოხილვა
- ნაბიჯი 2: მასალები
- ნაბიჯი 3: თამაშის შექმნა
- ნაბიჯი 4: შედეგის ჩვენება
- ნაბიჯი 5: შეაჯამეთ ეს ყველაფერი ერთად
- ნაბიჯი 6: მომავალი ცვლილებები
- ნაბიჯი 7: დასკვნა
ვიდეო: FPGA ასტეროიდის თამაში: 7 ნაბიჯი (სურათებით)
2024 ავტორი: John Day | [email protected]. ბოლოს შეცვლილი: 2024-01-30 10:20
ჩვენი CPE 133 საბოლოო პროექტისთვის, ჩვენ გადავწყვიტეთ შევქმნათ ასტეროიდების თამაში ჩვენს FPGA– ზე ორი ღილაკის გადამრთველისა და 7 სეგმენტის ეკრანის გამოყენებით. თამაში მუშაობს ისე, რომ ასტეროიდი ქვირითობს შემთხვევით შერჩეულ სამ რიგშიდან ერთ-ერთში და მიემართება გემისკენ, 7 სეგმენტის ეკრანის მეორე მხარეს. ზედა და ქვედა ღილაკი შეიძლება გამოყენებულ იქნას თქვენი გემის ასტეროიდის გზიდან გადასატანად. თუ ეს ვერ მოხერხდა, ეკრანი წამიერად კითხულობს "BAnG" - ს და შემდეგ სწრაფად განაახლებს თამაშს, რათა მომხმარებელმა კვლავ სცადოს. ქვემოთ მოცემულია მოკლე აღწერა, თუ როგორ შეიქმნა პროექტი ისე, რომ ნებისმიერ მომხმარებელს შეეძლოს გაიმეოროს ან გააუმჯობესოს ჩვენი დიზაინი.
ნაბიჯი 1: მიმოხილვა
პროექტი მეტწილად შედგება სასრული მდგომარეობის მანქანებისგან (FSM), რომლებიც იყენებენ ლოგიკას FPGA გადასაცემად იმ სახელმწიფოებს შორის, რომლებიც ინახავს და აჩვენებს გემების და კლდის პოზიციების სხვადასხვა მნიშვნელობას. ორი ძირითადი მოდული არის თამაში FSMs კლდისა და გემისთვის და ორობითი 7-სეგმენტიანი ეკრანის დეკოდიორი FSM, რომლებიც გაერთიანებულია VHDL– ში ძალიან მარტივი სტრუქტურული მოდელის გამოყენებით.
FSM შეიქმნა გემის პოზიციისთვის, კლდის პოზიციისთვის და 7 სეგმენტის დეკოდერისთვის. გემის FSM– ის მიზანია, რომ გემმა შეძლოს გადაადგილება სწორ მდგომარეობაში, როდესაც მოთამაშე დააჭირეთ ზევით ან ქვემოთ ღილაკს. FSM საჭიროა, რადგან მას უნდა ახსოვდეს, რომელ პოზიციაზე იყო ის ბოლომდე, რათა გადავიდეს სწორ პოზიციაზე.
როკის FSM– ის მიზანია როკის გადატანა სწორ პოზიციაზე დაყრდნობით, რომელ რიგშია იგი და ბოლო პოზიცია ამ რიგში. გარდა ამისა, ის თვალყურს ადევნებს იმ მოდულის პოზიციას, რომელიც აჩვენებს მას და ფსევდო შემთხვევით ირჩევს ახალ სტრიქონს, რომელიც გამოჩნდება შემდეგში.
FSM 7-სეგმენტიანი ჩვენების დეკოდირებისთვის გამოიყენებოდა არა მხოლოდ გემისა და კლდის, არამედ "BAnG"-ის გამოსახვისას, როდესაც გემის პოზიცია და კლდის პოზიცია ერთნაირია.
ნაბიჯი 2: მასალები
პროექტში გამოყენებული მასალები იყო:
- Basys3 განვითარების დაფა Digilent– დან, Inc.
- Vivado Design Suite
- sseg_dec.vhd (ეს ფაილი მოგვაწოდა Polylearn– ზე და დაიწერა ბრაიან მილის მიერ)
- Clk_div.vhd (ეს ფაილი მოგვაწოდეს Polylearn– ზე და დაიწერა ბრაიან მილის მიერ)
- სამი სასრული მდგომარეობის მანქანა (FSM)
ნაბიჯი 3: თამაშის შექმნა
თამაშის მოდული შეიქმნა ქცევითი მოდელირების გამოყენებით, რათა აღწეროს გემისა და კლდის მდგომარეობა მათი შესაბამისი FSM– ებისთვის. ამის უპირატესობა ისაა, რომ გაცილებით ადვილია მიკროსქემის ქცევითი მოდელირება იმის აღწერით, თუ რას აკეთებს ის, ვიდრე აპარატურის დიზაინისთვის საჭირო ყველა კომპონენტის გააზრება.
როკის მდგომარეობა გაკეთდა ფსევდო შემთხვევითი რიცხვების გენერატორის გამოყენებით როკის პირველი პოზიციისთვის. ამის მისაღწევად, ჩვენ გენერატორს მივეცით საკუთარი საათი, რომელიც უკიდურესად სწრაფი იყო თამაშის სიჩქარესთან შედარებით. თითოეულ მზარდ ზღვარზე იზრდება სამ ბიტიანი ნომერი და მისი ყველა მნიშვნელობა შეესაბამება გემის დაწყების სამიდან ერთ მდგომარეობას. აქედან გამომდინარე, სამი მნიშვნელობა შეესაბამება პოზიციას 3 (ზედა მარჯვენა), სამი შეესაბამება პოზიციას 7 (ცენტრი) და ორი შეესაბამება პოზიციას 11 (ქვედა მარჯვნივ).
მას შემდეგ რაც მოხდა შემთხვევითი წარმოშობა და ასტეროიდი მიეცა საწყის მდგომარეობას, ის მიედინება ჰორიზონტალურად გემისკენ შეფერხების გარეშე.
0 ← 1 ← 2 ← 3
4 ← 5 ← 6 ← 7
11 ← 10 ← 9 ← 8
კლდის შემდეგი მდგომარეობის ლოგიკისთვის გამოყენებული საათი აკონტროლებს თამაშის სიჩქარეს; ცდისა და შეცდომის შედეგად აღმოვაჩინეთ, რომ 9999999 არის კარგი მნიშვნელობა მისი მაქსიმალური რაოდენობისთვის.
გემის ლოგიკა მუშაობს ცენტრალური პოზიციის ინიციალიზაციით მარცხენა მხარეს. თუ ზედა ღილაკს ან ქვედა ღილაკს დააჭერთ, გემი ზევით და ქვევით გადაინაცვლებს 0 და 11 პოზიციებზე, რაც შეესაბამება დაჭერილ ღილაკს.
იმისათვის, რომ გემის მოძრაობამ კარგად იგრძნოს თავი მომხმარებლისთვის, ჩვენ მისი მოძრაობა არ გავხადეთ ასინქრონული. ჩვენ გამოვიყენეთ საათი მისი მდგომარეობის შესაცვლელად და გამოვიყენეთ მაქსიმალური რაოდენობა 5555555.
ნაბიჯი 4: შედეგის ჩვენება
ორობითი 7-სეგმენტიანი დეკოდირება იღებს გემისა და ასტეროიდის პოზიციის 4-ბიტიან პოზიციას და აჩვენებს შესაბამის სურათს (ან გემი და კლდე, ან შეტყობინება "BAnG").
ის ამას ახორციელებს ჯერ შემოწმებით არის თუ არა ეს ორი თანაბარი და შემდეგ აჩვენებს შეტყობინებას "BAnG" თუ შემოწმება ბრუნდება ჭეშმარიტი.
თუ ის არ დაბრუნდება ჭეშმარიტად, დეკოდირება აჩვენებს გემსა და კლდეს, როდესაც გადადის მათ შორის საათის ძალიან მაღალი სიხშირით და ატყუებს თვალს იმათ დანახვაზე, თითქოს ისინი ერთდროულად არიან ნაჩვენები.
ნაბიჯი 5: შეაჯამეთ ეს ყველაფერი ერთად
ჩვენ შევიტანეთ გემისა და კლდის FSM ერთ დიდ FSM– ში, რომელიც ჩვენ შევაერთეთ ეკრანზე FSM. თამაშში შეტანილია ღილაკი ზემოთ და ქვემოთ BASYS3 დაფაზე და სისტემის საათი. შედეგები არის სეგმენტი და ანოდი ვექტორები შვიდი სეგმენტი-ჩვენება.
ეს შენატანები და შედეგები გამოჩნდება შეზღუდვების ფაილში, სადაც ისინი პორტშია გამოსახული.
ნაბიჯი 6: მომავალი ცვლილებები
მომავალში, პროექტში გემების გადაადგილების მეტი ფუნქციონირების დამატება იქნება გაუმჯობესება. ამის მიღწევა შესაძლებელია მხოლოდ ღილაკის კიდევ 2 შეყვანის მიწოდებით და გემის ნებართვით დაიკავოს პოზიციები (მდგომარეობები) 0, 4 და 8. სხვაგან. სხვა შესაძლო მოდიფიკაცია შეიძლება იყოს ასტეროიდის მომდევნო მდგომარეობის დროის კონტროლი ისე, რომ ის ნელა დაიწყოს და სიჩქარე გაიზარდოს 1.5x ყოველ ჯერზე, როდესაც ის აცდენს გემს, სანამ დარტყმას არ მიიღებს, სადაც ის გადაიტვირთება და ისევ ნელი გახდება. ეს გაზრდის თამაშის სირთულეს და გახდის მას უფრო მხიარულ მომხმარებელს, თუ ის განხორციელდება და შეიძლება გაკეთდეს როკის შემდეგი მდგომარეობის მაქსიმალური რაოდენობის ცვლადის შექმნით, ამ ცვლადის გამრავლებით 1.5 ყოველ ჯერზე ასტეროიდის მიერ არ დაარტყა და დააბრუნე იგი საწყის მნიშვნელობაზე ყოველ ჯერზე როკი დარტყმისას.
ნაბიჯი 7: დასკვნა
ეს პროექტი დაგვეხმარა უკეთ გაგებულიყო სასრული მდგომარეობის მანქანები, საათები და ინტერაქტიული ჩვენება შვიდ სეგმენტიან ეკრანებზე.
ყველაზე დიდი რამ სასრული მდგომარეობის მანქანებში არის ის, რომ მნიშვნელოვანია იცოდეთ (დაიმახსოვროთ) რა მდგომარეობაში ხართ ამჟამად, რათა გადავიდეთ შემდეგ სასურველ მდგომარეობაზე. ბედის ირონიით, კარგი ცხოვრებისეული რჩევა; უნდა იცოდე სად ხარ რომ იცოდე სად მიდიხარ.
საათების სხვადასხვა შემთხვევით მანიპულირებით, ჩვენ შევძელით შემთხვევითი რიცხვების გენერირება, კლდის გადატანა მომდევნო პოზიციაზე და გემის, კლდისა და თამაშის დასასრულის შეტყობინების ჩვენების მართვა.
ჩვენ შევიტყვეთ, რომ ერთზე მეტი ანოდის ჩვენება ერთდროულად შეუძლებელია. ჩვენთვის მოწოდებულმა მოდულმა ისარგებლა იმით, რომ ადამიანის თვალი მხოლოდ გარკვეულ სიხშირეზე ხედავს განსხვავებას. ასე რომ, არჩეულია ანოდების გადართვის უფრო მაღალი სიხშირე. გემისა და კლდის ერთდროულად დანახვა ფაქტობრივად არის ალუზია, რადგან თითოეული ნაჩვენებია ცალკე, მაგრამ ძალიან სწრაფად. ეს კონცეფცია გამოიყენებოდა გემის, კლდის და "BAnG" შეტყობინების მოძრაობის გამოსახატავად.
გირჩევთ:
DIY 37 Leds Arduino Roulette თამაში: 3 ნაბიჯი (სურათებით)
წვრილმანი 37 Leds Arduino Roulette თამაში: Roulette არის კაზინოს თამაში სახელწოდებით ფრანგული სიტყვისა, რომელიც ნიშნავს პატარა ბორბალს
სიმონ თამაში - სახალისო თამაში!: 5 ნაბიჯი
სიმონ თამაში - სახალისო თამაში!: ცნობა: აქ გრძელი შაბათ -კვირის შემდეგ, თქვენ ნამდვილად უნდა შეეცადოთ დაასრულოთ ყველა ის ამოცანა და სამუშაო, რომელზედაც თქვენ ხართ პასუხისმგებელი. დროა ჩვენც მოვამზადოთ ტვინი, არა? გარდა იმ მოსაწყენი და უაზრო თამაშებისა, არის თამაში სახელწოდებით Simon Game
Aruduino LED თამაში სწრაფი დაწკაპუნებით ორი მოთამაშის თამაში: 8 ნაბიჯი
Aruduino LED თამაში სწრაფი დაწკაპუნებით ორი მოთამაშის თამაში: ეს პროექტი შთაგონებულია @HasonAlkeim– ით. თუ თქვენ მზად ხართ ღრმად შეხედოთ აქ არის ბმული, რომლის ნახვა შეგიძლიათ https://www.instructables.com/id/Arduino-Two-Player-Fast-Button-Clicking-Game/. ეს თამაში არის Alkeim's– ის გაუმჯობესებული ვერსია. Ეს არის
FPGA რეაქციის თამაში: 10 ნაბიჯი
FPGA რეაქციის თამაში: ზაფხულის რუთერფორდისა და რეგიტა სოეთანდარის მიერ
სამეურვეო თამაში სეგა სატურნის თამაში კომპიუტერზე: 6 ნაბიჯი
სამეურვეო თამაში Sega Saturn თამაში კომპიუტერზე: მე ვარ Sega Saturn კონსოლის დიდი ფანი და ბევრი თამაშის სათაურების კოლექცია. მე ფლობდი იაპონიის შავ და თეთრ მოდელს. და ორივე მწყობრიდან გამოდის. ასე რომ, მე მოუთმენლად ველოდები ინტერნეტში Sega Saturn- ის ემულატორს და შევხვდები GigiGigi Saturn- ს