en réseau Jeu de dames 3D

Preview:

Citation preview

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

Recommended