Comment créer un serveur de jeu RPG simple? [fermé]

8

Je travaille sur un jeu Sprite Kit. J'aimerais en faire un véritable jeu multijoueur, ce qui signifie que chaque personne qui rejoint le jeu a sa propre caméra. J'ai vu des tutoriels sur les jeux multijoueurs où les joueurs partagent le même écran de jeu, mais ce n'est pas ce que je veux.

Je comprends qu'il doit y avoir un serveur auquel les joueurs se connectent, ce qui signifie que le "monde" auquel les joueurs se connectent doit fonctionner sur le serveur. Est-ce correct?

Comment puis-je avoir un serveur exécutant le «monde» pour ce jeu? Doit-il s'agir d'un type de serveur spécifique, ou puis-je utiliser Node.js ou tout ce que je veux?

duxfox--
la source

Réponses:

17

Vous êtes sur la bonne voie.

L'essentiel du modèle de mise en réseau client-serveur est qu'un serveur est qu'il s'agit d'un point central de connaissance auquel les clients se connectent. Un serveur de jeux contient généralement

  • une représentation du monde en mémoire ,
  • une liste des joueurs connectés ,
  • une boucle de jeu (avec par exemple un gestionnaire de contrôle des joueurs, un moteur physique et une IA).

Vous aurez également besoin d'un canal de communication entre votre serveur et les clients, afin que les clients puissent transmettre les actions du joueur et que le serveur puisse transmettre l'état du jeu.

Des configurations client-serveur plus avancées peuvent impliquer

  • compression delta (envoi uniquement de ce qui a changé entre les états du jeu, pas de tout l'état du jeu) pour des raisons de performances,
  • prédiction d'entrée côté client pour réduire le délai d'entrée perçu (par exemple les commandes CS: GO ),
  • une base de données sur disque (par exemple le stockage de l'inventaire de World of Warcraft ),
  • décharger le travail sur les machines clientes (par exemple l' IA ennemie de Maple Story ),
  • ou le transfert de connexion entre des serveurs (par exemple, la liaison mondiale d' OpenSimulator ).

Commencez simplement. Il est préférable d' ajouter de la complexité uniquement si nécessaire . Ce trou de lapin est profond.


Vous avez mentionné Node.js : j'ai écrit quelques serveurs pour les petits jeux et c'est très bien. Mais vous pouvez écrire un serveur et des clients dans tout ce que vous voulez. Eve Online est en grande partie à Erlang , Minecraft à Java, à peu près tout par Valve est en C ++, et cetera.

Anko
la source
Merci pour la réponse détaillée! une chose qui m'embrouille toujours est la suivante: puisque le jeu est écrit en utilisant le kit sprite pour iPhones, le serveur doit-il savoir à ce sujet? Je suis juste confus parce que je continue à penser, le jeu est en kit sprite, donc le monde fourni par le serveur devrait également être kit sprite. Que
pensez-
@AbdulAhmad Non, vous pouvez créer le serveur avec la langue ou les bibliothèques de votre choix. Gardez à l'esprit que votre serveur est et doit être complètement séparé. Vous créez deux applications différentes et vous devriez penser de cette façon. Un pour le client et un pour le serveur. La partie qui les relie est le protocole de communication entre les deux applications. Bien qu'il y ait d'autres détails qui doivent être coordonnés entre eux (tels que l'état du jeu), en substance, ils sont totalement indépendants. Vous n'auriez même pas beaucoup recours au Sprite Kit côté serveur.
Fuzzy Logic
@FuzzyLogic donc, en essayant de mieux comprendre cela. Si le serveur fournit le «monde» (images, physique, etc.), les clients (iPhones) ne devraient pas avoir tout cela, car le client n'est que la «vue» de cet environnement. est-ce correct? Alors, est-ce que j'utiliserais simplement un kit de sprites côté client pour donner simplement une couche visuelle aux données provenant du serveur? En d'autres termes, le jeu doit être construit principalement côté serveur (toute logique, etc.) et le client est juste mon avis, et où je peux envoyer des événements / commandes au serveur. Cela signifie que je n'ai besoin d'aucun moteur physique / logique de jeu dans sprite-kit
duxfox--
@AbdulAhmad Yep! Un client qui effectue le traitement minimal possible est appelé un client léger . C'est un excellent point de départ.
Anko
3
@AbdulAhmad Oui et non. C'est une bonne façon d'y penser mais principalement pour des raisons d'efficacité, le client dupliquera généralement beaucoup de choses plutôt que de demander au serveur chaque détail, sinon vous aurez probablement des problèmes de performances. Comme l'a mentionné anko, ce serait un bon point de départ. C'est un grand sujet, il existe de nombreuses façons, de nombreuses considérations et de nombreuses parties, il est donc difficile d'expliquer entièrement comment tout cela devrait fonctionner. Cependant, la complexité du jeu dépend vraiment des détails de votre jeu. Pour être honnête, sur la base de vos questions, je ne vous recommande pas d'essayer de le faire encore.
Fuzzy Logic