ทางออกที่ดีที่สุดสำหรับเกม Android เรียลไทม์หลายคน [ปิด]


11

ฉันวางแผนที่จะสร้างเกมเรียลไทม์สำหรับผู้เล่นหลายคนสำหรับ Android (ผู้เล่น 2-8 คน) และฉันคิดว่าโซลูชันสำหรับองค์กรที่มีผู้เล่นหลายคนนั้นดีที่สุด:

  1. ทำให้เซิร์ฟเวอร์บนพีซีและไคลเอนต์บนมือถือการติดต่อทั้งหมดผ่านเซิร์ฟเวอร์ (ClientA -> PC SERVER -> ไคลเอนต์ทั้งหมด)

  2. ใช้บลูทู ธ ฉันยังไม่ได้ใช้และฉันไม่รู้ว่ามันยากที่จะสร้างผู้เล่นหลายคนผ่านบลูทู ธ

  3. ทำให้เซิร์ฟเวอร์บนหนึ่งในอุปกรณ์และอุปกรณ์อื่น ๆ เชื่อมต่อ (ผ่านเครือข่าย แต่ฉันไม่รู้ว่าการแก้ไขปัญหาอุปกรณ์ผ่าน NAT เป็นเรื่องยากไหม)

  4. ทางออกอื่น ๆ ?


3
คุณวางแผนที่จะเป็นเกมเฉพาะที่หรือคุณต้องการให้ผู้คนสามารถเล่นกับผู้คนผ่านอินเทอร์เน็ตได้หรือไม่? คุณโฮสต์เครื่องสำหรับเกมหรือไม่
Tetrad

ฉันเลือกเกมผู้เล่นหลายคนขนาดเล็กฉันวางแผนที่จะสร้างเกมที่ผู้คนพบปะกันในห้องและสามารถเล่นเกมเดียวกัน (นี่คือหัวข้อของวิทยานิพนธ์ของฉัน: ผู้เล่นหลายคนบนแพลตฟอร์มมือถือ) แต่ถ้าใครบางคนมีทางออกที่น่าสนใจสำหรับการเล่นผ่านอินเทอร์เน็ตฉันก็สนใจเช่นกัน
piotrek

คำตอบ:


2

ขอสงวนสิทธิ์; ฉันไม่ได้ทำอะไรมากกับจาวาและแพลตฟอร์ม Android

อย่างไรก็ตามประสบการณ์ที่กว้างขวางของฉันเกี่ยวกับภาษา '.net' บนแพลตฟอร์ม Windows Mobile รวมถึงแพลตฟอร์ม windows คือว่า 75-90% ของรหัสทั้งหมดที่จำเป็นในการสร้างและบำรุงรักษาการเชื่อมต่อข้อมูลบลูทู ธ หรือเครือข่าย / สนับสนุนกับระบบปฏิบัติการหรือไลบรารีที่จะต้องเข้าถึงฮาร์ดแวร์

จนถึงตอนนี้ก็ดูเหมือนว่าเป็นจริงกับ Android ด้วยวิธีการเปิดเผยระบบปฏิบัติการสำหรับการสร้างการเชื่อมต่อข้อมูลผ่านบลูทู ธ หรืออินเทอร์เน็ตพร้อมกับการเปิด / ปิดการใช้งานฮาร์ดแวร์ที่เกี่ยวข้อง

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

ส่วนอื่น ๆ นั้นถูกต้องในปัจจุบันนั้นบลูทู ธ v2.0 / v2.1 นั้นไม่สามารถรองรับการโหลดข้อมูลขนาดใหญ่ได้ สิ่งนี้จะเปลี่ยนไปด้วยการแพร่กระจายในที่สุดของ v3.0 และสูงกว่า และมีวิธีในการหลีกเลี่ยงข้อ จำกัด นี้

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

CON:ผู้เล่นแต่ละคนจะเล่นด้วยตัวตนของเกมที่ไม่เหมือนใครซึ่งจะเชื่อมโยงกับผู้เล่นคนอื่น ๆ เพื่อป้องกันไม่ให้เกมหลงทางไกลเกินไปจากการซิงค์ซึ่งกันและกัน

CON:รหัสสนับสนุนอาจมีความซับซ้อน / ซับซ้อนและยากที่จะคาดหัวขึ้นอยู่กับสิ่งที่คุณต้องการบรรลุ

PRO:ไม่จำเป็นต้องใช้เซิร์ฟเวอร์หรืออุปกรณ์ส่วนกลาง! ไม่จำเป็นต้องบำรุงรักษา $$$

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

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

ฉันไม่มีเวลาที่จะพัฒนาเอ็นจิ้นเกมเชิงลึกเต็มรูปแบบที่ใช้สิ่งนี้ เกมที่ฉันสร้างนั้นมีข้อ จำกัด ในการสร้างเกมที่คล้ายกับ Monopoly และ Uno ซึ่งดูเหมือนจะทำงานได้ดีมาก

วิธีที่ง่ายที่สุดคือสิ่งที่เลียนแบบ Uno ฉันซ้อนชั้นของผู้แพ้หลังจากผู้เล่นชนะเพื่อให้แน่ใจว่าผู้เล่นชนะเกมทั้งหมด 95% + ของเวลาที่ฉันไม่สามารถบอกได้ว่าฉันไม่ได้เล่นเกมเดียวกันทุกคน

ฉันเริ่มสร้างเกมที่คล้ายกับ Master of Orion II แต่ตัวเกมนั้นเล็กมากสำหรับฉันที่จะทำเอง


9

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

เซิร์ฟเวอร์ที่ใช้คอมพิวเตอร์

ข้อดี

  • พยายามและเป็นความจริง
  • ปรับขนาดได้

จุดด้อย

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

เพียร์ทูเพียร์กับคนใดคนหนึ่งในการควบคุม

ข้อดี

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

จุดด้อย

  • จำเป็นต้องเขียน peer-finder จากส่วนกลางที่เรียบง่าย (ฉันทำเหมืองใน php + mysql ในสองร้อยเส้นง่าย ๆ )
  • เซิร์ฟเวอร์กำลังทำงานบนโทรศัพท์ โทรศัพท์อาจช้า โทรศัพท์เป้าหมายทั้งหมดจะสามารถโฮสต์เกมได้หรือไม่
  • จะเกิดอะไรขึ้นหากโทรศัพท์เซิร์ฟเวอร์ถูกตัดการเชื่อมต่อ
  • ง่ายกว่าไคลเอนต์เซิร์ฟเวอร์เพื่อให้แฮกเกอร์เข้ามาได้

สำหรับบลูทู ธ ฉันคาดว่ามันจะเหมือนกับวิธีเพียร์ทูเพียร์ข้างต้น ฉันไม่คิดว่าคุณควรมีปัญหาใด ๆ กับ NAT

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


ฉันไม่คิดว่ามันสามารถทำได้ผ่านทางบลูทู ธ ฉันสงสัยว่ามันรองรับการออกอากาศ: AFAIK เชื่อมต่อกับโฮสต์เดียวเท่านั้นไปยังอีกโฮสต์หนึ่งมีจำนวนการเชื่อมต่อสูงสุดต่ำมากและช้า
o0 '

4

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

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

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

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

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

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.