2016-10-26 1 views
0

Je développe un jeu multijoueur en Java qui doit être mis en réseau et au tour par tour et je démarre un nouveau thread pour chaque client qui se connecte au serveur (entre 2 et 4). Fondamentalement, chaque thread doit appeler la fonction throwthedice() quand c'est son tour et après que le plateau de jeu se mettra à jour avec la nouvelle position. Je suis bloqué sur comment je peux synchroniser ce thread avec wait() et notify() (s'il y a plus de 2 threads, disons 4, comment chaque thread sait qu'il doit notifier seulement le thread qui suit et pas les autres ?). Aussi, existe-t-il une autre méthode plus simple pour synchroniser les threads correctement, ou ai-je vraiment besoin de synchroniser les threads?Jeu multithread tour par tour de réseau

Répondre

0

Si vous avez un jeu au tour par tour, alors l'implémentation la plus facile est probablement de gérer toute la logique du jeu dans un seul thread. Les threads client placent uniquement les actions reçues dans une file d'attente thread-safe, qui est lue par le thread de jeu principal. (Ceci est une instance du modèle producteur/consommateur.)

Si vous vouliez distribuer la logique aux threads, vous aurez besoin de différents objets de verrouillage (par exemple, Semaphore) pour différents lecteurs. Si le joueur 1 a fait ses tours, le fil 1 libérera le verrou du joueur 2 et notifiera donc le fil 2.

+0

Comment puis-je faire en sorte que les threads des clients envoient les informations au thread principal dans le bon ordre? – Ana

+0

Signaler chaque client dont c'est le tour. Si ce n'est pas le tour du client, le client n'envoie tout simplement pas d'informations. C'est la responsabilité du client d'envoyer des informations correctes. S'il envoie des informations alors qu'il n'a pas son tour, le serveur doit gérer cela de manière appropriée (par exemple, ignorez simplement, ou envoyez un message d'erreur au client). –

0

Pour un jeu au tour par tour, je ne comprends pas pourquoi vous devriez synchroniser ces fils ... Si vous implémente une application client-serveur pour faire ce jeu au tour par tour (ce qui est une bonne idée) tant que le serveur envoie l'information à tous les clients peu importe si les threads clients sont synchronisés ou pas seulement qu'ils reçoivent la mise à jour . En d'autres termes, il n'y a pas de raison de synchroniser les discussions pour un jeu basé sur le tour parce qu'il n'y a pas d'action "instantanée" (les joueurs I.e se déplacent en même temps comme un jeu de devoir).