Implémentation multijoueur, puis-je l'implémenter plus tard si je le souhaite?


15

J'ai l'intention d'utiliser XNA pour construire un projet de jeu. Je ne suis pas tout à fait sûr pour le moment si je veux ajouter une fonctionnalité multijoueur ou non, car j'ai beaucoup d'autres problèmes à résoudre que je suis encore nouveau. Je ne veux pas que le projet devienne nécessairement incontrôlable.

Ma question est la suivante: si je me lance dans mon projet sans avoir l'intention d'ajouter le support multijoueur, est-il facile de revenir en arrière (ce n'est généralement pas le cas) et d'ajouter le code nécessaire pour capturer un jeu multijoueur?

Réponses:


24

Voici de bons conseils tirés du manuel de la bibliothèque de mise en réseau Zoidcom :

Si votre projet est au stade de la planification, il est conseillé de concevoir le projet pour la mise en réseau dès le début. Visser le code réseau à un stade avancé du projet entraînera très probablement une refactorisation massive ou une grande quantité de piratage, résultant en un code difficilement maintenable et dépourvu de bogues.

Le moyen le plus propre est d'implémenter le jeu entier comme s'il s'agissait d'un pur jeu en réseau. Autrement dit, implémentez le code pour un serveur dédié et implémentez ce code pour être uniquement du code serveur. Implémentez le code client du jeu de manière similaire. Le serveur et le client peuvent s'exécuter dans le même processus et n'ont même pas besoin d'utiliser un vrai socket réseau, mais ils doivent être des entités distinctes et tout le code doit être conçu pour fonctionner de cette façon. Lorsque le joueur saute, ne modifiez pas directement le vecteur de saut du joueur, mais envoyez un paquet `` touche enfoncée '' au serveur et laissez-le gérer cela.

Cela signifie que même dans une partie solo, un serveur invisible fonctionne en arrière-plan. Une version multijoueur du même jeu a juste besoin de se connecter à un serveur distant au lieu de celui local et le tour est joué, multijoueur. Les avantages de ceci sont:

pas de code séparé pour solo et multijoueur le code réseau est testé et développé pendant tout le code propre du projet

Les projets utilisant ce schéma sont presque tous les jeux utilisant l'un des moteurs Quake, Civilization 4, Neverwinter Nights et bien d'autres.

Pour connecter le client et le serveur dans le même processus avec une latence nulle, des sockets locaux peuvent être utilisés. Celles-ci sont fournies par Zoidcom et transmettent les paquets directement d'un ZCom_Control à un autre, sans passer par une socket de niveau OS.


Il semble que ce soit une configuration pour une autorité de serveur pure que je déteste. Si votre ping vers le serveur est faible, il fonctionne correctement. Mais lorsque le ping devient trop élevé, les actions sur votre écran sont retardées. Je préfère de loin la méthode utilisée par le moteur source, le client exécute la physique et les choses localement et toute action apparaît immédiatement, mais le serveur la vérifie toujours pour s'assurer que les gens ne piratent pas, et s'il y a des incohérences dans ce qui aurait dû se produire , le serveur envoie l'état correct au lecteur et remplace la simulation client par de nouvelles données.
AttackingHobo

8
@AttackingHobo: Vous décrivez simplement la prédiction client. Vous pouvez très bien combiner la prédiction client et l'autorité serveur, et cela n'empêche pas du tout l'architecture décrite dans le manuel Zoidcom.

@AttackingHobo @Joe: Et Zoidcom prend en charge la prédiction côté client ^^
Leftium

2

Je suis d'accord avec les conseils cités dans la réponse de Leftium; concevez-le pour la mise en réseau dès le début, car vous ne pourrez pas l'ajouter plus tard .

La première fois que j'ai essayé de créer un jeu multijoueur (je n'essayais même pas de créer un jeu solo!), Je me suis dit que j'allais d'abord faire fonctionner le jeu, puis ajouter du réseautage. Mauvaise idée. Je me suis retrouvé avec un prototype d'un jeu solo vraiment ennuyeux et je ne sais pas comment transformer cela en un jeu multijoueur. Je l'ai entièrement abandonné et j'ai recommencé, cette fois en écrivant du code de mise en réseau multijoueur dès le début. Tout a cliqué.

Je suis sûr qu'il n'est pas impossible de commencer avec un jeu à un joueur et d'ajouter une fonctionnalité multijoueur. Si vous y réfléchissez bien, planifiez-le correctement et assurez-vous de connaître votre stratégie, alors essayez. Je pense que ce serait un puzzle intéressant à résoudre à tout le moins. Mais assurez-vous vraiment de connaître votre plan quant à la façon dont vous allez ajouter du réseautage.

Je pense qu'il y a un juste milieu (même si je ne l'ai jamais essayé). Vous pouvez écrire des classes factices pour les fonctionnalités de mise en réseau / multijoueur et être diligent dans leur utilisation pendant que vous écrivez le jeu solo. Plus tard, si vous décidez d'implémenter le multijoueur, remplissez simplement les classes factices et vous ferez la plupart du chemin. Cela approche beaucoup la méthode serveur / client, mais vous pourrez peut-être vous en tirer avec moins de travail; après tout, un jeu solo est plus facile à faire qu'un jeu multijoueur, donc si vous allez écrire votre jeu solo comme un jeu multijoueur, alors pourquoi ne pas simplement le rendre multijoueur?

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.