Réalisation d'un jeu de bataille navale en C++


précédentsommaire

E. On revient au jeu dans sa globalité

Maintenant qu'on a la couche haute, la couche basse et la couche de manipulation des données, on peut écrire le fil directeur du jeu plus en détail :

 
Sélectionnez
    Gfx *ma_gui = new IrrInterface;
 
    // choix client ou serveur
    int server = ma_gui->choose_client_server();
 
    switch(server){
        case 0:{ // serveur
            cout << "mode serveur démarré" << endl;
            Server s;
            // ouvrir la socket
            s.open_socket(1000);
 
            // attendre le client
            s.wait_for_client();
 
            // récupérer les données du jeu
            Flotte f = s.get_game_data();
 
            // envoyer les données du jeu au client
            s.send_game_data_to_client(f);
 
            // le serveur attend que le client ait positionné ses bateaux
            s.wait();
 
            // le serveur positionne ses bateaux sur sa grille
            if (ma_gui->positionner_bateaux(f)==1){ // on souhaite quitter
                break;
            }
 
            Essais e;
 
            // début du jeu
            // tant qu'il nous reste des bateaux
            // et qu'on n'a pas touché tous ceux de l'adversaire
            while (f.get_effectif() > 0 && f.get_effectif_depart()-e.get_effectif_adverse()>0){
                pair<int,int> coup = ma_gui->choisir_attaque(e,f);
                if (coup==pair<int,int>(-1,-1)) // on quitte
                    break;
 
                // traitement du tir
                s.attaque(coup, e);
                ma_gui->update(e,f);
 
                // on a gagné
                if (f.get_effectif_depart()-e.get_effectif_adverse() ==0)
                    break;
 
                s.defend(&f,&e);
                ma_gui->attendre();
                ma_gui->update(e,f);
            }
 
            // quelqu'un a perdu, on affiche un écran
            if (f.get_effectif() == 0){
                ma_gui->affiche_perdu();
                cout << "terminé : perdu" << endl;
            }else
            if (f.get_effectif_depart()-e.get_effectif_adverse() == 0){
                ma_gui->affiche_gagne();
                cout << "terminé : gagné" << endl;
            }
 
            break;
        }
		case 1:
		// le dual pour le client
		// ...
    delete ma_gui;
 
} 

Et il vous suffit de changer la première ligne par l'instanciation d'une autre interface pour avoir tout à fait un autre jeu d'un point de vue graphique. Ensuite pour rendre les deux interfaces vraiment indépendantes, on peut tout à fait les compiler séparément et les utiliser au travers de bibliothèques dynamiques dll/so.

E-I. Fonctionnement du jeu

Pour fonctionner correctement, toutes les dll doivent être accessibles depuis l'exécutable. Il faut aussi que les données du jeu soient accessibles. Dans l'archive des sources, ce répertoire est accédé via ../data. Si vous changez l'emplacement de l'exécutable, assurez-vous que ce répertoire est toujours accessible. Au besoin, recompilez les sources avec un autre chemin.

Une partie doit être créée avant qu'un client ne tente de la rejoindre. Ca peut paraître évident, mais ça va mieux en le disant. Si vous jouez sur des réseaux séparés assurez-vous de rediriger le port utilisé pour faire une redirection de port. Par défaut, le port utilisé est le port 1000.

Le joueur qui rejoint la partie est le premier à placer ses bateaux. Pendant qu'il les place, le serveur est bloqué en attente. Puis c'est au serveur de placer ses bateaux. Le serveur est le premier à jouer.

E-II. Téléchargement

Si vous souhaitez juste exécuter le jeu, il vous faut télécharger les DLLs, les binaires et les données du jeu. L'archive des sources n'est utile que si vous voulez consulter le code et/ou le modifier. Le code source est distribué sous licence GPL.

E-III. Remerciements

Je remercie Julp et fearyourself pour leur relecture et Léon Bérelle, qui m'a permis d'utiliser l'une de ses créations :

Image non disponible

précédentsommaire

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

  

Copyright © 2006 Pierre Schwartz. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.