Java jeu multijoueur - concepts de mise en réseau

Pour un projet d'école, nous sommes censés créer un jeu multijoueur en Java (il faut être client/serveur) qui peut être joué sur internet (nous sommes de la programmation à l'école, il n'est donc pas de devoirs). Le jeu est au tour par tour, mais il devrait y avoir un chat, ce qui bien sûr est en temps réel. Cependant, aucun de nous a de l'expérience en programmation réseau et plus je lis, plus de questions, il m'a semblé.

Ma première pensée a été d'utiliser l'API socket pour mettre en œuvre la partie multijoueur. Le serveur attend des nouvelles données des clients. Cependant, il existe de multiples types de données à recevoir, comme les messages de chat, le mouvement, etc. Aussi, une fois la connexion au serveur est établie, certaines données initiales (comme le nom du Joueur) doit être envoyé. Le serveur doit être en mesure de voir ce genre de message qu'il a reçu, mais comment? Je pensais à la création d'une classe Message avec un champ de type chaîne de type. Mais dans mon code serveur, je vais obtenir le code comme ceci:

if (message.type.equals("message")) {
  //code to execute for chat messages
} else if (message.type.equals("movement")) {
  //code to execute for movement
} else if () {
  //...
} else {
  //...
} //Please ignore syntax errors :P

Quand il y a beaucoup de différents types de données à envoyer (et il y en AURA), ça ne ressemble pas à la manière la plus efficace. Aussi, cela signifierait à la fois le serveur et le client devrait avoir ce Message-classe/interface (code en double).

Quels sont les autres jeu trucs? Par exemple, le joueur 1 se déplace à un personnage de position qui va à l'encontre d'un autre personnage. Le client du joueur 1 calcule ce defeatment et applique les bonnes actions. Mais ce qui doit être envoyer au serveur? Juste la nouvelle position du joueur ou la defeatment? Avec la première option, ce qui signifie que tous les autres clients doivent effectuer les calculs. Ne pouvait pas causer d'ennuis? Comme je n'ai pas de réseau avant l'expérience de la programmation, je suis un peu confus sur la façon de faire toutes ces choses.

J'ai aussi lu dans un autre thread ici sur Stackoverflow que le RMI peut être une meilleure option. Après avoir lu quelques informations à ce sujet, je comprends ce que RMI est, mais je ne suis pas encore en mesure de voir si c'est une bonne option pour ce projet ou non. Des conseils à donner pour cela?

Comme vous le voyez, je suis un peu confus sur la façon de démarrer avec la mise en réseau le cadre de ce projet. J'ai cherché quelques jeu de livres de programmation (Java, bien sûr), mais aucun d'entre eux sont axés sur la mise en réseau de la partie. J'ai aussi cherché pour Java mise en réseau des livres, mais ceux-ci semblent être axées sur la technologie, et non pas sur le code de bonne pratiques.

Si quelqu'un connait un bon livre ou a des conseils dans la bonne diection, il serait grandement apprécié.

Grâce

"... la programmation à l'école, donc ce n'est pas à la maison". Classique.
Au moins, il ne veux pas de code.
Nous sommes censés travailler sur ce projet à l'école, oui. Je ne suis pas demander à quelqu'un de faire mon travail, tout simplement demander des conseils sur la façon de le mettre en œuvre.
Compris, et je pense que votre question est raisonnable, et que @Thomas dit, vous ne lui demandez pas de code, mais tout de même, je pense que d'affirmer qu'il n'est pas de "devoirs" est plein d'humour. Je ne vous souhaite bonne chance.
est compris (au moins ici) comme un exercice dans lequel l'acquisition des connaissances est l'objectif principal, et la chose créée est l'objectif secondaire. (Cela peut être en classe, en laboratoire, à la maison, ou même auto-dirigé, avec pas d'école dans l'image.) Ceci est en contraste à "travailler", dans lequel la création est l'objectif principal et de l'apprentissage est l'objectif secondaire. Nous avons séparé ces concepts afin que nous puissions donner des conseils dans des cas comme le vôtre, et code dans les autres cas.

OriginalL'auteur Bv202 | 2011-09-28