สารบัญ:
วีดีโอ: ผู้เล่น 2 คนแข่งขันกับเกมจับเวลา: 4 ขั้นตอน
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:07
คุณจะต้องการ:
1. Digilent Basys 3, FPGA Board (หรือ FPGA อื่น ๆ)
2. Vivado เวอร์ชันล่าสุดหรือสภาพแวดล้อม VHDL อื่น ๆ
3. คอมพิวเตอร์ที่สามารถเรียกใช้โปรแกรมดังกล่าวได้
ขั้นตอนที่ 1: ตัวเกมเอง
FSM โต้ตอบกับโมดูลอย่างไร
วิธีการเล่น
ในการเริ่มต้น ให้กดปุ่มตรงกลาง สิ่งนี้จะทำให้ “99” ซึ่งแสดงถึงสุขภาพของผู้เล่นสองคน เพื่อแสดงบนจอแสดงผลเจ็ดส่วน จากนั้น ไฟ LED จะสว่างขึ้นตามลำดับจากขวาไปซ้าย รูปแบบนี้เป็นแถบพลังงาน เมื่อแถบพลังงานเต็ม แถบพลังงานจะรีเซ็ต เป้าหมายของผู้เล่นคนหนึ่งคือการพลิกสวิตช์เมื่อแถบอยู่สูงที่สุด ยิ่งไฟ LED ติดสว่างมากเท่าไร ผู้เล่นคนใดคนหนึ่งก็ยิ่งสร้างความเสียหายมากขึ้นเท่านั้น หลังจากที่ผู้เล่นคนหนึ่งพลิกสวิตช์ ความเสียหายที่ทำได้จะถูกหักออกจากสุขภาพของผู้เล่นสองคน จากนั้นจะเปลี่ยนเป็นเทิร์นของผู้เล่นสองคน ตอนนี้ ตัวเลขที่แสดงแสดงถึงสุขภาพของผู้เล่น และแถบพลังจะเต็มจากซ้ายไปขวา เมื่อผู้เล่นสองคนเคลื่อนไหว ความเสียหายจะถูกหัก และจะกลับมาเป็นเทิร์นของผู้เล่นอีกครั้ง สิ่งนี้จะเกิดขึ้นซ้ำๆ จนกว่าผู้เล่นหนึ่งคนจะมีพลังชีวิตถึง 0 แนบวิดีโอการทำงานนี้
ขั้นตอนที่ 2: FSM
เกมนี้เป็นเกมที่มีสถานะจำกัดขนาดใหญ่ ซึ่งตรรกะที่ซับซ้อนบางอย่างเกิดขึ้นตามสถานะที่ FSM อยู่
สถานะ 1: เมนูสถานะแรกคือหน้าจอเมนู ซึ่งเป็นหนึ่งในสถานะที่ง่ายกว่า ประกอบด้วยส่วนแสดงผลเจ็ดส่วนที่แสดงคำว่า "PLAY" และปุ่มที่ทำให้เกมเริ่ม ปุ่ม BTN นำเราไปสู่สถานะถัดไป ซึ่งเป็นเทิร์นของผู้เล่น
สถานะ 2: เทิร์นของผู้เล่นคนหนึ่ง
เทิร์นของผู้เล่นคนหนึ่งจะเปิดใช้งานสัญญาณที่ทำให้ส่วนแสดงเจ็ดส่วนแสดงสุขภาพของผู้เล่นที่สอง สัญญาณอื่นเปิดขึ้นเพื่อเปิดใช้งาน shift register ที่นำเข้าจากโมดูลอื่นที่เราสร้างขึ้น (Pone.vhd) การลงทะเบียนกะนี้ทำให้ไฟ LED สว่างขึ้นเช่นเดียวกับเกจพลังงานที่เพิ่มขึ้นในเกมอื่น ๆ จากนั้นจะรีเซ็ตเป็น 0 เมื่อถึงจำนวนสูงสุดของ LED ที่สามารถติดสว่างได้ มันอัปเดตขอบที่เพิ่มขึ้นของนาฬิกาที่ได้รับจาก barclock.vhd ซึ่งแก้ไขจากไฟล์แล็บที่ยืมมา เรามีแถบของผู้เล่นเริ่มจากด้านขวา และเติมทางด้านซ้าย เนื่องจากสวิตช์ของผู้เล่นจะอยู่ทางด้านซ้ายเช่นกัน (เพื่อประสบการณ์การใช้งานที่เข้าใจง่าย) เมื่อพลิกสวิตช์แล้ว สถานะจะย้ายไปที่ผู้เล่นคนหนึ่งหัก และจำนวนไฟ LED ที่ทำงานอยู่จะถูกบันทึกไว้ในสัญญาณ
สถานะ 3: ผู้เล่นคนหนึ่งหัก สัญญาณที่มีจำนวน LED ที่ใช้งานอยู่จะเป็นตัวกำหนดจำนวนสุขภาพที่จะถูกหัก สิ่งนี้ทำได้โดยมีรีจิสเตอร์การเปลี่ยนแปลงอื่น (deductor1.vhd) ที่แทนที่จะเพิ่ม LED ให้ลดค่าลง การลดลงนี้บนขอบที่เพิ่มขึ้นของหนึ่งในโมดูลนาฬิกา div ที่เรายืมและแก้ไข (downcounterclock.vhd) เมื่อปิด LED หนึ่งดวง พลังชีวิตหนึ่งจุดจะถูกหักออกจากพลังชีวิตทั้งหมดของผู้เล่นที่สอง หากในระหว่างกระบวนการนี้ ผู้เล่นสองคนมีพลังชีวิตถึง 0 เราจะหยุดและย้ายไปที่สถานะ "จบเกม" ทันที มิฉะนั้น เมื่อเวกเตอร์ LED ถึง “000000000000000000” เราจะไปยังเทิร์นของผู้เล่นสองคน
สถานะ 4: เทิร์นของผู้เล่นสองคน เทิร์นของผู้เล่นสองคนนั้นเหมือนกับเทิร์นของผู้เล่นทุกคน ยกเว้นการลงทะเบียนกะสำหรับมัน (Ptwo.bhd) จะเปลี่ยนจากซ้ายไปขวา และสวิตช์อยู่ทางด้านขวาของกระดาน สัญญาณเปิดใช้งานเพื่อให้แสดงสุขภาพของผู้เล่น 1 เมื่อสวิตช์ 2 เปิดใช้งาน การดำเนินการนี้จะเข้าสู่เทิร์นหักของผู้เล่นสองคน
ขั้นตอนที่ 5: ผู้เล่นสองคนหัก เช่นเดียวกับเทิร์นของผู้เล่นที่สอง ผู้เล่นสองคนหักทำหน้าที่เหมือนผู้เล่นคนหนึ่งหัก ข้อแตกต่างที่สำคัญคือ shift register ซึ่งควบคุมการปิดไฟ LED ไปในทิศทางตรงกันข้าม ซึ่งเป็นการปรับเปลี่ยนได้ง่ายเมื่อคุณมีผู้เล่นคนหนึ่งหักเงินทำงานอย่างถูกต้อง
ด่าน 6: จบเกม หากผู้เล่นคนใดคนหนึ่งมีพลังชีวิตเป็นศูนย์ เกมจะเปลี่ยนเป็นสถานะนี้ ไม่มีการแสดงแฟนซี หากกด BTN หนึ่ง พลังชีวิตจะถูกรีเซ็ตเป็น 99 และสถานะจะกลับไปที่เมนู เป็นการเริ่มเกมอย่างมีประสิทธิภาพ
ขั้นตอนที่ 3: โมดูล
ไดอะแกรมกล่องดำสำหรับเกม
Downcounterclock (ตามโมดูล clk_div.vhd โดย Bryan Mealy):
นี่คือนาฬิกาที่จัดการจังหวะเวลาของผู้หักเงิน ค่าคงที่ชื่อ max_count มากกว่าค่าคงที่ max_count ของ barclock 3 เท่า สิ่งนี้จะทำให้ตัวหักเงินช้ากว่าความเร็วของแถบ 3 เท่า
Barclock - (ตามโมดูล clk_div.vhd โดย Bryan Mealy):
นาฬิกานี้จัดการจังหวะเวลาของมาตรวัดพลังงาน ซึ่งเราเพิ่มอย่างรวดเร็วเพื่อเพิ่มความยากให้กับเกม เวลานี้สามารถปรับได้ตามใจชอบ เพิ่มความเร็วโดยทำให้ค่าคงที่ max_count เป็นจำนวนที่มากขึ้น หรือลดจำนวนลงโดยทำให้ max_count เป็นจำนวนที่น้อยลง Sseg_dec - (เขียนโดย Bryan Mealy): โมดูลนี้ใช้ตัวเลข 8 บิตเป็นอินพุต ซึ่งจะถอดรหัส แปลงตัวเลขให้เท่ากับทศนิยม แล้วส่งออกไปยังส่วนแสดงผลเจ็ดส่วน เพื่อให้ไฟล์นี้ใช้งานได้ คุณต้องตรวจสอบให้แน่ใจว่าข้อจำกัดของคุณตรงกับของเรา
โพเน่:
นี่คือ shift register ที่จะเลื่อนบิตไปทางซ้าย โดยเพิ่ม hot bit หนึ่งบิตเพื่อให้ดูเหมือนมาตรวัดกำลังเพิ่มขึ้น เมื่อบิตทั้งหมดร้อน บิตทั้งหมดจะรีเซ็ตเป็น '0' และรอบเริ่มต้นใหม่
พทู:
นี่เป็นโมดูล P1 แบบพลิกกลับ
ผู้หักเงิน1:
นี่คือการรวมกันของ shift register และ subtractor การลงทะเบียนกะไปในทิศทางตรงกันข้ามกับการลงทะเบียนกะของ P1 ซึ่งแสดงถึงการหัก นอกจากนี้ยังลบ 1 ออกจากสุขภาพของผู้เล่น 2 สำหรับทุกรอบสัญญาณนาฬิกา ดังนั้นด้วยการรวมกันของสองฟังก์ชันนี้จะดูเหมือนว่าสุขภาพของฝ่ายตรงข้ามจะลดลง 1 สำหรับทุกแถบสุขภาพที่ลดลง
Deductor2: นี่เป็นเวอร์ชันพลิกของโมดูล Deductor1
PlayDecoder (ยืมและแก้ไขจาก ekchen35649 133 คำสั่ง): ใช้ในสถานะเมนูเพื่อแสดงคำว่า "PLAY" บนตัวถอดรหัสเจ็ดส่วน
ขั้นตอนที่ 4: ทดสอบ
เกมนี้ได้รับแรงบันดาลใจจากหนึ่งในมินิเกมจากเคอร์บี้ เป็นเกมเล่นสองคนง่ายๆ ที่สามารถเล่นได้บนกระดาน Basys 3 หรือ FPGA ใดๆ
ขั้นตอนที่ 1: วัสดุที่จำเป็น
คุณจะต้องการ: Digilent Basys 3, FPGA Board (หรืออื่น ๆ) Vivado เวอร์ชันล่าสุดหรือสภาพแวดล้อม vhdl อื่น ๆ คอมพิวเตอร์ที่สามารถเรียกใช้โปรแกรมดังกล่าวได้ สมอง
ขั้นตอนที่ 2: ตัวเกมเอง
วิธีการเล่น
ในการเริ่มต้น ให้กดปุ่มตรงกลาง สิ่งนี้จะทำให้ “99” ซึ่งแสดงถึงสุขภาพของผู้เล่นสองคน เพื่อแสดงบนจอแสดงผลเจ็ดส่วน จากนั้นไฟ LED จะสว่างขึ้นตามลำดับจากขวาไปซ้าย รูปแบบนี้เป็นแถบพลังงาน เมื่อแถบพลังงานเต็ม แถบพลังงานจะรีเซ็ต เป้าหมายของผู้เล่นคนหนึ่งคือการพลิกสวิตช์เมื่อแถบอยู่สูงที่สุด ยิ่งไฟ LED ติดสว่างมากเท่าไร ผู้เล่นคนใดคนหนึ่งก็ยิ่งสร้างความเสียหายมากขึ้นเท่านั้น หลังจากที่ผู้เล่นคนหนึ่งพลิกสวิตช์ ความเสียหายที่ทำได้จะถูกหักออกจากสุขภาพของผู้เล่นสองคน จากนั้นจะเปลี่ยนเป็นเทิร์นของผู้เล่นสองคน ตอนนี้ ตัวเลขที่แสดงแสดงถึงสุขภาพของผู้เล่น และแถบพลังจะเต็มจากซ้ายไปขวา เมื่อผู้เล่นสองคนเคลื่อนไหว ความเสียหายจะถูกหัก และจะกลับมาเป็นเทิร์นของผู้เล่นอีกครั้ง สิ่งนี้จะเกิดขึ้นซ้ำๆ จนกว่าผู้เล่นหนึ่งคนจะมีพลังชีวิตถึง 0 แนบวิดีโอการทำงานนี้
ในการเล่นเกม ให้โหลดมันลงบนกระดานเบสแล้วกดปุ่มตรงกลาง พยายามพลิกสวิตช์โดยให้ไฟ LED ทำงานมากที่สุดเท่าที่จะเป็นไปได้ จากนั้นรอดูว่ากระดานจะหักคะแนนเหล่านั้นออกจากสุขภาพของคู่ต่อสู้ จากนั้นส่งต่อให้เพื่อนของคุณและ
ขั้นตอนที่ 3: FSM
เกมนี้เป็นเกมที่มีสถานะจำกัดขนาดใหญ่ ซึ่งตรรกะที่ซับซ้อนบางอย่างเกิดขึ้นตามสถานะที่ FSM อยู่
(แผนภาพสถานะ)
รัฐ 1: เมนู
สถานะแรกคือหน้าจอเมนู ซึ่งเป็นหนึ่งในสถานะที่ง่ายกว่า ประกอบด้วยส่วนแสดงผลเจ็ดส่วนที่แสดงคำว่า "PLAY" และปุ่มที่ทำให้เกมเริ่ม ปุ่ม BTN นำเราไปสู่สถานะถัดไป ซึ่งเป็นเทิร์นของผู้เล่น
สถานะ 2: เทิร์นของผู้เล่นคนหนึ่ง
เทิร์นของผู้เล่นคนหนึ่งจะเปิดใช้งานสัญญาณที่ทำให้ส่วนแสดงเจ็ดส่วนแสดงสุขภาพของผู้เล่นที่สอง สัญญาณอื่นเปิดขึ้นเพื่อเปิดใช้งาน shift register ที่นำเข้าจากโมดูลอื่นที่เราสร้างขึ้น (Pone.vhd) การลงทะเบียนกะนี้ทำให้ไฟ LED สว่างขึ้นเช่นเดียวกับเกจพลังงานที่เพิ่มขึ้นในเกมอื่น ๆ จากนั้นจะรีเซ็ตเป็น 0 เมื่อถึงจำนวนสูงสุดของ LED ที่สามารถติดสว่างได้ มันอัปเดตขอบที่เพิ่มขึ้นของนาฬิกาที่ได้รับจาก barclock.vhd ซึ่งแก้ไขจากไฟล์แล็บที่ยืมมา เรามีแถบของผู้เล่นเริ่มจากด้านขวา และเติมทางด้านซ้าย เนื่องจากสวิตช์ของผู้เล่นจะอยู่ทางด้านซ้ายเช่นกัน (เพื่อประสบการณ์การใช้งานที่เป็นธรรมชาติ) เมื่อพลิกสวิตช์แล้ว สถานะจะย้ายไปที่ผู้เล่นคนหนึ่งหัก และจำนวนไฟ LED ที่ทำงานอยู่จะถูกบันทึกไว้ในสัญญาณ
สถานะ 3: ผู้เล่นหนึ่งหัก
สัญญาณที่มีปริมาณไฟ LED ที่ทำงานอยู่จะเป็นตัวกำหนดปริมาณสุขภาพที่จะถูกหัก สิ่งนี้ทำได้โดยมีรีจิสเตอร์การเปลี่ยนแปลงอื่น (deductor1.vhd) ที่แทนที่จะเพิ่ม LED ให้ลดค่าลง การลดลงนี้บนขอบที่เพิ่มขึ้นของหนึ่งในโมดูลนาฬิกา div ที่เรายืมและแก้ไข (downcounterclock.vhd) เมื่อปิด LED หนึ่งดวง พลังชีวิตหนึ่งจุดจะถูกหักออกจากพลังชีวิตทั้งหมดของผู้เล่นที่สอง หากในระหว่างกระบวนการนี้ ผู้เล่นสองคนมีพลังชีวิตถึง 0 เราจะหยุดและย้ายไปที่สถานะ "จบเกม" ทันที มิฉะนั้น เมื่อเวกเตอร์ LED ถึง “000000000000000000” เราจะไปยังเทิร์นของผู้เล่นสองคน
สถานะ 4: เทิร์นของผู้เล่นสองคน
เทิร์นของผู้เล่นสองคนนั้นเหมือนกับเทิร์นของผู้เล่นทุกคน ยกเว้นกะรีจิสเตอร์สำหรับมัน (Ptwo.bhd) จะเปลี่ยนจากซ้ายไปขวา และสวิตช์จะอยู่ทางด้านขวาของกระดาน สัญญาณเปิดใช้งานเพื่อให้แสดงสุขภาพของผู้เล่น 1 เมื่อสวิตช์ 2 เปิดใช้งาน การดำเนินการนี้จะเข้าสู่เทิร์นหักของผู้เล่นสองคน
ด่าน 5: ผู้เล่นสองคนหัก
เช่นเดียวกับเทิร์นของผู้เล่นที่สอง ผู้เล่นสองคนที่หักจะทำหน้าที่เหมือนการหักของผู้เล่นคนหนึ่ง ข้อแตกต่างที่สำคัญคือ shift register ซึ่งควบคุมการปิดไฟ LED ไปในทิศทางตรงกันข้าม ซึ่งเป็นการปรับเปลี่ยนได้ง่ายเมื่อคุณมีผู้เล่นคนหนึ่งหักเงินทำงานอย่างถูกต้อง
ด่าน 6: จบเกม หากผู้เล่นคนใดคนหนึ่งมีพลังชีวิตเป็นศูนย์ เกมจะเปลี่ยนเป็นสถานะนี้ ไม่มีการแสดงแฟนซี หากกด BTN หนึ่ง พลังชีวิตจะถูกรีเซ็ตเป็น 99 และสถานะจะกลับไปที่เมนู เป็นการเริ่มเกมอย่างมีประสิทธิภาพ
กล่องดำ
ขั้นตอนที่ 4: โมดูล
Downcounterclock (ตามโมดูล clk_div.vhd โดย Bryan Mealy):
นี่คือนาฬิกาที่จัดการจังหวะเวลาของผู้หักเงิน ค่าคงที่ชื่อ max_count มากกว่าค่าคงที่ max_count ของ barclock ถึง 3 เท่า สิ่งนี้จะทำให้ตัวหักเงินช้ากว่าความเร็วของแถบ 3 เท่า
Barclock - (อิงตามโมดูล clk_div.vhd โดย Bryan Mealy): นาฬิกานี้จัดการจังหวะเวลาของมาตรวัดพลังงาน ซึ่งเราได้เพิ่มอย่างรวดเร็วเพื่อเพิ่มความยากให้กับเกม เวลานี้สามารถปรับได้ตามใจชอบ เพิ่มความเร็วโดยทำให้ค่าคงที่ max_count เป็นจำนวนที่มากขึ้น หรือลดจำนวนลงโดยทำให้ max_count เป็นจำนวนที่น้อยลง Sseg_dec - (เขียนโดย Bryan Mealy): โมดูลนี้ใช้ตัวเลข 8 บิตเป็นอินพุต ซึ่งจะถอดรหัส แปลงตัวเลขให้เท่ากับทศนิยม แล้วส่งออกไปยังส่วนแสดงผลเจ็ดส่วน เพื่อให้ไฟล์นี้ใช้งานได้ คุณต้องตรวจสอบให้แน่ใจว่าข้อจำกัดของคุณตรงกับของเรา
Pone: นี่คือ shift register ที่จะเลื่อนบิตไปทางซ้าย โดยเพิ่ม hot bit เข้าไปเพื่อให้ดูเหมือน power gauge เพิ่มขึ้น เมื่อบิตทั้งหมดร้อน บิตทั้งหมดจะรีเซ็ตเป็น '0' และรอบเริ่มต้นใหม่
Ptwo: นี่เป็นโมดูล P1 เวอร์ชันพลิกกลับ
Deductor1: นี่คือการรวมกันของ shift register และ subtractor การลงทะเบียนกะไปในทิศทางตรงกันข้ามกับการลงทะเบียนกะของ P1 ซึ่งแสดงถึงการหัก นอกจากนี้ยังลบ 1 ออกจากสุขภาพของผู้เล่น 2 สำหรับทุกรอบสัญญาณนาฬิกา ดังนั้นด้วยการรวมกันของสองฟังก์ชันนี้จะดูเหมือนว่าสุขภาพของฝ่ายตรงข้ามจะลดลง 1 สำหรับทุกแถบสุขภาพที่ลดลง
Deductor2: นี่เป็นเวอร์ชันพลิกของโมดูล Deductor1
PlayDecoder (ยืมและดัดแปลงเล็กน้อยจาก ekchen35649 ของเขา 133 คำสั่ง):
ใช้ในสถานะเมนูเพื่อแสดงคำว่า "เล่น" บนตัวถอดรหัสเซเว่นเซ็กเมนต์
สิ่งที่ต้องทำ: รูปภาพ, วิดีโอ
แนะนำ:
การออกแบบเกมในการสะบัดใน 5 ขั้นตอน: 5 ขั้นตอน
การออกแบบเกมในการสะบัดใน 5 ขั้นตอน: การตวัดเป็นวิธีง่ายๆ ในการสร้างเกม โดยเฉพาะอย่างยิ่งเกมปริศนา นิยายภาพ หรือเกมผจญภัย
ผู้เล่น 2 คน Stand-Up Retro Arcade โดย Micro Center: 20 ขั้นตอน
ผู้เล่น 2 คน Stand-Up Retro Arcade โดย Micro Center: Micro Center ในพื้นที่ของคุณตอนนี้มีทุกสิ่งที่คุณต้องการเพื่อสร้างตู้ Retro Arcade ที่ใช้ Raspberry Pi ของคุณเอง ชุดอุปกรณ์นี้ปรับแต่งได้อย่างสมบูรณ์ รวมถึงตู้, Raspberry Pi, ปุ่ม, จอยสติ๊ก, อุปกรณ์เสริมสำหรับเสียงและวิดีโอ และอื่นๆ มัน'
วิธีการสร้าง 2 ผู้เล่น DIY Bartop Arcade ด้วยสล็อต Marquee Coin แบบกำหนดเองโดยใช้กล่องของ Pandora: 17 ขั้นตอน (พร้อมรูปภาพ)
วิธีการสร้าง 2 ผู้เล่น DIY Bartop Arcade ด้วยสล็อต Marquee Coin แบบกำหนดเองโดยใช้กล่องของ Pandora: นี่คือการสอนทีละขั้นตอนเกี่ยวกับวิธีการสร้างเครื่องอาร์เคดบาร์ผู้เล่น 2 คนที่มีช่องเหรียญแบบกำหนดเองที่สร้างขึ้นในกระโจม สล็อตเหรียญจะทำขึ้นเพื่อให้พวกเขารับเฉพาะเหรียญขนาดควอเตอร์ขึ้นไป อาร์เคดนี้ขับเคลื่อน
ผู้เล่น 2-4 คน Plug and Play Raspberry Pi Arcade: 11 ขั้นตอน
ผู้เล่น 2-4 คน Plug and Play Raspberry Pi Arcade: Plug and play ไม่ใช่แค่คำศัพท์สำหรับคอนโซลเกมพลาสติกเส็งเคร็งที่คุณซื้อที่ Walmart ในพื้นที่ของคุณ ตู้อาร์เคดแบบพลักแอนด์เพลย์นี้มีผลงานที่ขับเคลื่อนโดย Raspberry Pi 3 ที่ทำงานด้วย Retropie เครื่องนี้มีความสามารถปรับแต่งได้อย่างเต็มที่และ
Sidstick: Pocket Chiptunes ผู้เล่น: 12 ขั้นตอน
Sidstick: Pocket Chiptunes ผู้เล่น: 100,000 เพลง SID ในกระเป๋าของคุณ! SIDstick เป็นเครื่องเล่น Chiptunes ขนาดพกพาที่มี: ที่เก็บข้อมูลแบบถอดได้รองรับการ์ด microSD อายุการใช้งานแบตเตอรี่ 20+ ชั่วโมง การเล่นบนฮาร์ดแวร์คุณภาพสูงที่อัตราการสุ่มตัวอย่าง 31kHz, >ความละเอียด 16 บิต