26
Rapport du projet C# Le Snake VINCENT Benjamin WISSON Thomas GMM2 Année universitaire 2011-2012 Encadré par M De Vaulx

Rapport du projet C# - fc.isima.frfc.isima.fr/~vincentb/developpement/snake/rapportSnakefinal.pdf · Rapport du projet C# Le Snake VINCENT Benjamin WISSON Thomas GMM2 Année universitaire

  • Upload
    ngokien

  • View
    259

  • Download
    0

Embed Size (px)

Citation preview

Rapport du projet C#

Le Snake

VINCENT Benjamin WISSON Thomas

GMM2

Année universitaire 2011-2012

Encadré par M De Vaulx

Page 2

Page 3

Introduction

Dans le cadre de notre deuxième année en école d’ingénieurs à Polytech'Clermont-Ferrand

nous avons eu pour tâche la réalisation d'un projet informatique.

Notre objectif était de réaliser l’analyse à l’aide de schéma UML et la conception d’un snake

en utilisant le langage C#.

Dans ce dossier nous allons tout d’abord exposer l’analyse de ce jeu, puis un manuel

d’utilisateur et enfin un manuel du programmeur.

Page 4

Sommaire

Introduction ............................................................................................................................3

Partie I : Analyse du jeu ..........................................................................................................5

1. Les cas d’utilisation .....................................................................................................5

2. Les diagrammes de classe ............................................................................................6

3. Les diagrammes de séquence .......................................................................................7

4. Le diagramme de transition ........................................................................................ 13

Partie II : Le guide de l’utilisateur......................................................................................... 14

1. Présentation générale ................................................................................................. 14

2. Déroulement du jeu .................................................................................................... 14

Partie III : Le guide du programmeur .................................................................................... 19

1. La fonction : my_timer_Tick_ .................................................................................... 19

2. La fonction : topscore ................................................................................................ 20

3. La fonction : plateau .................................................................................................. 21

4. La fonction : deplacer ................................................................................................ 23

Conclusion ........................................................................................................................... 26

Page 5

Partie I : Analyse du jeu

1. Les cas d’utilisation

Acteur : L’utilisateur

Cas d’utilisation pour l’utilisateur : _ Initialisation (lancement du jeu)

_ Choix du niveau

_ Déplacer les cases

_ Vérifier _ Quitter

Diagramme des cas d’utilisations :

Page 6

2. Les diagrammes de classe

Pour une meilleur visibilité, nous n’avons pas affiché toutes les classes qui hérite de la

classe case, les classes qui n’apparaissent pas sont : casebonustaille, casemalustaille,

casebonusvitesse, casemalusvitesse, casemur et caseproie. Leur représentation UML est la

même que celle de casevide.

3. Les diagrammes de séquence

Nous avons choisi de traité le déplacement du serpent et la génération du plateau de jeu à chaque niveau dans ces diagrammes de séquence.

Déplacer le serpentCas où l'utilisateur gagne

Form1

plateau

Win

Form1_KeyPress

Timers : stopactualise()

Show ()

Bok_click ()

Sauvegarde ()

Dispose ()

Relancer ()

Timers : start

plateau

Page 8

Déplacer le serpentCas où l'utilisateur perd

Form1 Perdu

Form1_KeyPress

Topscore ()Timers : stopactualise()

Show ()

Bok_click ()

Affichetopscore ()

Dispose ()

plateau

Page 9

Déplacer le serpentCas où la partie reste en cours

Form1 Serpent

Form1_KeyPressdeplacer(direction)

plateau

ALT

Etatpartie = -1

Perdu

[obstacle]

Type de caseRef

casecorp casetete

DeplacerSuivant Direction () *

[autre types cases]

DeplacerSuivant Direction ()

Page 10

Type de case

Serpent plateau

ALT

[malustaille]

Action ()

Nbproiemange ++

casecorp

Apparitionproie ()

Score

[proie]

Action ()

Score

casecorp

[bonustaille]reduction ()

[bonusvitesse]Vitesse = 0

Vitesse = 2

[malusvitesse]

caseproie

Page 11

Page 12

Page 13

4. Le diagramme de transition

Ce diagramme correspond à l’évolution de la vitesse du serpent au cours d’une partie.

vitesse est un entier attribut de serpent.

vitessechangee est un booléen attribut de serpent.

Page 14

Partie II : Le guide de l’utilisateur

Dans cette partie nous allons expliciter les règles et le fonctionnement de notre jeu, le snake.

1. Présentation générale

Le jeu consiste à diriger un serpent afin de lui faire manger les différentes proies qui

apparaissent de façon aléatoire sur le plateau de jeu tout en évitant les divers obstacles qui

seront sur sa route. Chaque proie rapporte des points et le but du jeu est d’avoir le plus de

point possible. Manger des proies fait grandir le serpent alors qu’entrer en contact avec des

obstacles comme des murs, les bords du plateau de jeu ou encore le corps du serpent termine

la partie.

En plus des proies et des murs le jeu comprend aussi des bonus et malus qui agissent sur

le serpent, il en existe de deux types, les bonus et malus dit de taille et ceux dit de vitesse. Les

bonus et malus de vitesse réduisent et augmentent respectivement la vitesse du serpent de

façon temporaire alors que les bonus et malus de taille réduisent et augmentent

respectivement la taille du serpent de façon permanente. Les bonus et malus apparaissent de

façon aléatoire sur le plateau de jeu et pendant un temps limité, néanmoins il n’y a toujours

qu’un seul malus ou bonus sur le plateau du jeu. Les malus rapportent des points au joueur.

Le jeu comprend plusieurs niveaux, la différence entre les niveaux se tient dans le nombre

de proies à manger, le nombre de mur présent ainsi que les points que chaque proie rapporte.

Il est possible de commencer à un niveau donné à condition d’avoir débloqué au préalable ce

niveau. Pour débloquer ce niveau il suffit d’avoir joué une fois dans ce niveau.

Le jeu nous permet aussi conserver nos scores, pour cela au début de chaque partie nous

entrons notre pseudo. Par défaut, le jeu nous propose toujours le dernier pseudo entré.

Nous pouvons aussi mettre la partie en cours sur pause et la reprendre à l’aide du bouton

P.

2. Déroulement du jeu

Lorsque le jeu débute nous sommes sur la page principale du jeu qui nous permet d’entrer

notre pseudo et le niveau auquel nous souhaitons démarrer notre partie. Si c’est la première

partie, seul le niveau 1 sera disponible. Une fois que nous avons entré ces deux informations

nous sommes prêt à démarrer le jeu, on clique alors sur le bouton commencer la partie.

Nous avons donc la fenêtre suivante :

Page 15

Une fois que l’on clique sur le bouton la partie est lancée, attention le serpent se déplace

seul, si vous ne vous dépêchez pas, il ira contre le mur du plateau et vous aurez perdu !

Le serpent est représenté par des carrés, le carré bleu représente sa tête alors que le carré

rouge représente les éléments de son corps. Au début de chaque niveau le serpent commence

avec une tête et un élément du corps. Le nombre d’éléments du corps augmentera par la suite

après que vous ayez mangé des proies.

Pour déplacer le serpent il faut utiliser la touche « Q » pour aller vers la gauche (du

serpent) et la touche « D » pour aller vers la droite.

Détaillons maintenant la fenêtre de jeu.

Entrer le nom du joueur

Entrer le niveau désiré

Cliquer pour commencer Détaille les touches utiles

pour le jeu

Page 16

1 : Le champignon représente une proie

2 : Le terrier du serpent il sort par là à chaque nouveau niveau, le terrier est un obstacle, si le

serpent touche le terrier la partie est terminée

3 : Corps du serpent

4 : Tête du serpent

5 : Plateau de jeu, les cases en jaune représentent toutes les possibilités de déplacement du

serpent.

6 : Score du joueur

7 : Nombre de proies mangées depuis le début de la partie

Il y a un certain nombre de bonus et malus dans le jeu, représentés par les images suivantes :

Bonus taille : réduit d’un la taille du corps du serpent

Malus taille : augmente d’un la taille du corps du serpent

Bonus vitesse : qui réduit la vitesse du serpent pendant 5 secondes

Malus vitesse : qui augmente la vitesse du serpent pendant 5 secondes.

1

2

3 4

6

5

7

Page 17

Une fois que vous aurez mangez un certain nombre de proies, une fenêtre apparait pour vous

signalez que vous avez fini le premier niveau et que vous passez au niveau suivant. Il vous

suffit de cliquer sur niveau suivant pour continuer à jouer.

Une fois que vous aurez cliqué, vous retrouvez une fenêtre similaire à ce que nous avons vu

précédemment, le serpent vient à nouveau de sortir de son terrier à vous de manger les

nouvelles proies !

Si vous touchez un obstacle (un mur, un bord du plateau, le terrier ou le serpent) le jeu se

termine, vous avez perdu. Vous avez alors une fenêtre qui s’affiche. Celle-ci est composée du

tableau des 10 meilleurs scores. Si votre score le permet vous apparaitrez peut être dans ce

tableau.

Pour quitter cette fenêtre cliquer sur le bouton ok pour revenir à la fenêtre principale. Vous

pouvez alors recommencer une nouvelle partie.

Cliquer pour passer

au niveau suivant

Page 18

Page 19

Partie III : Le guide du programmeur

Dans cette partie nous allons expliciter certaines parties délicates de notre code.

Afin de gagner du temps nous nous sommes permis de mettre une grande partie de nos

attributs en public.

1. La fonction : my_timer_Tick_

Cette fonction est une fonction de la classe Form1 qui correspond à la fenêtre de jeu.

But : Cette fonction permet de déclencher chaque déplacement du serpent.

Idée : On test l’état de la partie :

o Si le joueur gagne, on arrête le jeu, on affiche la fenêtre «Win» et on génère le

niveau suivant

o Si le joueur perd, on enregistre le score (s’il fait parti des 10 meilleurs), on

affiche la fenêtre « perdu » et on arrête la partie.

o Si la partie est toujours en cours, on déplace le serpent.

Code :

Page 20

2. La fonction : topscore

Cette fonction est une fonction de la classe Form1 qui correspond à la fenêtre de jeu.

But : Cette fonction permet d’enregistrer le score de l’utilisateur parmi les meilleurs

scores.

Idée : On regarde les scores les uns après les autres en partant du dernier de façon à

récupérer la bonne place pour le score de l’utilisateur.

Code :

Page 21

3. La fonction : plateau

Cette fonction est le constructeur de la classe plateau, qui prend en argument un niveau.

But : Cette fonction permet générer le plateau de jeu à chaque niveau.

Idée : Notre grille de jeu est un dictionnaire de cases référencées par des points qui

représente un plateau carré de 400 cases. On commence par placer le serpent (tête et

un élément de corps) en bas à gauche, puis on place les murs (s’il y en a dans le

niveau) et la première proie de façon aléatoire et enfin on complète toutes les autres

cases par des cases vides.

Astuce : On ne place pas de mur sur le bord du plateau de façon à ne pas perdre dès le

début.

Code :

Page 22

Page 23

4. La fonction : deplacer

Cette fonction est une fonction de la classe serpent, qui prend en argument un entier.

But : Cette fonction permet le déplacement du serpent suivant la direction.

Idée : Pour chaque déplacement cette fonction est appelée, on regarde alors le type de

la case où sera la tête après le déplacement (indiqué par la direction ), puis selon le

type de cette case on effectue l’action adéquate.

Astuce : Pour le déplacement du serpent, on commence par déplacer la queue et on

remonte jusqu’à la tête ce qui permet de garder en tête la case suivante pour chacun

des éléments.

Code :

Page 24

Page 25

Page 26

Conclusion

A l’aide de ce projet nous avons pu comprendre et expérimenter les différentes étapes

de la conception d’un logiciel, en commencer par l’analyse avec la partie UML. De plus la

programmation nous a permis d’améliorer nos connaissances du langage C#.

En plus d’être un projet pédagogique il est aussi ludique et nous a donné beaucoup de

liberté dans le code et dans la conception.