2010-05-19 23 views
1

Je voulais juste avoir quelques opinions sur la structure générale d'un jeu que je dois construire pour un cours de programmation. Essentiellement - Je construis deux programmes - un client et un serveur pour un jeu de cuirassés. J'ai déjà écrit le programme actuel qui joue le jeu des cuirassés. Le programme que j'ai écrit est où une carte et un fichier de règles est lu et l'utilisateur essaie de deviner l'emplacement des navires jusqu'à ce qu'ils coulent tous les navires.C Concept de jeu CLI

Pour ce nouveau programme - le serveur doit permettre à des groupes de deux personnes de se battre l'un l'autre en utilisant le jeu de bataille navale. Les clients se connectent au jeu en utilisant un nom de jeu, et une fois que le jeu reçoit deux clients, il peut commencer. Nous devons utiliser TCP sur la machine locale pour communiquer entre le serveur et les clients, ainsi que les threads dans au moins le serveur.

Voici ce que je pensais ..

Une fois qu'un client se joint - vérifier quel jeu ils veulent se connecter. Si c'est un nouveau jeu - créez un nouveau fil pour ce jeu et donnez le descripteur de socket pour le premier client. Sinon, s'il y a déjà une personne dans le jeu, alertez le fil de jeu du nouveau participant et il peut commencer la partie. Quand un jeu est démarré, le thread du jeu devrait générer deux threads de plus ... une instance du jeu de bataille navale pour chaque joueur. L'instance pour chaque joueur sera l'endroit où leurs navires sont placés. Le thread écoutera ensuite l'entrée de chaque client à tour de rôle et transmettra cette information sur le jeu correspondant.

Est-ce que cette interprétation est correcte? Que j'ai besoin de 3 threads par jeu en cours? Et aussi, est-il possible d'utiliser exec() dans un thread pour lancer une nouvelle instance de battleships et ensuite passer des informations au stdin de cette instance en utilisant des threads (et obtenir la stdout)?

S'il vous plaît laissez-moi savoir si j'ai été brumeux sur quoi que ce soit et je vais clarifier. Merci beaucoup d'avance pour toute aide!

+0

Ce n'est pas une vraie question. –

+1

@Tadeusz A. Kadlubowski: C'est un tas de questions floues, mais elles sont définitivement * réelles *. – ereOn

+0

désolé, ne pensait pas vraiment à une question définitive. pourrions-nous simplement dire que ma question est la suivante: est-ce que mon interprétation est valide ou contient-elle des problèmes? – Gary

Répondre

1

Je voudrais utiliser autant de threads que les clients connectés et les utiliser uniquement pour gérer les connexions. Les jeux eux-mêmes ne sont que des données/objets et n'ont pas besoin de fil spécifique.

+0

Mais comment pourrais-je réellement lancer le jeu à partir du programme. J'aurais besoin d'utiliser une des fonctions de exec() pour commencer le programme de cuirassé, non? – Gary

+0

Pensez modèle MVC. Les connexions sont les vues, les jeux sont les modèles. Vous avez besoin d'un contrôleur pour connecter les vues et les modèles, mais il peut fonctionner depuis le thread principal et contrôler de nombreux jeux et connexions. – mouviciel

+0

Je ne suis pas d'accord. J'ai déjà essayé ça et ça a échoué. Que se passe-t-il lorsque vous avez 1000 connexions? Cela signifie opprimer 1000 threads et ainsi tout ralentira. Mais c'est juste mon opinion – Sanctus2099