Tham khảo máy chủ trò chơi theo lượt? [đóng cửa]


12

Có tài liệu tham khảo / sách hay nào để giới thiệu về cách xây dựng máy chủ trò chơi theo lượt không? Nó giống như một máy chủ cờ vua để ghép các người chơi cờ và giữ trạng thái trò chơi. Trong quá khứ, ví dụ IGS (for go, weiqi) là một triển khai dựa trên socket. Các công nghệ đương đại có sẵn để học hỏi là gì? Cảm ơn!


có một chủ đề liên quan trên diễn đàn gdev gamedev.net/topic/565319-turn-basing-game-design-help
zinking

Bạn có thể học hỏi từ thiết kế máy chủ trò chơi sau: developers.google.com/games/service/android/
mẹo

Câu trả lời:


5

Tôi không nghĩ rằng có một cuốn sách đặc biệt về điều này, vì chủ đề này khá tầm thường.

Chỉ cần tưởng tượng một máy chủ thư nơi người chơi có thể gửi hành động của họ qua thư. Máy chủ có tất cả các hành động được thực hiện cho đến nay (dưới dạng thư), có nghĩa là bạn có trạng thái trò chơi. Nếu bạn muốn tải lại gamestate, chỉ cần thực hiện tất cả các hành động bên trong thư theo trình tự thời gian. Điều duy nhất bạn phải làm là đảm bảo rằng đó là lượt của mình ... nhưng điều đó cũng dễ dàng (ví dụ: số lần lượt). Không cần các công nghệ hiện đại ... một giải pháp máy chủ / máy khách thư đã được sửa đổi sẽ làm được.

Ghép nối ppl có thể được thực hiện thông qua Elo ... nhưng tôi đoán bạn biết rằng


có lẽ bạn có thể giải thích thêm một chút, trứng. Tôi không biết 'elo'
zinking

Tôi đã chỉnh sửa bài đăng để bao gồm một liên kết đến hệ thống Elo.
Kylotan

2

Nếu là tôi, tôi sẽ xây dựng nó từ đầu với các ổ cắm. Lượng dữ liệu cần gửi rất nhỏ và tính chất theo lượt khiến độ trễ không đáng chú ý.

Câu hỏi thực sự, theo tôi, là những tính năng bổ sung nào bạn cần trên nó. Các phiên trò chơi có liên tục không (ai đó có thể bỏ học và tham gia lại, trò chơi có thể được lưu không, v.v.) không? Nếu bạn đang thực hiện kiểu lưu trữ Văn minh, có lẽ bạn muốn đẩy dữ liệu lưu ra cho tất cả các máy khách hoặc có phía máy khách đã lưu được thực hiện với khóa do máy chủ cung cấp được nhúng để xác minh.

Bạn có cần bất kỳ loại báo cáo giữa các lượt, ví dụ: "Người chơi 2 đang di chuyển một đơn vị" hoặc "Đối thủ của bạn có thể là AFK" không? Nếu vậy bạn có thể muốn giữ các kết nối ổ cắm mở.

Nói chung, trừ khi có một số lý do thuyết phục để đi chệch hướng, tôi sẽ giữ cho máy chủ câm và đơn giản nhất có thể. Lá ít để gỡ lỗi. Tôi cũng thích sử dụng các giao thức văn bản đơn giản, vì tôi có thể kiểm tra các máy chủ của mình bằng telnet mà không cần máy khách trò chơi thực tế (có thể nghi ngờ trong một vấn đề nhất định), nhưng điều này khuyến khích thao tác dữ liệu của Wireshark (mà bạn có thể sẽ kiểm tra xem sao)

Chỉnh sửa: Nếu trò chơi chỉ hỗ trợ các trò chơi 1 kèm 1, các kết nối ngang hàng có thể đáng xem.


1

Điều quan trọng là không lật đổ máy chủ là gì và trách nhiệm của nó là gì. Trong trường hợp này, bạn có một trò chơi hoạt động tương đối chậm, do đó kiến ​​trúc máy chủ sẽ không phức tạp lắm (so với một trò chơi có nhịp độ nhanh hơn mà bạn đã tính toán chết, v.v.). Máy chủ của bạn nên lắng nghe trên một cổng TCP (cũng có thể bỏ qua UDP nếu bạn không yêu cầu tốc độ nào) cho các máy khách được kết nối để gửi các gói thông tin. Nó chấp nhận các gói, xác nhận chúng dựa trên các quy tắc trò chơi và gửi lại phản hồi. Trong trường hợp cụ thể của bạn, máy chủ của bạn sẽ biết ai đang quay đầu và từ chối mọi nỗ lực của người chơi khác để thực hiện các hành động cho đến khi đến lượt của họ.

Tôi không biết bạn đã nghĩ đến công nghệ gì nhưng điều này đủ dễ thực hiện trong Java với thư viện Kyronet. Chỉ cần gửi các hành động trò chơi của bạn đến máy chủ trung tâm (cũng có thể là một trong hai người chơi), xử lý nó và gửi lại bản cập nhật trò chơi cho cả hai người chơi. Tôi chắc chắn một cái gì đó tương tự tồn tại cho .NET.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.