สารบัญ:
- ขั้นตอนที่ 1: ภาพรวม
- ขั้นตอนที่ 2: วัสดุ
- ขั้นตอนที่ 3: การสร้างเกม
- ขั้นตอนที่ 4: แสดงผล
- ขั้นตอนที่ 5: นำทุกอย่างมารวมกัน
- ขั้นตอนที่ 6: การปรับเปลี่ยนในอนาคต
- ขั้นตอนที่ 7: บทสรุป
วีดีโอ: เกม FPGA Asteroid: 7 ขั้นตอน (พร้อมรูปภาพ)
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:07
สำหรับโครงการสุดท้ายของ CPE 133 เราตัดสินใจสร้างเกมดาวเคราะห์น้อยบน FPGA โดยใช้สวิตช์ปุ่มกดสองปุ่มและจอแสดงผล 7 ส่วน เกมดังกล่าวทำงานเพื่อให้ดาวเคราะห์น้อยวางไข่ในหนึ่งในสามแถวที่เลือกแบบสุ่ม และพุ่งเข้าหาเรือรบที่อยู่อีกด้านหนึ่งของหน้าจอ 7 ส่วน ปุ่มบนและปุ่มล่างสามารถใช้เพื่อเคลื่อนเรือของคุณให้พ้นทางของดาวเคราะห์น้อย เมื่อล้มเหลวในการทำเช่นนั้น จอแสดงผลจะอ่านว่า 'BAnG' สักครู่แล้วเริ่มเกมใหม่อย่างรวดเร็ว เพื่อให้ผู้ใช้ลองอีกครั้ง ต่อไปนี้เป็นคำอธิบายสั้น ๆ เกี่ยวกับวิธีการทำโปรเจ็กต์เพื่อให้ผู้ใช้ทุกคนสามารถทำซ้ำหรือปรับปรุงการออกแบบของเราได้
ขั้นตอนที่ 1: ภาพรวม
โครงการส่วนใหญ่ประกอบด้วย Finite State Machines (FSMs) ซึ่งใช้ตรรกะในการถ่ายโอน FPGA ระหว่างรัฐที่จัดเก็บและแสดงค่าต่างๆ ของตำแหน่งเรือและตำแหน่งหิน โมดูลหลักสองโมดูลคือ FSM ของเกมสำหรับหินและเรือ และตัวถอดรหัสการแสดงผลแบบไบนารีถึง 7 ส่วน FSM ซึ่งรวมเข้าด้วยกันโดยใช้แบบจำลองโครงสร้างที่เรียบง่ายมากใน VHDL
FSM ถูกสร้างขึ้นสำหรับตำแหน่งของเรือ ตำแหน่งของหิน และสำหรับตัวถอดรหัส 7 ส่วน จุดประสงค์ของ FSM ของเรือรบคือเพื่อให้เรือรบสามารถเคลื่อนที่ไปยังตำแหน่งที่ถูกต้องเมื่อผู้เล่นกดปุ่มขึ้นหรือลง จำเป็นต้องใช้ FSM เนื่องจากต้องจำตำแหน่งสุดท้ายเพื่อย้ายไปยังตำแหน่งที่ถูกต้อง
จุดประสงค์ของ FSM ของหินคือการย้ายหินไปยังตำแหน่งที่ถูกต้องโดยพิจารณาจากแถวที่มันอยู่และตำแหน่งสุดท้ายในแถวนั้น นอกจากนี้ยังติดตามตำแหน่งของโมดูลที่จะแสดงและสุ่มสุ่มเลือกแถวใหม่เพื่อให้ปรากฏบนต่อไป
FSM สำหรับตัวถอดรหัสการแสดงผล 7 ส่วนไม่เพียงแต่ใช้เพื่อแสดงเรือและหินเท่านั้น แต่ยังแสดง "BAnG" เมื่อตำแหน่งเรือรบและตำแหน่งหินเหมือนกัน
ขั้นตอนที่ 2: วัสดุ
วัสดุที่ใช้ในโครงการ ได้แก่
- คณะกรรมการพัฒนา Basy3 จาก Digilent, Inc.
- วิวาโด ดีไซน์ สวีท
- sseg_dec.vhd (ไฟล์นี้จัดเตรียมไว้ให้เราใน Polylearn และเขียนโดย Bryan Mealy)
- Clk_div.vhd (ไฟล์นี้จัดเตรียมไว้ให้เราใน Polylearn และเขียนโดย Bryan Mealy)
- เครื่องจักรไฟไนต์สเตทสามเครื่อง (FSM)
ขั้นตอนที่ 3: การสร้างเกม
โมดูลเกมถูกสร้างขึ้นโดยใช้แบบจำลองพฤติกรรมเพื่ออธิบายสถานะของเรือรบและหินสำหรับ FSM ตามลำดับ ข้อดีของสิ่งนี้คือการสร้างแบบจำลองวงจรตามพฤติกรรมง่ายกว่ามากโดยอธิบายว่ามันทำอะไรมากกว่าที่จะหาส่วนประกอบทั้งหมดที่จำเป็นในการออกแบบฮาร์ดแวร์
สถานะของหินทำโดยใช้เครื่องกำเนิดตัวเลขสุ่มหลอกสำหรับตำแหน่งแรกของหิน เพื่อให้บรรลุสิ่งนี้ เราได้ให้กำเนิดนาฬิกาของมันเองซึ่งเร็วมากเมื่อเทียบกับความเร็วของเกม ในแต่ละขอบที่เพิ่มขึ้น ตัวเลขสามบิตจะเพิ่มขึ้น และค่าทั้งหมดสอดคล้องกับสถานะการเริ่มต้นหนึ่งในสามของเรือรบ ดังนั้น ค่าสามค่าจึงสอดคล้องกับตำแหน่ง 3 (บนขวา) สามค่าตรงกับตำแหน่ง 7 (ตรงกลาง) และสองค่าตรงกับตำแหน่งที่ 11 (ขวาล่าง)
เมื่อเกิดการสร้างแบบสุ่มและดาวเคราะห์น้อยได้รับสถานะเริ่มต้นแล้ว มันจะไหลในแนวนอนไปทางเรือโดยไม่หยุดชะงัก
0 ← 1 ← 2 ← 3
4 ← 5 ← 6 ← 7
11 ← 10 ← 9 ← 8
นาฬิกาที่ใช้สำหรับตรรกะสถานะถัดไปของร็อคจะควบคุมความเร็วของเกม เราพบจากการลองผิดลองถูกที่ 9999999 คุ้มค่าสำหรับการนับสูงสุด
ตรรกะของเรือรบทำงานโดยเริ่มต้นในตำแหน่งตรงกลาง (ตำแหน่ง 4) ทางด้านซ้ายสุด หากกดปุ่มบนหรือปุ่มล่าง เรือรบจะเลื่อนขึ้นและลงในตำแหน่ง 0 และ 11 ที่สอดคล้องกับปุ่มที่ถูกกด
เพื่อให้การเคลื่อนไหวของเรือรบรู้สึกดีสำหรับผู้ใช้ เราไม่ได้ทำให้การเคลื่อนไหวของเรือไม่ตรงกัน เราใช้นาฬิกาสำหรับการเปลี่ยนแปลงสถานะ และเราใช้จำนวนสูงสุด 5555555
ขั้นตอนที่ 4: แสดงผล
ตัวถอดรหัสไบนารีถึง 7 ส่วนใช้ตัวแปรตำแหน่ง 4 บิตสำหรับเรือรบและดาวเคราะห์น้อย และแสดงภาพที่เหมาะสม (ทั้งเรือรบและหินหรือข้อความ “BAnG”)
ทำได้โดยตรวจสอบก่อนว่าทั้งสองมีค่าเท่ากันหรือไม่ จากนั้นจึงแสดงข้อความ "BAnG" หากการตรวจสอบคืนค่าเป็นจริง
หากค่าไม่เป็นจริง ตัวถอดรหัสจะแสดงเรือและหินโดยสลับไปมาระหว่างกันที่ความถี่สัญญาณนาฬิกาที่สูงมาก และหลอกตาให้มองเห็นราวกับว่ากำลังแสดงพร้อมกัน
ขั้นตอนที่ 5: นำทุกอย่างมารวมกัน
เรารวม FSM ของเรือและของร็อคไว้ใน FSM ขนาดใหญ่อันเดียวที่เราต่อเข้ากับจอแสดงผล FSM อินพุตของเกมคือปุ่มขึ้นและปุ่มลงบนบอร์ด BASYS3 และนาฬิการะบบ ผลลัพธ์คือเซ็กเมนต์และเวกเตอร์แอโนดเจ็ดเซกเมนต์-แสดง
อินพุตและเอาต์พุตเหล่านี้จะเห็นได้ในไฟล์ข้อจำกัดที่มีการจับคู่พอร์ต
ขั้นตอนที่ 6: การปรับเปลี่ยนในอนาคต
ในอนาคต การเพิ่มฟังก์ชันการเคลื่อนไหวของเรือรบในโครงการจะเป็นการปรับปรุงให้ดีขึ้น สามารถทำได้โดยการป้อนปุ่มเพิ่มเติม 2 ปุ่ม และปล่อยให้เรือรบเข้ารับตำแหน่ง (สถานะ) อื่นที่ไม่ใช่ 0, 4 และ 8 การปรับเปลี่ยนที่เป็นไปได้อีกอย่างหนึ่งคือการควบคุมเวลาสถานะถัดไปของดาวเคราะห์น้อย เพื่อให้มันเริ่มช้าและเพิ่มความเร็วโดย 1.5x ทุกครั้งที่มันพลาดเรือรบ จนกระทั่งถูกโจมตี โดยที่มันจะเริ่มต้นใหม่และช้าลงอีกครั้ง สิ่งนี้จะเพิ่มความยากของเกมและทำให้ผู้ใช้สนุกมากขึ้นหากมีการใช้งาน และสามารถทำได้โดยการสร้างตัวแปรสำหรับจำนวนสูงสุดของนาฬิกาสถานะถัดไปของหิน คูณตัวแปรนั้นด้วย 1.5 ทุกครั้งที่ดาวเคราะห์น้อยไม่ทำ ไม่ตี และรีเซ็ตเป็นค่าเริ่มต้นทุกครั้งที่หินกระทบ
ขั้นตอนที่ 7: บทสรุป
โปรเจ็กต์นี้ช่วยให้เราเข้าใจเครื่องจักรที่มีสถานะจำกัด นาฬิกา และการแสดงแบบโต้ตอบบนจอแสดงผลเจ็ดส่วนได้ดีขึ้น
สิ่งที่ใหญ่ที่สุดเกี่ยวกับเครื่องจำกัดสถานะคือสิ่งสำคัญคือต้องรู้ (จำ) ว่าคุณอยู่ในสถานะใดเพื่อย้ายไปยังสถานะที่ต้องการถัดไป แดกดันคำแนะนำชีวิตที่ดี คุณต้องรู้ว่าคุณจะไปที่ไหน
ด้วยการจัดการนาฬิกาที่แตกต่างกัน เราสามารถสร้างตัวเลขแบบสุ่ม ย้ายหินไปยังตำแหน่งถัดไป และจัดการการแสดงของเรือรบ หิน และข้อความเมื่อจบเกม
เราได้เรียนรู้ว่าไม่สามารถแสดงขั้วบวกมากกว่าหนึ่งตัวพร้อมกันได้ โมดูลที่ให้เราใช้ประโยชน์จากสายตามนุษย์สามารถมองเห็นความแตกต่างได้ถึงความถี่ที่แน่นอนเท่านั้น ดังนั้นจึงเลือกความถี่ในการสลับขั้วบวกที่สูงขึ้น การเห็นเรือและหินในเวลาเดียวกันนั้นแท้จริงแล้วเป็นการพาดพิงเนื่องจากแต่ละรายการถูกแสดงแยกกัน แต่เร็วมาก แนวคิดดังกล่าวถูกนำมาใช้เพื่อแสดงการเคลื่อนไหวของเรือ ก้อนหิน และข้อความ "BanG"
แนะนำ:
เกม 3d Maze โดยใช้ Arduino: 8 ขั้นตอน (พร้อมรูปภาพ)
เกม 3d Maze ที่ใช้ Arduino: สวัสดีเพื่อนๆ ดังนั้นวันนี้เราจะมาสร้างเกมเขาวงกตโดยใช้ ARDUINO UNO เนื่องจาก Arduino Uno เป็นบอร์ดที่ใช้กันเป็นส่วนใหญ่ มันจึงเจ๋งมากที่จะสร้างเกมด้วย ในคำแนะนำนี้ ให้สร้างเกมเขาวงกตที่ควบคุมโดยใช้จอยสติ๊ก อย่าลืม
เกม Arduino Sorta Sudoku: 3 ขั้นตอน (พร้อมรูปภาพ)
เกม Arduino Sorta Sudoku: ผู้คนจำนวนมากชอบเล่น Sudoku และหลานๆ ชอบเดาเกม ดังนั้นฉันจึงตัดสินใจสร้างเกม "Sorta Sudoku" แบบพกพา ในเวอร์ชันของฉัน เกมเป็นตารางขนาด 4x4 แต่มีให้เพียงหมายเลขเดียวเท่านั้น แนวความคิดคือการเดาตัวเลขที่เหลือใน
กดปุ่ม); // เกม Arduino LCD: 5 ขั้นตอน (พร้อมรูปภาพ)
กดปุ่ม); //เกม Arduino LCD: เมื่อเร็ว ๆ นี้ใน Scouts ฉันทำงานเกี่ยวกับตราสัญลักษณ์การออกแบบเกม สำหรับข้อกำหนดข้อใดข้อหนึ่ง ฉันสร้างเกมนี้โดยใช้ Arduino ที่อิงจากเกม LED Rocker จุดประสงค์ของเกมคือทำคะแนนให้ได้มากที่สุด ในช่วงเริ่มต้นของเ
เกม Arduino จอแสดงผล LED แบบอินไลน์: 7 ขั้นตอน (พร้อมรูปภาพ)
เกม Arduino จอแสดงผล LED แบบอินไลน์: หรือที่รู้จักว่าระบบเกมแสดงบันได LED Attiny-85 ที่ติดตั้งฮาร์ดแวร์และซอฟต์แวร์เพื่อเล่นแอ็กชัน "วิดีโอ" เกมบนจอแสดงผล LED แบบอินไลน์ มีจอแสดงผลแลดเดอร์ LED 12 ดวงแบบมัลติเพล็กซ์ และรองรับอินพุตปุ่มสูงสุด 6 ปุ่มและออปติ
เกม 4 ปุ่มที่ใช้อินพุตแบบอะนาล็อกเดียว: 6 ขั้นตอน (พร้อมรูปภาพ)
เกมปุ่ม 4 ปุ่มที่ใช้อินพุตแบบอะนาล็อกเดียว: คำแนะนำนี้เน้นที่การใช้สายอินพุตแบบแอนะล็อกหนึ่งสายสำหรับปุ่มหลายปุ่มซึ่งสามารถตรวจจับได้โดยอิสระจากกัน และเพื่อเน้นการใช้ปุ่มเหล่านี้รวมอยู่ด้วยคือซอฟต์แวร์สำหรับเล่นเกม 4 ปุ่มสี่ปุ่มที่แตกต่างกัน เกมทั้งหมด (8 ในเ