Memory

Jeu

Le projet Jeu Memory a pour but de créer un jeu de carte Memory sur ordinateur, qui devra être codé en language C grâce à l’outil Codeblocks , ainsi que l’utilisation de la bibliothèque graphique SDL2. 

Sans titre - 25

Introduction

Ce projet sera accessible à n’importe quel utilisateur, que sa requête soit éducative ou bien purement divertissante. Nous avons réalisé ce projet dans le cadre de notre deuxième semestre de première année de DUT GEII, dans l’enceinte de l’IUT de Mulhouse.

Sommaire

Présentation

Objectifs

Ressources

Développement

Bilan

Conclusion

Bibliographie

 

 

Présentation du Projet

Notre équipe est composée de Antoine Toenz, et de Rayan Benmammar, tout deux codeurs de ce programme.

L’objectif de ce projet va être de créer un jeu de Memory informatiquement, depuis une fenêtre graphique, et codé dans le language C. Mais tout d’abord définissons ce qu’est le Memory:

Qu’est-ce que le Memory ?

Le Memory est un jeu composé de plusieurs paires de cartes. Le but du jeu est de réunir les paires en retournant deux cartes par tour. Si les cartes sont identiques, alors elles forment une paire et on les retire du jeu. La partie prend fin lorsque il n’y a plus de cartes face cachée. C’est un très bon exercice pour entraîner sa mémoire. Le grand nombre de cartes et la répartition aléatoire des cartes à chaque partie assure un jeu différent à chaque fois.

Entraînez-vous donc à mémoriser les emplacements des différentes cartes et vous serez rapidement surpris par les progrès de votre mémoire !

 

oéfinal

 

Quels sont nos objectifs ?

Nous avons comme objectif de réaliser la programmation avec un minimum de 8 cartes, fluide et sans erreur dans une fenêtre graphique créée. Plusieurs options ont été rajoutés à notre jeu. En effet, un score et un timer ont été mis en place, ainsi que la possiblité d’augmenter la difficulté au sein du jeu avec différents niveaux progressifs. Afin d’optimiser le jeu, une page d’accueil a été mise en place. Et enfin, un mode multijoueur a été ajouté pour jouer avec vos amis !
carte

Cahier des Charges

A l’approche de ce projet, nous avions quelques conditions à respecter. En effet, il nous était imposé de :

  • Faire le programme en language C                     languagec
  • Coder sous le logiciel Codeblocks              codebl
  • Utiliser la bibliothèque graphique SDL2       sdl

 

 

————————————————————————————————————————————————————————————————————————————–

Expression du besoin :

 

beteacorne

Cette bête à corne nous permet d’obtenir plusieurs informations. En effet, grâce à elle, nous savons à qui rend service le produit (à l’utilisateur), sur quoi agit le produit (sur la mémoire), également dans quel but le système existe (dans le but de divertir l’utilisateur).

 

pieuvre

Ce diagramme nous représente plusieurs fonctions. En effet, les deux fonctions principales sont:  Divertir l’utilisateur et Améliorer les capacités de mémoire de l’utilisateur. Elles décrivent parfaitement l’intérêt du Jeu Memory. Par la suite, le projet contient également 3 fonctions contraintes:

  • Normes: Cela implique tout ce qui est de l’apprentissage du Language C ( car nous partions uniquement des bases du language C grâce à quelques cours), ainsi que l’utilisation et la pratique d’un nouvel outil qui est la bibliothèque graphique SDL2. Nous avons dû familiarisé comprendre les différentes fonctions qui le compose. Enfin, l’utilisation de l’IDE (Integrated Development Environment) s’intitulant Code::Blocks.
  • Connaissances: Cette fonction contrainte nous explique que nous avons dû apprendre certaines choses, certaines fonctions, ainsi que les diverses possibilités de SDL2.
  • Esthétique du programme: C’est une fonction contrainte très importante dans la programmation. En effet, il faut que le code soit simple, clair, en ayant une esthétique agréable, et commenté après chaque fonctions importantes. Ces commentaires dans les codes sont utiles et appréciés pour les personnes souhaitant reprendre le même code, afin d’avoir une meilleure compréhension et/ou correction. Finalement, l’optimisation du code est également essentiel pour le Jeu Memory car il faut que le programme ne soit ni trop grand, n’ai pas de fonctions trop importantes, et que le programme ait le moins de chose à chercher et à faire.

Contraintes :

Pour notre projet, nous avons dû être attentif et vérifier si toutes les contraintes étaient bien respectées. Mais nous avons l’avantage d’avoir un projet informatique, donc sans contrainte budgétaire, et sans contrainte de temps. Cependant il était impératif de veiller à adapter notre jeu à un public de tout âge. Aussi, avons nous choisi un graphisme de carte assez simple et neutre afin de convenir à tout le monde.

 

Planning :ganttttt

Nous avons décidé pour les premières semaines de projet, de comprendre comment fonctionne nos logiciels, l’apprentissage de notre bibliothèque graphique, ainsi que l’approfondissement du language C, afin d’avoir une bonne compréhension du sujet. Puis, nous avons décidé d’élargir la partie «codage» sur tout le long du projet. Ce qui comprend: toutes les créations de fonctions, analyse du programme, création du programme, vérifications, analyse de problèmes éventuels et du «Debug»

Budget :

Comme dit précédemment, nous avons l’avantage d’avoir notre projet qui est géré et créé informatiquement, donc nous n’avons pas de budget spécial.

 

Ressources

Voici les ressources dont nous avons eut besoin durant ce projet :

Développement

Tout d’abord, nous avons dû créer la fenêtre et définir quelques variables importantes pour la suite du programme:

 

code2

 

 

 

 

 

 

 

 

 

 

Au fur et à mesure, nous avons codé de telle sorte que certaines informations sont données via une console, comme par exemple printf( »Fenetre creee\n ») pour confirmer que la fenêtre s’est bien créée.

Puis par la suite, il a fallut créer un renderer. Mais qu’est-ce que le renderer ? Le renderer est une sorte de moteur de rendu pour notre fenêtre, l’espace où nous allons pouvoir dessiner, écrire… Or, pour qu’un dessin ou un mot s’affiche à l’écran, il faut faire un rendu, c’est à dire créer l’image finale que l’on veut afficher, puis l’afficher.

code3

 

 

 

 

 

 

 

 

 

 

Ensuite, il a fallut commencer le début de la logique du jeu (j’ai choisi ici de prendre notre essai avec uniquement 8 cartes). Ici nous retrouvons le principe que les cartes soient placées aléatoirement, et jamais plus de deux fois chacune.

code4

 

 

 

 

 

 

 

Il a fallut également déterminer plusieurs événements, comme par exemple ici nous avons défini :

  • Le clic droit sur la croix rouge en haut à droite de la fenêtre ferme la fenêtre.
  • L’appui sur la touche Echap détruit la fenêtre.
  • Ici l’appui sur le clic droit de la souris ou du pad détruit également la fenêtre.

 

code5

 

 

Ici, c’est un autre événement plus important: En effet, le clic gauche sur les cartes.

code6

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Ensuite, nous recueillons plusieurs informations, comme par exemple le nombre de fois que l’on a cliqué ou encore les positions x et y de la carte retournée.

code7

 

 

 

 

Dans le premier cas, nous recueillons l’information si l’utilisateur a trouvé effectivement une paire, dans ce cas, les deux cartes sont recouvertes de noir et donc disparaissent du jeu. Ainsi, nous envoyons une information dans la console nous permettant de savoir si nous avons trouvé une paire ou non.

Dans le second cas, où l’utilisateur n’a pas trouvé une paire, les images retournées sont remplacées par l’image de la carte face cachée et l’utilisateur continue de jouer. De la même façon, une petite phrase dans la console nous annonce que nous n’avons pas trouvé de paire. (Nous avons mis en place un petit délai afin de bien voir les cartes)

 

code8

 

 

 

Finalement, si l’utilisateur a trouvé les 4 paires de cartes, un message dans la console apparaît nous informant en combien de tours nous avons finit le jeu.

code9

Tests

 

code13

 

On remarque bien que si l’on clique sur deux cartes non-identiques, les cartes se retournent à nouveau, et le jeu peut continuer. Or, dans le second cas, on voit bien que l’on obtient une paire de cartes identique, et on remarque que les deux cartes sont retirées du jeu. Le jeu va ainsi continuer jusqu’à ce que l’utilisateur a trouvé toutes les paires de cartes.

 

code14

Bilan

Au cours de ce projet, nous avons rencontré de nombreux problèmes, notamment: l’apprentissage de la bibliothèque graphique imposée, l’approfondissement du language C, la compréhension de Codeblocks, les nombreux bugs et erreurs diverses. Un autre sujet dont nous avons dût faire spécialement attention, il s’agit de la simplicité (prendre plutôt certaine fonction ou bien des tableaux) et la clarté du code ainsi que les commentaires essentiels durant tout la durée du programme.

Conclusion

Pour conclure, ce projet nous a permis de découvrir de nouvelles choses comme: la gestion d’un projet, le travail en équipe, la démarche à suivre pour arriver au bout d’un projet, certaines nouvelles méthodes. De plus, cela nous a permis d’approfondir nos connaissances en informatique et en langage C, ainsi que d’apprendre à utiliser une bibliothèque graphique spécifique. Malgré les difficultés encourues, nous avons su trouver des solutions adaptées et nous sommes arrivés à un résultat qui a dépassé nos attentes.

 

Bibliographie