ฉันทำงานกับสถาปัตยกรรม P2P เพื่อการเล่นเกมที่ปลอดภัยและฉันได้แบ่งปัญหาออกเป็นห้าปัญหาย่อย:
- การดัดแปลงสถานะของเกมที่ส่งมาอย่างผิดกฎหมาย
- วางขี้โกงอย่างแม่นยำ
- ยอมรับสถานะเกม
- หลีกเลี่ยงการโกง "มองไปข้างหน้า"
- ซ่อนข้อมูลที่ละเอียดอ่อนจากฝ่ายตรงข้าม
สี่คนแรกที่ฉันได้รับการแก้ไขทั้งหมดสวยมาก แต่มันเป็นคนสุดท้ายที่ฉันมีปัญหากับ
ก่อนที่ฉันจะลงรายละเอียดฉันแค่อยากถามว่ามีอะไรที่ฉันไม่ได้ทำในรายการทำเครือข่าย p2p "cheat proof" หรือไม่ ฉันไม่สนใจกลโกงเช่นการใช้ aimbots ฉันแค่สนใจที่จะทำให้เครือข่าย p2p ปลอดภัยเหมือนเซิร์ฟเวอร์ส่วนกลาง
ดังนั้นในความพยายามของฉันจนถึงการซ่อนข้อมูลที่ละเอียดอ่อนฉันได้มุ่งเน้นไปที่ตำแหน่งของผู้เล่นในเกมที่ไม่ทราบตำแหน่งของฝ่ายตรงข้ามเสมอ ปัญหาก็จะกลายเป็นวิธีการตรวจสอบว่าคุณควรส่งตำแหน่งให้คู่ต่อสู้ของคุณโดยไม่ทราบตำแหน่งของฝ่ายตรงข้าม
ฉันได้ตัดวิธีการเช่นฝ่ายตรงข้ามที่ส่งตำแหน่งเท็จหลายตำแหน่งเพื่อเปรียบเทียบคุณเช่นกันเนื่องจากฝ่ายตรงข้ามของคุณสามารถใช้ระบบดังกล่าวได้อย่างง่ายดายเนื่องจากเขาจะได้ตำแหน่งของคุณหากตำแหน่งเท็จปรากฏขึ้นจากตำแหน่งของคุณ
วิธีที่ฉันมุ่งเน้นไปที่สิ่งที่คุณได้รับ "สนามภาพ" จากฝ่ายตรงข้ามของคุณและสามารถกำหนดได้ว่าคุณควรส่งตำแหน่งของคุณหรือไม่ อย่างไรก็ตามนี่เป็นปัญหาในเกมเช่น League of Legends ซึ่งข้อมูลการมองเห็นของฝ่ายตรงข้ามเป็นข้อมูลที่มีความอ่อนไหวสูง ฉันได้พยายามแก้ปัญหานี้โดยเปลี่ยนฟิลด์ภาพโดยใช้เมทริกซ์เอกพจน์หมายความว่าคุณไม่สามารถเปลี่ยนจาก Visual Field ที่แปลงแล้วกลับไปเป็นเวอร์ชันดั้งเดิมได้ แต่เนื่องจากเป็นการแปลงเชิงเส้นคุณจึงสามารถทราบได้ว่าตำแหน่งของคุณอยู่ภายในหรือไม่ เขตข้อมูลภาพหรือไม่
อย่างไรก็ตามนี่ไม่ได้ผลอย่างสมบูรณ์สนามภาพที่แน่นอนไม่สามารถเรียกคืนได้หลังจากการเปลี่ยนแปลง แต่ข้อมูลเกี่ยวกับ "ความลาด" ในเขตข้อมูลภาพ (เขตข้อมูลภาพถูกสร้างขึ้นโดยหลายบรรทัดและสามารถกำหนดความลาดชันของแต่ละบรรทัด) คืนค่าและสิ่งนี้สามารถใช้เพื่อสร้างฟิลด์ภาพต้นฉบับที่ค่อนข้างใหม่
ในสาระสำคัญสิ่งที่ฉันต้องการก็คือฟังก์ชั่นที่สามารถตัดสินได้ว่าตำแหน่งนั้นเป็น "ที่มองเห็นได้" หรือไม่และการสร้างฟังก์ชั่น / ฟิลด์ภาพขึ้นมาใหม่นั้นจำเป็นต้องมีการคำนวณแบบเรียกร้อง เกมในการดำเนินการ มีบุคคลที่ฉลาดสุด ๆ คนหนึ่งที่รู้วิธีนี้หรือไม่?
แก้ไข ผู้คนกำลังสับสนเกี่ยวกับ "เขตข้อมูลการมองเห็น" ทั้งหมดดังนั้นฉันจึงตั้งใจจะให้คำอธิบายโดยละเอียดเพิ่มเติมที่นี่ เขตข้อมูลการมองเห็นประกอบด้วยกลุ่มของชุดของเส้นคุณสามารถตรวจสอบได้อย่างง่ายดายว่าตำแหน่งอยู่ในกลุ่มใดกลุ่มหนึ่งโดยเพียงแค่ตรวจสอบว่าตำแหน่งของคุณอยู่ที่ด้านใดของเส้นถ้ามันอยู่ในด้านเดียวกันสำหรับทุกสายในกลุ่มนั้น มันอยู่ในกลุ่มนั้นและภายในเขตการมองเห็น
ข้อมูลที่ส่งไม่ใช่บรรทัดนี้ แต่เป็นการแปลงของเส้นและการแปลง (เมทริกซ์เอกพจน์ 2 คูณ 2) คุณยังสามารถตรวจสอบว่าตำแหน่งของคุณอยู่ที่ตำแหน่งใดโดยการแปลงเป็นครั้งแรกโดยใช้การแปลงที่คุณได้รับ และเปรียบเทียบค่านั้นกับสายที่แปลงแล้ว กุญแจสำคัญในที่นี้คือการแปลงเป็นเอกพจน์หมายความว่ามันเป็นไปไม่ได้ที่จะหาผกผันกลับไปที่บรรทัดเดิม อย่างไรก็ตามมันเป็นไปได้ที่จะกำหนดความชันของเส้นที่ทำให้สร้างเส้นขึ้นใหม่โดยเพียงแค่ตรวจสอบว่าจุดใดที่อยู่ด้านข้างของบรรทัดที่ถูกเปลี่ยนเป็นจุดจำนวนมากจนกระทั่งคุณได้ระบุจุดกำเนิดของเส้นที่คำนวณได้ถูกกว่าถ้าคุณไม่รู้ ความชันของเส้น
สิ่งที่ฉันกำลังมองหาคือวิธีการในการพิจารณาว่าจุดหนึ่งอยู่ภายในพื้นที่ใดซึ่งการสร้างพื้นที่จากวิธีดังกล่าวเป็นไปไม่ได้ (ซึ่งฉันสงสัยว่ามีอยู่เพราะคุณสามารถบังคับมันได้) หรือหนักมาก