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.
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?
la source