ขออภัยสำหรับชื่อที่ไม่ดี แต่ฉันไม่มีวิธีที่ดีกว่าในการเขียนวลี ...
ดังนั้นจึงมีเกมที่น่าตื่นตาตื่นใจนี้โดยนินเทน (ใช่!) บน Wii เรียก WiiPlay มี 9 minigames อยู่ในนั้นและหนึ่งในรายการโปรดของฉันเรียกว่าถัง! . มันเกี่ยวกับการทำลายรถถังศัตรู COM โดยไม่ทำลายตัวเอง นี่คือภาพหน้าจอของระดับ:
วิธีหนึ่งในการทำลายรถถังคือการยิงกระสุน มีรถถังศัตรูสีเขียวมะนาวที่ยิงกระสุนความเร็วสูงที่แฉลบ (กับกำแพงและบล็อก) สองครั้ง คุณสามารถดูว่ารถถังของผู้เล่นสามารถถูกทำลายได้อย่างไรถ้ามันอยู่ในที่ที่มันอยู่ในขณะนี้เพราะรถถังมะนาวที่อยู่ตรงกลางสามารถยิงกระสุนที่ตามเส้นทางสีเขียวที่ฉันวาดลงบนภาพ
ในฐานะโปรแกรมเมอร์มือสมัครเล่นตัวเองฉันสงสัยว่าปูนขาวจะตัดสินได้อย่างไรว่ามันจะยิงไปทางไหนเพื่อตีรถถังผู้เล่น
ฉันคิดถึงมันด้วยตัวเอง แต่ไม่ได้คิดอัลกอริธึมที่เป็นไปได้ ฉันจะอธิบายข้อสรุปของฉันในกรณีที่พวกเขาสร้างแรงบันดาลใจให้ใครบางคน เพียงเพื่อความเรียบง่ายในช่วงคำอธิบายของฉันฉันถือว่าผนังจะเป็นพื้นผิวใด ๆ กับที่กระสุนแฉลบสามารถ รูปสี่เหลี่ยมผืนผ้าที่แยกออกจากบล็อกจึงก่อตัวเป็นผนังสี่ด้าน
ฉันได้ข้อสรุปว่า 2 จุดที่กระสุนเด้งกระสุนอยู่เสมอด้านใดด้านหนึ่งของสี่เหลี่ยมด้านขนานหรือกลายเป็นจุดยอดตรงข้ามของรูปสี่เหลี่ยมด้านขนาน รถถังศัตรูที่ยิงและรถถังผู้เล่นที่มันเล็งไม่จำเป็นต้องเป็นจุดยอดอีก 2 จุด แต่แน่นอนว่ามันวางอยู่บนเส้น colinear ทั้งสองด้านของสี่เหลี่ยมด้านขนาน นี่คือภาพประกอบของ 4 วิธีที่เป็นไปได้ที่สามารถสร้างสี่เหลี่ยมด้านขนาน:
HOR-VERหมายถึงกระสุนนัดแรกชนผนังแนวนอนจากนั้นก็ชนกำแพงแนวตั้ง
แล้วฉันก็ติดอยู่ ฉันคิดเกี่ยวกับการเคลื่อนที่ไปรอบ ๆ เส้นที่เชื่อมต่อรถถังศัตรูและรถถังผู้เล่นรอบ ๆ แผนที่เพื่อดูว่ามันเป็นรูปสี่เหลี่ยมด้านขนานที่มีการชนสองครั้งกับผนังใด ๆ หรือไม่ แต่มันไม่ได้ผลเสมอไปเพราะรถถังศัตรูและรถถังผู้เล่น จำเป็นต้องเกิดขึ้นพร้อมกับจุดยอดของสี่เหลี่ยมด้านขนาน
นอกจากนี้ฉันไม่แน่ใจว่าการไหลทั่วไปของอัลกอริทึม อัลกอริทึมใช้โครงสร้างใด ๆ 2 ต่อไปนี้หรือฉันผิดทั้งสองอย่างนี้หรือไม่?
- หาเส้นทางที่เป็นไปได้และทำเครื่องหมายให้ดีที่สุดเสมอ (อาจเป็นทางที่สั้นที่สุดไม่ชัดเจนที่สุดหลบหลีกไม่ได้มากที่สุดหรือประเมินแบบรวมและมีน้ำหนักตามเกณฑ์หลายเกณฑ์) และลืมเรื่องอื่น ๆ สิ่งที่เหลือไว้หลังจากการคำนวณทั้งหมดเป็นสิ่งที่ดีที่สุด
- ก่อนอื่นให้กำหนดกำแพงทั้งหมดที่สามารถเข้าถึงได้ด้วยกระสุน (กระสุนไม่จำเป็นต้องกระดอนผนังกับกำแพงอื่นเพื่อที่จะไปถึงแต่ละกำแพงเหล่านี้) จากนั้นกำหนดช่วงที่สามารถเข้าถึงได้ทั้งหมดในแต่ละกำแพงเหล่านี้ (บางครั้งมันเป็นไปไม่ได้ ผนังที่ไม่มีการสะท้อนกลับถ้ากำแพงอีกอันยืนใกล้คุณ) จากนั้นให้พิจารณากำแพงที่สามารถเข้าถึงได้ทั้งหมดอีกครั้งด้วยการสะท้อนกลับและทุกช่วงที่สามารถเข้าถึงได้บนผนังเหล่านี้ กระบวนการ 4 เหล่านี้สามารถทำได้โดยวิธีที่คล้ายกับการติดตามเรย์ ในระหว่างแต่ละกระบวนการหากรถถังผู้เล่นโดนรังสีใด ๆ ให้คิดเส้นทางกระสุนตามรังสีนั้น
ในความคิดของฉันอัลกอริทึมนี้ยากที่จะคิดออกเพราะ:
- กระสุนสามารถยิงได้ในทุกทิศทาง และ
- มีหลายจุดบนผนังใด ๆ เช่นเดียวกับในคณิตศาสตร์ที่มีหลายจุดในบรรทัด
แต่คน Nintendo สร้างมันขึ้นมาดังนั้น ... ใครที่มีความคิด