สารบัญ:

เรือกวาดทุ่นระเบิด: 5 ขั้นตอน (พร้อมรูปภาพ)
เรือกวาดทุ่นระเบิด: 5 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: เรือกวาดทุ่นระเบิด: 5 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: เรือกวาดทุ่นระเบิด: 5 ขั้นตอน (พร้อมรูปภาพ)
วีดีโอ: การสาทิตการกวาดทุ่นระเบิดจริงในทะเล 2024, กรกฎาคม
Anonim
เรือกวาดทุ่นระเบิด
เรือกวาดทุ่นระเบิด

สำหรับโครงการสุดท้าย CPE 133 ของเรา Chase และฉันตัดสินใจสร้างเกม 'เรือกวาดทุ่นระเบิด' ที่ใช้ปุ่มและสลับอินพุตจากกระดาน Basys-3 รวมถึงรหัส VHDL ชื่อที่ดีกว่าสำหรับเกมนี้อาจเป็น 'Russian Roulette' แต่เราอยากจะใช้ชื่อที่เป็นมิตรกับครอบครัวมากกว่านี้ เกมดังกล่าวให้ผู้ใช้กดปุ่มกลางบนกระดาน Basys เพื่อสุ่มกำหนดสวิตช์ตัวใดตัวหนึ่งจาก 16 ตัวให้ 'ใช้งาน' ด้วยระเบิด จากนั้นผู้เล่นสองคนผลัดกันพลิกสวิตช์ขึ้นทีละตัว จนกว่าผู้เล่นคนใดคนหนึ่งจะพลิกสวิตช์ด้วย "ระเบิด" เมื่อสิ่งนั้นเกิดขึ้น การแสดงเจ็ดส่วนจะเตือนผู้เล่นว่าผู้เล่นเพิ่งแพ้เกม

ขั้นตอนที่ 1: ภาพรวม

โครงการใช้โมดูล VHDL จำนวนมากที่เราใช้ในช่วงไตรมาสนี้ ใช้ตัวนับสี่บิตร่วมกับขอบนาฬิกาเพื่อจำลองตัวเลขสี่บิตแบบสุ่มเพื่อเปิดใช้งานสวิตช์ตัวใดตัวหนึ่ง ไดอะแกรมสถานะยังใช้เพื่อแสดงคำต่างๆ บนหน้าจอเจ็ดส่วน ตั้งแต่ "เล่น" เมื่อผู้เล่นอยู่ในระหว่างเกม ไปจนถึง "แพ้" เมื่อผู้เล่นคนใดคนหนึ่งพลิกสวิตช์ที่ทำงานอยู่

ขั้นตอนที่ 2: วัสดุ

  • คณะกรรมการพัฒนา Basy3 จาก Digilent, Inc.
  • Vivado Design Suite BC_DEC.vhd (ไฟล์นี้จัดเตรียมให้เราใน Polylearn และเขียนโดย Bryan Mealy)
  • ตัวนับ 4 บิตทำจากรองเท้าแตะ T
  • FSM

ขั้นตอนที่ 3: การสร้างเกม

การสร้างเกม
การสร้างเกม
การสร้างเกม
การสร้างเกม

ขั้นตอนแรกในการสร้างเกมนี้คือการวาดแผนภาพวงจรพร้อมส่วนประกอบทั้งหมดที่เราจะใช้ อินพุตสำหรับระบบนี้คือปุ่ม 1, สวิตช์ 16 ตัวและนาฬิกา ผลลัพธ์คือการแสดงผลเจ็ดส่วนและขั้วบวก หลังจากวาดแผนภาพวงจร เราได้เขียนไฟล์ต้นฉบับสำหรับแต่ละส่วนประกอบใน Vivado และรวมเข้าด้วยกันโดยใช้แผนที่พอร์ตภายใต้ไฟล์ต้นฉบับหลัก

พื้นฐานทั้งหมดของเกมหมุนโดยการสุ่มกำหนดให้สวิตช์ตัวใดตัวหนึ่งจาก 16 ตัวทำงานพร้อมกับระเบิด และสำหรับผู้เล่นจะไม่ทราบว่าสวิตช์ตัวใดทำงานอยู่จนกว่าจะเปิดสวิตช์ที่ทำงานอยู่นั้น เราตรวจสอบตัวสร้างตัวเลขสุ่มและสุ่มปลอมทางออนไลน์ แต่ในที่สุดเราก็ตัดสินใจว่าการใช้ตัวนับ 4 บิตและการกำหนดสวิตช์ที่เกี่ยวข้องให้ทำงานนั้นสุ่มเพียงพอสำหรับสิ่งที่เรากำลังมองหา เราสามารถปรับเปลี่ยนตัวนับ 4-Bit ที่เราสร้างขึ้นในโปรเจ็กต์ก่อนหน้าเพื่อให้สามารถทำงานสำหรับงานนี้ได้ เราใช้ตัวนับเพื่อสร้างตัวเลขสุ่มระหว่าง 0-15; จากนั้นในองค์ประกอบ main1 เรากำหนดจุดทศนิยมของตัวเลขสุ่มให้กับสวิตช์ที่เกี่ยวข้องบนกระดาน ตามที่เห็นในแผนผัง ทั้งเอาต์พุต X ('active bomb') จากส่วนประกอบ main1 และสวิตช์ที่ผู้เล่นเปิดจะไปที่ FSM1 เครื่องสถานะจะส่งออกค่า Z หนึ่งบิตซึ่งจะถูกอ่านโดย BC_DEC1 Finite State Machine ที่เราใช้มีสองสถานะที่แตกต่างกัน: ในสถานะ A การแสดงผลเจ็ดส่วนจะแสดงเป็น "PLAY" และเครื่องจะอยู่ในสถานะนั้นจนกว่าจะรู้ว่าสวิตช์ที่เปิดใช้งานถูกพลิก เมื่อสิ่งนั้นเกิดขึ้น FSM จะไปยังสถานะ B โดยจะส่งสัญญาณ 'LOSE' ไปที่จอแสดงผลเจ็ดส่วนและอยู่ในสถานะนั้นจนกว่าสวิตช์ทั้ง 16 ตัวจะเปลี่ยนเป็น '0' เมื่อตรงตามเงื่อนไขนั้น FSM จะเข้าสู่สถานะ A อีกครั้งและรอให้ผู้เล่นเริ่มเกมใหม่ แผนภาพ Moore เพื่อช่วยให้เข้าใจ FSM นี้แสดงไว้ด้านบน

ขั้นตอนที่ 4: การปรับเปลี่ยนในอนาคต

การปรับเปลี่ยนบางอย่างที่เรากำลังพิจารณาเกี่ยวกับการทำเกมของเรา ได้แก่ การเพิ่มระเบิดลงในสนาม (อาจเพิ่มขึ้นจากหนึ่งเป็นสาม) เพิ่มตัวนับคะแนนและหลายรอบ เราตัดสินใจไม่ปรับปรุงในท้ายที่สุด เนื่องจากเราพบว่าการเล่นเกมที่ยาวและยาวขึ้นมักมีความตึงเครียดมากกว่า และในตอนท้ายสนุกกว่าเกมที่มักจะจบลงหลังจากสลับสามหรือสี่ครั้ง

ขั้นตอนที่ 5: บทสรุป

เรามีความสุขมากกับผลลัพธ์สุดท้ายของโครงการนี้ ไม่เพียงเพราะเกมเวอร์ชั่นสุดท้ายนั้นเล่นสนุก แต่ยังเพราะการสร้างและตั้งโปรแกรมโปรเจ็กต์ต้องการให้เราใช้ประโยชน์มากที่สุด หากไม่ใช่ทั้งหมดที่เราได้เรียนรู้ในไตรมาสนี้ เราใช้ Flip Flops, เคาน์เตอร์, FSM, นาฬิกา, อินพุตของผู้ใช้จากบอร์ด และเอาต์พุตไปยังจอแสดงผลทั้งเจ็ดส่วน

นอกจากนี้เรายังได้เรียนรู้ว่าข้อผิดพลาดทางไวยากรณ์สองสามอย่างสามารถทำลายโปรแกรมได้อย่างสมบูรณ์ (แม้ว่าจะถือว่าใช้ได้ในภาษาการเขียนโปรแกรมอื่น ๆ เช่น Python หรือ Java) และหลังจากการจำลองหลายครั้งและการวนซ้ำหลายครั้งของรหัสที่ถูกอัปโหลดและทดสอบบน บอร์ด คุณจะแก้ไขจุดบกพร่องทั้งหมดจากโค้ดของคุณได้หรือไม่

แนะนำ: