en réseau jeu de dames 3d
TRANSCRIPT
Jeu de dames 3Den réseau
Bertolino Marina, Desmeurs David, Elbeze Léa, Jankee Christopher, Shum Cheuk-Fung
Sommaire
● Introduction○ Fonctionnalités et règles du jeu de dames
● Organisation du projet○ Tickets & Jalons○ Conception du wiki
● Présentation des modules○ Interface graphique○ Traitement du jeu○ Communication réseau○ Stockage des données○ Coordination de l'ensemble (travail de groupe)
● Conclusion
Introduction - Fonctionnalité● Fonctionnalités du jeu de dames
○ Interface graphique 3D et 2D
■ Création d'une partie 2D et 3D
○ Architecture clients/serveur
■ Permettre la communication entre un serveur et des clients
○ Base de données et fichiers
■ Création d'une base de données et des requêtes associées
■ Traitement du les fichiers des sauvegardes des joueurs et de leurs parties
○ Traitement du jeu
■ Traiter les mouvements des pièces, la triche, et création d'une intelligence artificielle.
Introduction - Règles du jeu de dames● Damier de 10 cases par 10 cases● 20 pions (noirs et blancs) par joueur● Un pion devient dame s'il arrive à la dernière rangée● Le pion se déplace en avant, en diagonal et d'une seule
case● Le pion prend en faisant un simple saut de tout les côtés● La dame se déplace en diagonal de tout les côtés et de
plusieurs cases● La dame prend en faisant éventuellement de grands
sauts● Si une prise ou plusieurs sont possibles, alors elles
doivent être jouées● Triche: Supprimer des pièces, Jouer 2 fois, etc...
(possible seulement si l'autre joueur la valide)
Organisation du projet
● Affectation des modules○ Selon les compétences de chacun
● Affectation des tickets○ Selon les besoins les plus importants du projet
● Outils utilisés○ Mise en commun du code
■ SVN, Redmine, Wiki○ Utilisation des outils proposés
■ Eclipse, outils pour les tests unitaires (JUnit)
Tickets & Jalons
● Organisation des tickets○ Tickets fonctionnalité, anomalie ou assistance
■ [Module] [General] Description■ [Module] Description■ [Test_Module] Description
○ Ticket de réunion■ Une tout les jeudis + d'autres complémentaires■ Fixer les orientations
● 3 Jalons○ Version 0 Noyau: Fonctionnalités de base○ Version 1 Alpha: Application exploitable○ Version 2 Beta: Ajout de fonctionnalités optionnelles
Conception du wiki● Par rubriques:
○ Idées de conception○ Fonctionnalités
■ Générales■ Attendues par Jalon
○ Comptes rendus des réunions○ Disposition des tables de la base de données○ Répartition des tâches○ Règles de structuration du code & utilisation du SVN○ Protocole réseau○ Explications pour l'installation de librairies○ UML
■ Mise en place des packages■ Diagramme de classes
UML: Diagramme de classes
Présentation des modules
Interface graphique● Technologie utilisée :
○ Java3D pour le développement ○ Blender + Photoshop pour le design○ UISpec4J pour les tests unitaires
● Résultat : un jeu sympathique et original
+ =
Ce qu'on a :
Un panel de chargement
Connexion en local ou en réseau
Un salon avec un chat
Le jeu en 3D avec des petits lapins et des sons
+ Quelques éléments comme un menu pause et une fenêtre d'aide
Au niveau du code
5 packages :● test view : Les tests unitaires● view : Package principal● view 2D : La partie 2D● view3D : La partie 3D● view_utilitaire : Pour des classe telles que le chargement des
images
La classe TheWindows : Classe mère
● TheWindows représente la fenêtre principale, au centre de la partie graphique● TheWindows est utilisée pour la bijection avec les autres classes ainsi si la classe
X a besoin de la class Y on passe par l'intermédiaire de TheWindows○ exemple : dans la classe GameAction (class ecouteur des actionsdu jeu 3D)
● TheWindows a un objet CoordinateGame et InfoJoueur qui sont utilisés pour coordonner le jeu et les informations sur le joueur.
● CoordinateGame va appeler TheWindows pour modifier le jeu
Tests unitaires sur l'interface graphique : JTestView● Bon déroulement des actions utilisateur sur l'interface● Vérification de la présence des éléments● Passage d'un panel à un autre● Tests possibles grâce au plugin: UISpec4J ( http://www.uispec4j.org/ )
Un damier
Il est composé de cases.Chaque cases possède :
● Un sol pouvant s'illuminer● Des pions (sur le schéma si-dessus)
○ Epsillon signifit qu'il n'y a pas de pion (donc rien ne s'affiche)○ Une carrote signifie un pion mort○ Un pion blanc○ Une dame blanche○ Un pion noir○ Une dame noire
Android ● Par rapport à l'application version PC, il fallait ajouter:
○ Une interface graphique en 2D○ Une gestion différente des fichiers
L'interface graphique ● Fonctionnement avec des activités propre à Android.● Passage d'une activité à l'autre en utilisant les classes CoordinateGame et
InfoJoueur● 2 classes pour les Activités : BDEJSActivity et GameActivity● BDEJSActivity représente le démarrage du jeu avec le choix du pseudo
puis le choix de la partie. Quand on rentre dans une partie on passe à la classe GameActivity
● GameActivity représente le jeu même avec un damier, des pions, le menu pour la triche et celui de pause
Traitement du jeu - Mouvements
● Selon un damier donné:○ Vérifier si un mouvement est possible○ Vérifier si un mouvement est valide○ Obtenir la liste des rafles obligatoires
■ Exemple: Le pion à la position 5, H doit aller à la position 7, F puis à la position 5, D et ensuite à la position 3, F en ayant mangé 3 pièces en tout.
○ Jouer un mouvement■ Eventuellement, à la suite indiquer si un pion est devenu une dame
Traitement du jeu - Jeu, Triche & Fin
● Le joueur joue avec la classe Play○ Méthode qui exécute un tour, vérifie les sélections
de pièces/cases du joueur et exécute son action● La triche
○ Une classe de triche permet au joueur de supprimer des pièces, d'inverser les pièces du damier, jouer 2 fois, etc...
● Fin de partie○ Une classe gère les fins de partie: Egalité, victoire
d'un des joueurs ou si la partie continue ● Les tests
○ Faits selon un damier donné impliquant la victoire ou la défaite d'un joueur ou encore une égalité
Traitement du jeu - IA
● Alpha Beta○ L'intelligence artificielle utilise l'algorithme alpha
beta associé à une méthode d'évaluation selon un damier et un joueur
● Besoin de tout les mouvements○ Une méthode permet, selon un damier donné, de
récupérer toutes les possibilités suivantes● Tests unitaires
○ Ils ont été fait à partir de situations simples où l'AI doit éviter de se faire prendre une pièce, ou au contraire doit jouer un bon coup pour plus tard prendre une pièce
Traitement du jeu - Tests
● Tests unitairesIls sont souvent fait grâce à la classe LoadCheckerboard qui permet d'initialiser un damier. Par exemple:
● Tests avec une interface graphique primitive
Architecture Réseau
● Choix d'une architecture client/serveur, ce choix permet aux utilisateurs d'installer un serveur en Lan accueillant un certain nombre d'utilisateurs.
Communication réseau
● Serveur○ Classe Sclient, Serveur, SdriverServer○ Ecoute les clients
Gestion des clients
○ Démarrage et Arrêt du serveur
● Client○ NetworkClient, client, SdriverClient○ Implémentation des mots clés généraux (QUIT, CONNET, TRAY,
PING, PONG, ...) du portocole.○ Appel de la méthode de traitement des requêtes clients avec un objet
de la classe CoordinateClient qui elle même utilise des méthodes de SdriverClient
Gestion du ping
Communication réseau - Tests
● Problèmatique au niveau des tests du réseau○ Résolution avec de nombreux sleeps
● Test de la création de socket & destruction de socket○ s = new Socket(host, port);
● Test de tout les mots clés du protocole● Test du ping-pong
○ Par exemple au niveau serveur : nous démarons le serveur et plusieurs clients et nous envoyons un ping du serveur, le client doit répondre avec un pong, et vice versa.
● Classe de création des tables
Stockage des données
Stockage des données
● Classe de contrôle○ Connexion à la base○ Méthodes génériques dont addSlashes pour éviter
les injections SQL○ Déconnexion de la base de données○ Problèmes rencontrés mais résolution avec de
nombreuses recherches dans la documentation● Tests unitaires
○ Test de connexion à la base○ Test pour vérifier si la création fonctionne○ Test pour vérifier la destruction des tables et la
déconnexion
Stockage des données - Tables● Table Joueur
○ Créer un joueur, peut récupérer ses informations, les modifier ou encore récupérer tout les joueurs de la base
● Table Langue○ Crée une langue avec un mot clé et 5 valeurs associées
correspondant au français, à l'anglais, à l'italien, au chinois et à l'hébreu
● Table Partie○ Créer une partie (une fois terminée) avec notamment les joueurs qui
ont participé et le gagnant.
● Les scores, associés à la table Joueur○ Permet de récupérer le Top 10 (ou Top N) des scores des joueurs, ou
encore de le réinitialiser.
● Tests unitaires○ Création de requêtes et vérification si elle ont eu l'effet attendu dans la
base de données ou dans le résultat d'une requête une fois traité
Stockage des données - Fichiers
● Classe pour les fichiers des joueurs○ Ajouter un joueur avec son pseudo, etc...○ Savoir si un joueur existe○ Changer les scores d'un joueur
● Classe pour les fichiers des parties○ Une partie est associée à un joueur, exemple:
toto_12-12-12--11:30 est la partie de toto sauvegardée le 12/12/2012 à 11h30
○ Pouvoir modifier une sauvegarde en cours du jeu● Tests unitaires
○ Commun aux deux classes et de façon linéaire○ Création de fichiers de joueur puis de partie
associée et tests de leur présence ou autres
Coordination de l'ensemble● Travail de groupe
○ Traitement du jeu et interface graphique 3D■ Indiquer à l'interface graphique ce qui se passe (par exemple "Au
tour des blancs") et s'il y a des modifications sur le damier.■ L'interface graphique a simplement à indiquer où le joueur a cliqué
(une pièce, une case, ou un bouton de triche).○ Jeu et réseau
■ Elaboration d'un protocole: Le client envoit des requêtes que le serveur doit traiter, comme l'ajouter à la liste des joueurs connectés.
■ Le serveur peut envoyer requêtes, comme indiquer aux clients qui sont les joueurs connectés.
○ Coordination avec le stockage des données■ En réseau, le serveur peut faire exécuter des requêtes SQL
(ex: enregistrement d'un nouveau joueur) ■ En local, manipuler les joueurs et les parties sauvegardées du jeu.
Coordination de l'ensemble - Tests
● Coordination sur le jeu○ Simulation des coups des joueurs pour exécuter un morceau de partie
et voir si tout ce déroule correctement
● Coordination: protocol réseau○ Démarrage d'un serveur et de plusieurs clients○ Tests tels que:
■ Création d'une partie■ Suppression d'une partie■ Parler dans les chats, etc ...
○ Communication grâce au protocole réseau○ Exemple:
ca3.getTextFieldChatGame().setText("coucou"); // Message pour le chatca3.actions(ConstNetwork.CHAT_GAME); // Action client envoyant le message assertTrue(listChatGame.get(0)[2].equals("coucou"));
// Test si le message a été envoyé au serveur, traité, puis renvoyé AUX clients
Conclusion
Ce que nous a appris la conception de ce projet:○ La gestion d'outils pour le partage de code source○ Comment communiquer de façon efficace entre
développeurs (Redmine, répartition des tâches)○ L'importance des tests unitaires (JUnit)○ Selon les parties de chaque développeurs:
■ La conception d'une interface graphique en 3D avec l'utilisation de Blender et Photoshop
■ La mise en place d'un protocole réseau et l'utilisation des sockets en Java
■ Comment traiter une base de données en Java■ La fabrication d'une architecture logiciel
permettant la coordination des différentes parties