เซิร์ฟเวอร์เกมกระดานแบบอ้างอิงอ้างอิง [ปิด]


12

มีการอ้างอิง / หนังสือที่ดีที่จะแนะนำเกี่ยวกับวิธีการสร้างเซิร์ฟเวอร์เกมเทิร์นเบสหรือไม่? มันเหมือนกับเซิร์ฟเวอร์หมากรุกสำหรับจับคู่ผู้เล่นหมากรุกและรักษาสถานะของเกม ในอดีตตัวอย่างเช่น IGS (for go, weiqi) เป็นการใช้งานซ็อกเก็ต เทคโนโลยีร่วมสมัยที่มีให้เรียนรู้คืออะไร ขอบคุณ!


มีเธรดที่เกี่ยวข้องในฟอรัมgdev gamedev.net/topic/565319-turn-based-game-design-help
zinking

คุณสามารถเรียนรู้จากการออกแบบเซิร์ฟเวอร์เกมดังต่อไปนี้: developers.google.com/games/services/android/…
tomash

คำตอบ:


5

ฉันไม่คิดว่าจะมีหนังสือเล่มหนึ่งเกี่ยวกับเรื่องนี้เนื่องจากหัวข้อเป็นเรื่องเล็กน้อย

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

การจับคู่ ppl สามารถทำได้ผ่านElo ... แต่ฉันเดาว่าคุณรู้


บางทีคุณสามารถอธิบายเพิ่มเติมได้อีกเล็กน้อยไข่ ฉันไม่รู้ 'elo'
zinking

ฉันแก้ไขโพสต์เพื่อรวมลิงก์ไปยังระบบ Elo
Kylotan

2

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

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

คุณต้องการการรายงานระหว่างเทิร์นใด ๆ เช่น "ผู้เล่น 2 กำลังเคลื่อนย้ายยูนิต" หรือ "คู่แข่งของคุณอาจเป็น AFK" หรือไม่? ถ้าเป็นเช่นนั้นคุณอาจต้องการเปิดการเชื่อมต่อซ็อกเก็ต

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

แก้ไข: หากเกมรองรับเกมแบบ 1 ต่อ 1 เท่านั้นการเชื่อมต่อแบบจุดต่อจุดอาจดูคุ้มค่า


1

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

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

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