Y a-t-il de bonnes références / livres à recommander sur la façon de construire un serveur de jeu au tour par tour? C'est quelque chose comme un serveur d'échecs pour jumeler des joueurs d'échecs et garder les états de jeu. Dans le passé, par exemple, l'IGS (pour go, weiqi) est une implémentation basée sur socket. Quelles sont les technologies contemporaines disponibles pour apprendre? Merci!
12
Réponses:
Je ne pense pas qu'il y ait un livre particulier à ce sujet, car le sujet est un peu trivial.
Imaginez un serveur de messagerie où les joueurs peuvent envoyer leurs actions par courrier. Le serveur a toutes les actions effectuées jusqu'à présent (sous forme de mails), ce qui signifie que vous avez l'état du jeu. Si vous voulez recharger le gamestate, exécutez simplement toutes les actions à l'intérieur des mails chronologiquement. La seule chose que vous avez à faire est de vous assurer de qui est le tour ... mais c'est aussi facile (par exemple les numéros de tour). Pas besoin de technologies contemporaines ... une solution serveur / client de messagerie modifiée fera l'affaire.
Le couplage ppl peut être fait via Elo ... mais je suppose que vous le saviez
la source
Si c'était moi, je le construirais à partir de zéro avec des prises. La quantité de données à envoyer est très faible et la nature au tour par tour rend une petite latence imperceptible.
La vraie question, à mon avis, est de quelles fonctionnalités supplémentaires vous avez besoin. Les sessions de jeu sont-elles persistantes (quelqu'un peut-il abandonner et rejoindre, le jeu peut-il être enregistré, etc.)? Si vous effectuez une sauvegarde de style Civilization, vous souhaiterez probablement envoyer les données de sauvegarde à tous les clients, ou faire en sorte que la sauvegarde soit effectuée côté client avec une clé fournie par le serveur intégrée pour vérification.
Avez-vous besoin de rapports entre les tours, par exemple "Le joueur 2 déplace une unité" ou "Votre adversaire peut être AFK"? Si c'est le cas, vous voudrez peut-être garder les connexions de socket ouvertes.
De manière générale, à moins qu'il n'y ait une raison impérieuse de s'écarter, je garderais le serveur aussi stupide et simple que possible. Laisse moins à déboguer. J'aime également utiliser des protocoles en texte brut, car je peux tester mes serveurs en utilisant telnet sans client de jeu réel (ce qui peut être suspect dans un problème donné), mais cela encourage en quelque sorte la manipulation des données par Wireshark (ce que vous ferez probablement vérifier de toute façon).
Modifier: si le jeu ne prend en charge que les jeux en tête-à-tête, les connexions peer-to-peer méritent d'être examinées.
la source
Il est important de ne pas trop penser à ce qu'est un serveur et à ses responsabilités. Dans ce cas, vous avez un jeu à action relativement lente, donc l'architecture du serveur ne sera pas incroyablement compliquée (par rapport à un jeu au rythme plus rapide où vous avez un compte à rebours, etc.). Votre serveur doit écouter sur un port TCP (peut également ignorer UDP si vous n'avez pas besoin de vitesse) pour que les clients connectés lui envoient des paquets d'informations. Il accepte les paquets, les valide en fonction des règles du jeu et renvoie une réponse. Dans votre cas spécifique, votre serveur doit savoir qui est actuellement son tour et rejeter toute tentative d'autres joueurs d'effectuer des actions jusqu'à ce que ce soit leur tour.
Je ne sais pas quelle technologie vous aviez en tête mais quelque chose que ce serait assez facile à faire en Java avec la bibliothèque Kyronet. Envoyez simplement vos actions de jeu au serveur central (pourrait également être l'un des deux joueurs), traitez-le et renvoyez une mise à jour du jeu aux deux joueurs. Je suis sûr que quelque chose de similaire existe pour .NET.
la source