TP de C# - marc. ?· TP de C# .NET OBJECTIFS Ce document est une aide pour la réalisation des travaux…

  • Published on
    15-Dec-2018

  • View
    212

  • Download
    0

Embed Size (px)

Transcript

TP de C# .NETOBJECTIFS

Ce document est une aide pour la ralisation des travaux pratiques de C#. Il vous propose

notamment diffrents diagrammes comme support. Il ne se substitue pas entirement aux

explications donnes en cours ou en TP.

TABLE DES MODIFICATIONS

Auteur Modifications Version DateMarc Chevaldonn Description du TP 1 1.0 12 septembre 2012

Marc Chevaldonn marc.chevaldonne@u-clermont1.fr IUT Informatique Clermont1 1

mailto:marc.chevaldonne@u-clermont1.frmailto:marc.chevaldonne@u-clermont1.fr

IntroductionCette srie de 14 TP a pour objectif la ralisation du jeu Plus4. Il est vivement conseill de lire les rgles du jeu avant de faire les TP :)Ces premires pages vous prsentent de manire simplifie larchitecture de notre programme, i.e. de nos bibliothques et de nos excutables.

NOYAU ET INTERFACE GRAPHIQUE

Un des points les plus importants est de bien sparer le noyau de lapplication (cest--dire le

fonctionnement du jeu : gestion des joueurs, des rgles du jeu, de ltat du jeu...) de

linterface graphique (ou non) permettant aux utilisateurs dinteragir avec le jeu.

Nous allons donc crer un premier assemblage de type bibliothque dynamique (dll) que nous

appellerons giCore.dll et qui contiendra toutes les classes ncessaires au fonctionnement

de notre programme. Ensuite, nous crerons dautres assemblages de type excutables (exe)

qui dpendront de giCore.dll et lutiliseront pour permettre aux clients dinteragir avec et

de visualiser le jeu. Nous crerons des excutables de tests pour tester nos classes de giCore,

un excutable en affichage Console pour vrifier le bon fonctionnement du jeu, et enfin un

excutable en mode fentr pour la livraison au client. Le diagramme de dploiement ci-

dessous rsume tout ceci.

On voit ainsi quil faudra porter une attention toute particulire lAPI1 de giCore et des

excutables. Lintrt ici, est de rendre les plus indpendants possible le noyau et les

interfaces :

si on doit modifier le noyau, ces modifications ne doivent avoir aucun impact sur le code de

lexcutable ;

si on modifie lexcutable, le noyau ne doit en aucun cas avoir besoin dtre modifi.

LAPI doit tre parfaitement pense, et la plus simple possible.

Marc Chevaldonn marc.chevaldonne@u-clermont1.fr IUT Informatique Clermont1 2

1 Application Programming Interface : Interface de programmation (http://fr.wikipedia.org/wiki/Interface_de_programmation)

mailto:marc.chevaldonne@u-clermont1.frmailto:marc.chevaldonne@u-clermont1.frhttp://fr.wikipedia.org/wiki/Interface_de_programmationhttp://fr.wikipedia.org/wiki/Interface_de_programmationhttp://fr.wikipedia.org/wiki/Interface_de_programmationhttp://fr.wikipedia.org/wiki/Interface_de_programmation

LES CLASSES DU NOYAU

Voici un aperu des classes du noyau pour le jeu Plus4 et leurs responsabilits et

comptences :

ltat du jeu Plus4 est stock laide dune classe (Board) et de deux structures (Case et

Piece) :

Board reprsente la grille du jeu et est donc un tableau deux dimensions de Cases,

une Case reprsente ... une case de la grille et peut possder ou non, une Piece.

Board est responsable de ses Cases et est capable dinsrer ou denlever des Pieces.

Rules reprsente les rgles du jeu : il est capable de lire Board et den dduire quels sont

les coups (valeurs de la structure Move) autoriss. Il teste galement si la partie peut

dmarrer, si la partie est termine, et met jour les scores (instance unique de Score, la

demande du GameManager). La recherche des coups autoriss, le test de fin de partie, la

mise jour des scores, la recherche de lignes (...) varie en fonction des rgles du jeu

(classique, partie sans fin, variante...). En consquence, Rules est une classe abstraite qui

sera drive en plusieurs classes filles implmentant ces mthodes. On peut ainsi voir se

dessiner un pattern Strategy.

Les joueurs sont reprsents par des sous-filles de la classe Player. Cette classe

communique avec le GameManager pour choisir un coup (valeur de Move) et demander

linsertion. Le choix du coup dpend du type de joueur (intelligence artificielle ou joueur

humain).

Le GameManager est le pivot de giCore. Linstance unique du GameManager permet de

crer le jeu et de grer la communication entre les diffrents lments du jeu. Le

GameManager va par exemple :

demander aux rgles du jeu si les conditions du jeu sont runies pour dmarrer le jeu,

dmarrer le jeu,

Marc Chevaldonn marc.chevaldonne@u-clermont1.fr IUT Informatique Clermont1 3

mailto:marc.chevaldonne@u-clermont1.frmailto:marc.chevaldonne@u-clermont1.fr

demander aux rgles du jeu quel est le prochain joueur jouer

informer ce joueur que cest son tour de jouer,

demander aux rgles du jeu si un coup demand par un joueur est valide,

faire linsertion de la pice dans la grille,

indiquer que la partie est termine

...

CALENDRIER DES TP

Dveloppement de giCoreDurant les 5 premires semaines, lobjectif sera de raliser giCore, de tester lensemble de

ses classes, puis de crer une application Console permettant de jouer. Pour cela, nous

rajouterons un nouvel assemblage giConsoleTools qui contiendra des classes daffichage

adaptes la Console.

Durant la premire semaine, nous dvelopperons la structure de donnes de la grille, soit la

classe Board et les structures Case et Piece.

En deuxime et troisime semaine, les rgles du jeu seront implmentes : classes Rules (et

quelques classes filles), Score et la structure Move.

Enfin, en quatrime et cinquime semaine, nous nous attaquerons au GameManager et aux

classes Player. Toutes les liaisons seront tablies afin de permettre de jouer dans la version

Console du jeu.

Replay et meilleurs scores grce XML et des parseurs en C#Suite cette implmentation, nous profiterons des cours sur XML pour rajouter des

gadgets non indispensables notre jeu. Nous stockerons notamment le droulement dune

partie dans un fichier XML puis les rsultats de lensemble des parties ralises dans un autre

fichier XML de faon pouvoir effectuer des replays, des sauvegardes ou afficher les meilleurs

scores. Pour cela, durant les semaines 6 et 7, nous dfinirons les formats de ces deux types de

Marc Chevaldonn marc.chevaldonne@u-clermont1.fr IUT Informatique Clermont1 4

mailto:marc.chevaldonne@u-clermont1.frmailto:marc.chevaldonne@u-clermont1.fr

fichiers. Puis pendant les semaines 8 et 9, nous raliserons deux nouveaux assemblages

(giHighScores.dll et giGameSaver.dll) en C# qui permettront lcriture et la lecture

de ces fichiers. Nous pourrons ainsi afficher les meilleurs scores la fin de chaque partie,

rejouer une partie pour revoir un match serr ou admirer une technique, etc...

Affichage web des meilleurs scores grce XSLTEn semaine 10 et 11, nous crerons une page web dynamique partir de feuille de

transformation XSL pour transformer notre fichier XML de meilleurs scores en page XHTML

interactive.

Interface graphique et systme de plugins dynamiquesEnfin, durant les 3 dernires semaines, nous raliserons linterface graphique du jeu avec

gestion de la souris et affichage moderne. Nous raliserons galement un systme de plugins

dynamiques pour permettre nimporte qui de crer sa propre classe de type Player (une

intelligence artificielle) ou sa propre classe de rgles du jeu, sans avoir recompiler ou

ouvrir VisualStudio.

Marc Chevaldonn marc.chevaldonne@u-clermont1.fr IUT Informatique Clermont1 5

mailto:marc.chevaldonne@u-clermont1.frmailto:marc.chevaldonne@u-clermont1.fr

TP 1Dans ce premier TP, vous allez raliser la structure de donnes du jeu Plus4 en crant deux structures pour reprsenter les pices du jeu et les cases de la grille, et une classe pour reprsenter la grille. Vous devrez ensuite crer des projets de tests de vos structures et classe en Console.

STRUCTURE DE DONNES

crivez quatre types personnaliss dans lespace de noms giCore :

une numration PieceType

une structure Piece

une structure Case

une classe Board.

Ajoutez les proprits et mthodes comme proposes dans le diagramme de classes UML

incomplet de la page suivante.

Vous pourrez notamment :

pour Piece :

mettre PieceType en type imbriqu de Piece,

faire en sorte que Piece soit une structure immuable (write-once), PlayerId et Type devront tre des proprits permettant daccder deux

membres privs en lecture seule

le 2me constructeur initialisera le type Normal (vous pourrez appeler lautre constructeur pour factoriser votre code),

le ToString de Piece rendra r, R, b, B selon les valeurs de PlayerId et Type, comme dans le tableau ci-dessous

PlayerId Type ToString

0 Normal r

0 Bonus R

1 Normal b

1 Bonus B

pour Case :

faire en sorte que Case soit une structure immuable (write-once),

Marc Chevaldonn marc.chevaldonne@u-clermont1.fr IUT Informatique Clermont1 6

mailto:marc.chevaldonne@u-clermont1.frmailto:marc.chevaldonne@u-clermont1.fr

Row, Column et Piece devront tre des proprits permettant daccder trois

membres privs en lecture seule, Piece est nullable,

les constructeurs utiliseront une valeur par dfaut pour le paramtre piece,

le 2me constructeur sera proche dun constructeur par recopie : il recopie les proprits Row et Column du paramtre de type Case, mais pas la proprit Piece.

Il pourra galement appeler le 1er constructeur pour factoriser le code,

le ToString rendra un blanc sil ny a pas de Piece, et le ToString de la pice sil y en a une

pour Board :

DEFAULT_NUMBER_OF_ROWS et DEFAULT_NUMBER_OF_COLUMNS sont des constantes,

mCases est un tableau priv deux dimensions de Case,

Rows et Columns sont des proprits calcules rendant les dimensions de mCases,

le constructeur par dfaut utilise les constantes pour construire le tableau de Case sans Piece,

Board(Case[,]) et Board(Board) sont des constructeurs par recopie (on recopie la

grille dans les deux cas), InsertPiece(byte, byte, Piece?) insert une pice dans la case spcifie,

InsertPiece(Case, Piece?), RemovePiece(byte, byte) et RemovePiece(Case) utilisent InsertPiece(byte, byte, Piece?) pour factoriser le code. Les

mthodes Remove retire une pice.

les mthodes InsertPiece et RemovePiece seront internal et non public comme indiqu dans le diagramme.

lindexeur permettra daccder aux Cases de la grille en lecture seule.

le ToString crit une grille sur plusieurs lignes, comme dans lexemple suivant, o on voit les numros de ligne et de colonnes, puis le contenu de chaque case :

0 1 2 3 0 r b r r 1 b b r B 2 R b b R 3 b r b r

TESTS DES STRUCTURES ET CLASSE

Testez vos structures et votre classe laide de projet de type Console dans lesquels vous

appellerez les diffrentes mthodes de vos types pour vrifier leur bon fonctionnement.

Marc Chevaldonn marc.chevaldonne@u-clermont1.fr IUT Informatique Clermont1 7

mailto:marc.chevaldonne@u-clermont1.frmailto:marc.chevaldonne@u-clermont1.fr

Marc Chevaldonn marc.chevaldonne@u-clermont1.fr IUT Informatique Clermont1 8

mailto:marc.chevaldonne@u-clermont1.frmailto:marc.chevaldonne@u-clermont1.fr

TP 2Vous allez maintenant dvelopper les rgles du jeu Plus4. Le dveloppement de la classe Rules et des classes qui lentourent se droulera sur deux semaines. Cette premire semaine sur Rules permettra de prendre en main lhritage et le polymorphisme partir de Rules et les collections gnriques et en particulier List.

Note : toutes les mthodes protges de Rules sont en ralit galement internal et virtuelles.

Les classes grises appartiennent au framework .NET, les blanches ont dj t implmentes

ou le seront prochainement, les jaunes concernent le TP2.

QUELQUES PROPRITS DE RULES

Les rgles sont caractrises par le nombre de pices aligner (4 par dfaut) et le nombre

de pices Bonus par joueur (1 par dfaut), ainsi quun nom. Grce la mthode

Marc Chevaldonn marc.chevaldonne@u-clermont1.fr IUT Informatique Clermont1 9

mailto:marc.chevaldonne@u-clermont1.frmailto:marc.chevaldonne@u-clermont1.fr

GetNbOfBonusPiecesLeft(int playerId), on sait toujours combien de pices Bonus il

reste en main pour le joueur playerId.

Rules peut prendre une rfrence de Board la construction. Lintrt est double :

reprendre une partie un tat dj avanc (sauvegarde) ; tester les rgles du jeu en fonction

dun tat de la grille.

UN DBUT DE PLAYER...

La classe Player contient deux proprits, mais lidentifiant doit tre cr automatiquement

(0 ou 1) grce un compteur statique. AddPlayers permet dajouter des joueurs Rules.

NextPlayer indique quel sera le prochain joueur jouer et LastPlayer quel est le dernier

joueur avoir jou.

LES COUPS AUTORISS

Un coup dans le jeu sera reprsent par une valeur de la structure Move. Rules contient une

collections de coups qui peuvent tre jous au prochain coup. La mthode

IsMoveAuthorized(Move move) permet de tester si move est un coup autoris (i.e. sil est

contenu dans la collection de coups autoriss).

GESTION DES SCORES

La classe Score permet de stocker les points des joueurs, organiss en points, sets, et matchs.

LES MTHODES CLS

IsGameReadyToStart vrifie si les conditions initiales sont vrifies ( vous de les

dterminer).

IsGameOver vrifie si la partie est termine.

UpdateScores met jour les scores (en particulier la proprit CurrentSet).

UpdateAuthorizedMoves met jour la collection de coups autoriss.

IsThereAnAlignment teste sil y a des alignements de pices et combien. Pour cela, utilisez

une classe WinningAlignment reprsentant un alignement de pices. Cette classe pourra

driver de List ou contenir un membre de List.

Enfin, OnPieceInserted met en musique les tests de Rules lorsquun pice est insre,

cest--dire :Marc Chevaldonn marc.chevaldonne@u-clermont1.fr IUT Informatique Clermont1 10

mailto:marc.chevaldonne@u-clermont1.frmailto:marc.chevaldonne@u-clermont1.fr

vrifie sil y a un ou plusieurs alignements, ajoute les points en fonction de ces alignements (nouvel alignement et pas ancien,

une pice bonus ou non, type de la dernire pice insre...),

met jour les scores, met jour les anciens alignements comptabiliss (rappel des rgles : si un

alignement a t compt lors dun coup, il ne peut pas tre recompt au coup

suivant),

met jour NextPlayer et LastPlayer,

met jour la collection de coups autoriss.

TP 3Quelques ajouts avec nos nouvelles connaissances de la semaine 3, au TP initi en semaine 2...

ENCAPSULATION DES COLLECTIONS

Encapsulez toutes les collections qui devront tre accessibles en dehors de giCore, i.e. :

la liste des coups autoriss,

la collection de joueurs.

PROTOCOLES DGALIT

Rcrivez les protocoles dgalit de :

Case : deux Cases seront gales si elles ont les mmes co...

Recommended

View more >