การสุ่มวางไข่คะแนนอย่างยุติธรรม?


22

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

มีวิธีกำหนดรูปร่างของจุดวางไข่หรือเปลี่ยนแผนที่เพื่อให้:

  1. ผู้เล่นทุกคนมีศัตรูที่อยู่ติดกันจำนวน จำกัด
  2. ผู้เล่นทุกคนมีโอกาสเท่ากันในการเผชิญหน้ากับศัตรูที่อยู่ติดกัน
  3. ขนาดแผนที่ไม่จำเป็นต้องเพิ่มสัดส่วนตามจำนวนผู้เล่น
  4. ข้อ จำกัด เหล่านี้ไม่ได้ถูกบังคับใช้กับช่องว่างที่ไม่สามารถใช้ได้

คำตอบไม่จำเป็นต้องสมบูรณ์แบบชัดกว่าทางเลือก ยินดีต้อนรับสู่นอกกรอบ


10
วางไข่เป็นวงกลม?
Zibelas

1
@ Zibelas วิธีดั้งเดิม แต่ละเมิดข้อกำหนด 3 และด้วยผู้เล่นจำนวนมากสิ่งนี้จะสร้างแผนที่ขนาดใหญ่และการตกแต่งภายในที่ว่างเปล่า
inappropriateCode

4
ขึ้นอยู่กับประเภทเกมของคุณ (2D / 3D, respawn / คนสุดท้ายยืนอยู่เป็นต้น) การวางไข่ที่สมบูรณ์แบบในกรณีนั้นเป็นไปได้เฉพาะในโลกรูปร่างลูก (ผู้เล่นมากขึ้น, วางไข่ที่ใกล้กว่า แต่คุณสามารถรับประกันได้ว่าพวกเขามีระยะทางเดียวกัน) ในโลก 2 มิติที่มีเส้นขอบคงที่คุณจะมีผู้เล่นติดขอบน้อยลงเนื่องจากคุณไม่มีที่วางไข่ หากเป็นเกมสามมิติคุณสามารถมีได้หลายเลเยอร์
Zibelas

1
ฉันคิดว่ามันจะช่วยให้รู้ว่าคุณกำลังสร้างเกมประเภทใด ดูเหมือนเกมสงครามบางประเภท แต่มีรายละเอียดอะไรบ้าง มันเป็นปืนหรือไม่? คุณเริ่มต้นด้วยอาวุธทั้งหมดของคุณหรือคุณต้องสำรวจและค้นหาสิ่งต่าง ๆ ? เงื่อนไขชัยชนะคืออะไร? การแข่งขันคาดว่าจะมีอายุนานเท่าใด
RothX

3
ไม่ใช่สำหรับคำตอบเต็มรูปแบบ แต่ฉันคิดว่าทุกคนพยายาม "วางไข่อย่างยุติธรรมและสมดุล" ซึ่ง ... ไม่สนุก ดูการวางไข่ PUBG ที่ยอดเยี่ยม (และอื่น ๆ Battle Royale): ผู้เล่นสามารถ "วางไข่" (ดีกระโดดและลงจอด ... ) เกือบทุกที่ที่ต้องการ - ถ้าคุณต้องการความขัดแย้งและละครคุณเลือกสถานที่ที่ผู้เล่นส่วนใหญ่วางไข่ ความเสี่ยงสูงรางวัลสูง แต่ถ้าผู้เล่นต้องการมัน คุณสามารถลงจอดที่ไหนสักแห่งในป่าคุณมีเวลาเตรียมตัวเอง - รางวัลความเสี่ยงต่ำ แต่ผู้เล่นบางคนอาจชอบ (เช่นฉัน;)) มันไม่สุ่มเลือกโดยผู้เล่น
Jan 'splite' K.

คำตอบ:


27

ให้ผู้เล่นเลือกสถานที่เริ่มต้นด้วยตนเอง

ในช่วงเริ่มต้นของเกมวางไข่ผู้เล่นทุกคนที่อยู่ตรงกลางของแผนที่ แต่ไม่มีวิธีใดที่จะทำร้ายผู้เล่นคนอื่น จากนั้นพวกเขาจะต้องจับกลุ่มและได้รับวิธีการที่จะมีส่วนร่วมซึ่งกันและกัน (สร้างฐานรับอาวุธรวบรวมทรัพยากร ฯลฯ )

มีโชคเล็กน้อยหรือมีความรู้เกี่ยวกับแผนที่ในการค้นหาตำแหน่งเริ่มต้นที่ดีตั้งแต่ต้น (ขึ้นอยู่กับว่าคุณใช้แผนที่ขั้นตอนหรือทำด้วยมือ) แต่เมื่อใดและที่ไหนการตัดสินส่วนใหญ่เป็นการตัดสินใจเชิงกลยุทธ์ การปรับใช้ตั้งแต่เนิ่นๆจะทำให้คุณได้เปรียบด้านเวลา แต่ทำให้คุณอยู่ในตำแหน่งที่อันตราย การเลือกฐานของคุณอย่างระมัดระวังทำให้คุณอยู่ข้างหลังในช่วงต้นเกม แต่อาจเป็นข้อได้เปรียบที่เด็ดขาดในช่วงกลางเกมและตอนท้าย


3
@Shashimee จริง ๆ แล้วฉันเชื่อว่าฉันเห็นวิธีนี้เป็นครั้งแรกใน Anno 1602 ฉันยังเชื่อว่าเกม C&C รุ่นแรกบางเกมมีตัวเลือกเกมแบบเล่นหลายคน (แต่ฉันไม่แน่ใจว่าจำได้ถูกต้องหรือไม่)
ฟิลิปป์

3
@Phippipp MULE สำหรับผู้ค้าขาย 64 รอบอายุ 15 ปีขึ้นไปและให้คุณเลือกตำแหน่งของคุณด้วยเช่นกัน :)
Zibelas

จากนั้นคุณพบปัญหาที่คุณตามมาถึงจุดวางไข่ แน่นอนว่านี่อาจเป็นช่างเกมที่ต้องการ แต่มันอาจทำให้คุณหงุดหงิดอย่างมากและไม่ใช่สิ่งที่คุณต้องการในเกมของคุณ ความคิดที่ดีคือให้ตัวละครวางไข่ที่มองไม่เห็นและปราศจากการชนกันของผู้เล่นและค้นหาฐานก่อนเริ่มเกม
Dent7777

นั่นเป็นวิธีที่ใช้โดย "Vampirism" และ "Tree Tag" ของเกมที่กำหนดเองบน Warcraft 3 มันใช้งานได้ดีที่สุดเนื่องจากผู้เล่นทุกคนมีลักษณะคล้ายกัน (อย่างน้อยในขั้นต้น) และทีมตรงข้ามได้รับการปล่อยตัวในภายหลัง
Kroltan

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

9

ทำความเข้าใจกับข้อกำหนด

  1. ผู้เล่นทุกคนมีศัตรูที่อยู่ติดกันจำนวน จำกัด

ก่อนอื่นเรากำลังพูดถึงจุดเกิดของผู้เล่นไม่ใช่ตำแหน่งปัจจุบันของผู้เล่นตามจุดที่กำหนดในเกม เพิ่งออกไปให้พ้นทาง

ที่อยู่ติดกันถูกกำหนดอย่างดีเมื่อเราพูดถึงกราฟ เราสามารถคิดถึงแผนที่ที่แสดงถึงความสามารถในการเดินเรือบนแผนที่ - จากนี้ไปใน "กราฟ"

ถ้าโหนดสามารถมีจุดวางไข่ได้มากที่สุดการพูดถึงสิ่งเหล่านั้นว่า "อยู่ติดกัน" ก็สมเหตุสมผลแล้ว หมายเหตุ: ฉันจะไม่ จำกัด โหนดที่จะมีจุดวางไข่เดียวที่มากที่สุดด้วยเหตุผลที่จะปรากฏในภายหลัง

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

หมายเหตุ: ทราบขนาดและรูปร่างของโหนดและทำงานกับโหนดที่อยู่ติดกันจริง ๆ อย่าพิจารณาจุดต่อจุด อย่าพิจารณาการเชื่อมต่อที่มีความยาว นอกจากนี้ยังใช้โหนดนูน

สามารถสร้างกราฟล่วงหน้าได้แล้ว (แผนที่ถูกสร้างโดยนักออกแบบ) ไม่เช่นนั้นสามารถสร้างได้ทันทีหากสร้างแผนที่แบบสุ่ม

  1. ผู้เล่นทุกคนมีโอกาสเท่ากันในการเผชิญหน้ากับศัตรูที่อยู่ติดกัน

ฉันจะถือว่าศัตรูเป็นผู้เล่นคนอื่น อีกครั้งเพียงแค่ออกไปให้พ้นทาง

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

เนื่องจากเรากำลังทำงานกับกราฟเราจะใส่คำอธิบายประกอบบนกราฟแทน

  1. ขนาดแผนที่ไม่จำเป็นต้องเพิ่มสัดส่วนตามจำนวนผู้เล่น

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

  1. ข้อ จำกัด เหล่านี้ไม่ได้ถูกบังคับใช้กับช่องว่างที่ไม่สามารถใช้ได้โดยพลการ

ฉันไม่ได้ตั้งใจจะเพิ่มอุปสรรคในการแก้ปัญหา ถึงอย่างนั้นฉันก็ต้องจัดการกับอุปสรรค หากพวกเขาไม่ได้อยู่ที่นั่นการดำเนินการจะง่ายขึ้น


วิธีการแก้

เราพยายามที่จะวาง N spawn points เพื่อให้โอกาสที่จะได้พบกับผู้เล่นคนอื่นในทุก ๆ spawn points นั้นเท่ากัน

เราสามารถรับการวัดข้อผิดพลาดเป็นผลรวมของความแตกต่างของโอกาสกับค่าเฉลี่ยของโอกาส เราพยายามที่จะลดให้น้อยที่สุด (อันที่จริงแล้วเราต้องการทำให้มันเป็น 0)

ในการทำเช่นนั้นเราจำเป็นต้องรู้ถึงโอกาสในการเผชิญหน้ากับผู้เล่นในแต่ละโหนดของกราฟ

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

หมายเหตุ 1: การเพิ่มหรือย้ายจุดวางไข่จะส่งผลต่อโอกาสที่จะพบผู้เล่นทุกแผนที่

หมายเหตุ 2: การติดตามจำนวนจุดวางไข่แต่ละครั้งที่มีผลต่อโอกาสจะทำให้สิ่งต่าง ๆ ง่ายขึ้น

หมายเหตุ 3: เนื่องจากโหนดมีขนาดเท่าใดคุณจะได้รับข้อผิดพลาด = ศูนย์ขึ้นอยู่กับขนาดของโหนด คุณสามารถแม่นยำยิ่งขึ้นด้วยการทำงานกับช่วงของค่า (โอกาสน้อยที่สุดและโอกาสสูงสุดขึ้นอยู่กับตำแหน่งเฉพาะของจุดวางไข่ภายในโหนด)

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

หมายเหตุ 4: เมื่อย้ายจุดวางไข่คุณสามารถใช้โอกาสที่จะพบผู้เล่น (ยกเว้นจุดเกิดที่คุณจะย้าย) เพื่อสุ่มเลือกตำแหน่งใหม่สำหรับจุดวางไข่เช่นตำแหน่งที่มีโอกาสพบผู้เล่นใกล้ชิดกับ ค่าเฉลี่ยมีแนวโน้มมากขึ้น ฉันเตือนคุณว่าการย้ายจุดวางไข่จะส่งผลต่อค่าเฉลี่ย

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

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


วิธีการแก้ปัญหาข้างต้นจะเข้าหา error = zero แต่ไม่รับประกันว่าจะถึงศูนย์ คุณสามารถดำเนินการได้จนกว่าจะถึงจุดต่ำสุดในพื้นที่ ... ตามทฤษฎีแล้วคุณสามารถแบ่งโหนดเพื่อทำให้เป็นศูนย์ได้อย่างแน่นอน ... แต่นั่นก็เท่ากับการปรับแต่งพิกัดจุดวางไข่!

ลองจำลองการอบอ่อนเพื่อย้ายจุดวางไข่ภายในโหนด ถึงแม้ว่าจริงๆแล้วมันอาจไม่คุ้มค่าที่จะต้องใส่ใจกับรายละเอียดในระดับดังกล่าว


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


6

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

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

แผนที่ของคุณเป็นแผนที่ที่ถูกแก้ไขหรือสร้างขึ้นมาหรือไม่? และเคยลองเล่น Age of Empires กับ 8 คนบนแผนที่ 2 คนหรือไม่? ไม่สามารถปรับขนาดผู้เล่นได้โดยไม่ต้องปรับขนาดแผนที่ แม้แต่ตำแหน่งเริ่มต้นที่ไม่เป็นธรรมก็สามารถสร้างความเปลี่ยนแปลงได้อย่างมากมายในเกม (ดูซีรี่ส์ Worms) ไม่มีใครบ่นถ้าคุณวางไข่ในกลุ่มใหญ่ตราบใดที่พันธมิตรของคุณกับผู้เล่นอีกคนหนึ่งอยู่ไม่นานหรือคุณไม่มีเวิร์มที่รอดชีวิตมากที่สุดหลังจากรอบแรก

(ฉันจะเพิ่มตัวอย่างอีกเล็กน้อยถ้าฉันรู้เพิ่มเติมเกี่ยวกับประเภทของเกมของคุณ)


5

ไปเพื่อสิ่งที่ไม่แนะนำจนถึงตอนนี้: ทำให้มันไม่มีจุดศูนย์กลางของแผนที่ สิ่งที่ฉันหมายถึงคือขอบแผนที่เชื่อมต่อเข้ากับด้านตรงข้าม นี่จะใช้งานเขียนโปรแกรมจำนวนมาก แต่ในทางปฏิบัติมันสามารถทำให้ระดับการทำซ้ำตัวเองไม่สิ้นสุดถ้าคุณเดินไปในทิศทางเดียว ซึ่งหมายความว่าไม่มีจุดศูนย์กลางและตำแหน่งวางไข่แบบสุ่มจะไม่มีข้อดีหรือข้อเสีย

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

อีกทางหนึ่งแผนที่ทั้งหมดอาจมีอยู่ด้านนอกของทรงกลมอย่างไรก็ตามสิ่งนี้ทำให้พิกัดยากสำหรับการวางไข่


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

4

นี่คือวิธีแก้ปัญหาที่เป็นไปได้:

  • วางไข่แบบสุ่มบนเส้นรอบวงของวงกลม
  • วางไข่แบบสุ่มบนรัศมี (ไม่วางไข่เพื่อปิดศูนย์กลาง)
  • เพิ่มองค์ประกอบเวลาวางไข่แบบสุ่ม

แผนผังของกลไกการวางไข่


ภาพที่สองเป็นตัวเลือกที่ยอดเยี่ยม มันแก้ปัญหาของตัวเลือกแรกที่ผู้เล่นรู้ว่าที่ตั้งของผู้เล่นอื่น ๆ
Zanon

@Zanon ถึงแม้จะมีผู้เล่นภาพคนแรกสามารถย้าย (และน่าจะเป็น) ก่อนที่จะมีคนมาที่นั่น คนที่สองจะทำให้เกิดการวางไข่ที่ไม่เป็นธรรมบางคนใกล้ชิดกับคนอื่น ๆ อาจจะเป็นแบบนี้ที่มีวงกลม 2 วงและความแตกต่างระหว่างวงกลมที่เล็กกว่ากับที่ใหญ่กว่าคือที่ที่พวกมันวางไข่เช่นภาพที่สอง แต่น้อยกว่าตรงกลาง
Ave

1

ฉันเชื่อว่านี่เป็นปัญหาการกระจายกราฟ สมมติว่าสถานการณ์มรณะ (ผู้เล่นทุกคนเป็นศัตรู) คุณต้องสร้างแผนที่ของคุณเป็นกราฟที่เชื่อมต่อกันและติดตามว่าโหนดใดในกราฟที่ผู้เล่นแต่ละคนใกล้เคียงที่สุด ไม่ใช่ว่าทุกโหนดจะต้องเป็นจุดวางไข่ แต่คุณต้องการกราฟที่ซับซ้อนเพื่อกำหนดระยะห่างระหว่างจุดเกิด ในช่วงเวลาที่วางไข่คุณจะทำซ้ำกราฟและให้คะแนนแต่ละโหนดวางไข่ขึ้นอยู่กับว่ามันอยู่ใกล้โหนดมีผู้เล่น

โหนดอุดมคตินั้นมี:

  • ไม่มีผู้เล่นอยู่ในขณะนี้
  • มีผู้เล่นมากกว่าศูนย์ในโหนดใกล้เคียง (มีลิงก์จำนวนน้อยออกไป)

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

คุณจะต้องเพิ่มขนาดแผนที่เมื่อจำนวนผู้เล่นเพิ่มขึ้น แต่kไม่จำเป็นต้องเท่ากับ 1 หรือมากกว่า กรณีที่เลวร้ายที่สุดของคุณยังคงเป็นไปได้ว่าทุกโหนดบนกราฟมีผู้เล่นอย่างน้อยหนึ่งคน - ในกรณีนี้ไม่มีโหนดที่ดีที่จะใช้และคุณจะต้องประสบกับกรณีนั้นและวางไข่ผู้เล่นที่รู้ว่าพวกเขาจะ สิทธิในที่ดินที่อยู่ด้านบนของอีก อัลกอริทึมการให้คะแนนยังคงน้ำหนักโหนดเพื่อให้คุณวางไข่ในโหนดกับผู้เล่นอื่นที่น้อยที่สุด

โปรดจำไว้ว่ากราฟแผนที่ของคุณจะต้องถูกสร้างขึ้นอย่างระมัดระวังโดยมีความรู้เกี่ยวกับแผนที่เส้นทางการเดินจุดใดจุดหนึ่งและระยะทางที่มีประสิทธิภาพระหว่างจุดโหนไม่ใช่ระยะทางจริง เช่นเดียวกับในใช้บางสิ่งบางอย่างเช่นเวลาที่วัดได้เพื่อสำรวจระหว่างโหนดมากกว่าระยะทางเพื่อพิจารณาภูมิประเทศที่ยากขึ้น นอกจากนี้คุณจำเป็นต้องบัญชีสำหรับ open-ness vs cover; สองโหนดอาจอยู่ไกลกันทางกายภาพ แต่เนื่องจากพวกมันเปิดอยู่มากการวางไข่ผู้เล่นในแต่ละโหนดอาจหมายความว่าพวกเขามีความเสี่ยงเท่ากันราวกับว่าคุณวางไข่ติดกัน

การปรับแต่ง:

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

0

บางคนได้พูดคุยถึงข้อ จำกัด ของความต้องการของคุณแล้ว (แผนที่จะต้องขยายในบางจุดเพื่อป้องกันการแออัดเกินไป) และในที่สุดก็คลี่คลายความจริงที่ว่ามีแนวโน้มว่าจะไม่มีอัลกอริธึมตำแหน่งที่สมบูรณ์แบบ เมื่อมีโอกาสที่ไม่มีอัลกอริทึม "สมบูรณ์แบบ" ฉันมักจะมองไปที่การวิเคราะห์พฤติกรรม คุณมีเกณฑ์หลายข้อที่อาจขัดแย้งกับผู้อื่นโดยตรงหรือโดยอ้อมพร้อมกับพื้นที่การค้นหาที่ซับซ้อนมาก การค้นหาวิธีแก้ปัญหาที่ดีที่สุดอาจไม่สามารถทำได้หรือใช้งานได้จริง แต่ด้วยการปรับจูนเล็กน้อยวิธีการทางสถิติสามารถทำได้ดีเป็นส่วนใหญ่

ระบุที่อยู่เกณฑ์ที่สามและสี่ของคุณ: "แผนที่ไม่ควรขยาย"

ฉันจะทำให้แน่ใจว่าในตอนแรกคุณมีโหนดจำนวนมาก (เช่น: หนาแน่นเท่าตาข่ายนำทางสำหรับการค้นหาเส้นทาง) สิ่งนี้ทำให้การคำนวณระยะทางกับผู้เล่นอื่น ๆ มีราคาแพงกว่า (ไม่ใช่โหนดที่อยู่ใกล้เคียงโดยตรง) แต่นี่ไม่ใช่กระบวนการที่จะเกิดขึ้นมากกว่าหนึ่งครั้งต่อรอบ (ฉันถือว่า) โบนัสสิ่งนี้คือคุณสามารถใช้ไลบรารี nav ล่วงหน้าสำหรับการดำเนินการส่วนใหญ่ของคุณ นอกจากนี้สิ่งนี้จะเคารพการสำรวจเส้นทางรอบ ๆ สิ่งกีดขวางในลักษณะที่ยุติธรรมซึ่งระยะทางแบบยุคลิดอาจไม่ได้ (ผู้เล่นในเขาวงกตอาจอยู่ใกล้กันมากกว่าในทุ่งโล่ง)

คำนวณฮิวริสติกสำหรับลักษณะการวางไข่ที่คุณต้องการ:

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


0

ถ้าสนามเด็กเล่นเป็นพรูทอพอโลยี (เช่นรูปสี่เหลี่ยมผืนผ้าที่จะ“ออกจากขอบเขต” หมายถึงการเข้ามาที่ฝั่งตรงข้าม) นี้มีแนวโน้มที่จะเป็นคำตอบที่ดี: เล่นjspawns ที่x = (pjW/N) mod W, y = (qjH/N) mod Hที่W,Hมีขนาดของสี่เหลี่ยมผืนผ้า,Nเป็น จำนวนผู้เล่นและp,qเป็นจำนวนเต็มที่ต้องพิจารณา พวกเขามีความแตกต่างกัน (อาจจะ) sqrt(N)ความสำคัญและไม่ไกลจาก จุดวางไข่เป็นรูปแบบ 'วอลล์เปเปอร์' แบบเฉียง

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


0

เกี่ยวกับ:

ผู้เล่นแต่ละคนถูกล้อมรอบด้วยกล่องที่ไม่วางไข่ (หรือวงกลม)

เช่นเดียวกับในมีสี่เหลี่ยมจัตุรัสขนาดหนึ่งที่วางไข่รอบผู้เล่นทุกคนและติดตามผู้เล่นรอบ ๆ - ไม่มีผู้เล่นคนใดสามารถวางไข่ภายในสี่เหลี่ยมนั้นได้

สี่เหลี่ยมเหล่านี้มีผลกับการวางไข่เท่านั้นและจะไม่เคลื่อนไหวใด ๆ ในระหว่างเกม

ใช้ได้กับการวางไข่ครั้งแรกเท่านั้นหรือวางไข่แบบต่อเนื่อง

(จุดแสดงผู้เล่นและสีเขียวหมายถึงพื้นที่วางไข่ที่เป็นไปได้สำหรับผู้เล่นใหม่)

ขนาดแผนที่ไม่จำเป็นต้องเพิ่มสัดส่วนตามจำนวนผู้เล่น

ในการจัดการกับสิ่งนี้คุณสามารถทำหนึ่งในสองสิ่ง: (หรือทั้งสองอย่าง)

  • ลดขนาดของกล่องที่ไม่วางไข่ตามจำนวนผู้เล่น
  • อนุญาตให้ผู้เล่นศัตรู X วางไข่ในแต่ละกล่อง
    • จำนวนนี้สามารถเพิ่มได้เมื่อคุณไป (เริ่มต้นที่ 0)
    • ตัวแปรที่ 1: มีกล่องไม่มีการวางไข่ที่เล็กกว่าและกล่องที่วางไข่ที่ใหญ่กว่า
    • ตัวแปรที่ 2: ความน่าจะเป็นของน้ำหนักตามการวางไข่ใหม่ของผู้เล่นรายนี้ (ถ้าอยู่ในกล่อง) - อาจใช้งานได้ยาก
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.