Dossier de Victor - ISN St Martin de France

Transcription

Dossier de Victor - ISN St Martin de France
Dossier projet isn 2015 par Victor Gregoire
Plan:

I) But du projet: créer un jeu de blackjack fonctionnel et le poster sur
une page web mise en ligne. Le jeu sera developpé en C++ a l'aide de code
blocks. Il sera également nécessaire de posseder la bibliothèque conio.h afin
de pouvoir créer l'interface graphique.

II) Montrer la démarche effectuée qui a permis d'atteindre le
resultat final.

III) Dimension collaborative, travail d'équipe au cours du projet.

IV) Explication et commentaires de passages clés du code source.

But du projet:
A l'origine, le projets était de créer un page web regroupant plusieurs jeu de casino:
poker, blackjack, roulette...
Nous avons décidé de le programmer en C++, car ce langage, dit de “bas niveau” est
en effet utilisé pour programmer la plupart des jeux actuels, ce qui en fait un langage
très populaire.
Nous avons donc commencer a rédiger un “GDD”, qui hierarchise la création de tout
jeu. L'IDE Code blocks nous a été conseillé par Mathieu Nebra (fondateur du site du
zero) dans son tutoriel sur le C++, ainsi que d'une bibliothèque spécifique pour
l'interface graphique(conio).
Pour élaborer la page web, nous nous sommes contentés des langages HTML et CSS,
largements suffisants pour créer une page web simple, sur l'éditeur Sublime Text.
Le defi de ce projet est de réussir un jeu sans experience en la matière, créer un
ordinateur qui puisse rivaliser avec un vrai joueur et qui possède une IA
rudimentaire, puis de le mettre en ligne.
Pour developper le programme et le faire fonctionner, nous allons avoir besoin d'un
IDE (j'ai pris personnellement code blocks).
L'IDE Code Blocks est composé de 3 parties:
-L'éditeur de texte
-Une partie dite “debugger” qui se contentera de rechercher les erreurs possibles
présentes dans le code (par exemple un faute de syntaxe, une variable non déclarée
où un point virgule oublié).
-Une partie compilateur qui fournira le code sous la forme d'un fichier executable.
On aura besoin ensuite de telecharger la bibliothèque conio et d'inclure dans le
dossier MinGW de code blocks le fichier conio.h (present normalement sur le disque
dur C dans le dossier programms files) afin que les fonctions spécifiques à la
bibliothèque puissent être correctement exécutées.
Sans la bibliothèque conio, le code ne pourra tout simplement pas s'executer car
certaines fonctions n'étant definies que dans cette bibliohtèque, elles ne seront pas
reconnus par le compilateur et un message d'erreur s'affichera disant que la fonction
“gotoxy” n'est pas déclarée.

Démarche effectuée
Chaque membre du groupe a choisi un jeu: J'ai pris le poker, Lucas le blackjack et
Laurent la roulette.
Pour être plus efficace, nous nous sommes repartis les tâches: programmation du
jeu, élaboration de l'IA, création de la page web,interface graphique...
Je me suis occupé de la partie d'élaboration de l'IA ainsi que de la programmation du
jeu avec Lucas. Laurent s'est occupé de l'interface graphique.
En procedant ainsi, nous esperions pouvoir nous spécialiser chacun dans un
domaine et ainsi ne pas avoir à apprendre chacun le langage C++ en plus de devoir
s'occuper de l'interface graphique.
Il s'est malheureusement avéré que, ce projet initiale était beaucoup trop
conséquent pour pouvoir être rendu en respectant les délais imposés. Le reste du
groupe et moi nous nous sommes donc rabattus sur le jeu de blackjack et puisque
nous avons abandonné le thème casino, Laurent est parti sur un jeu de type Icopter,
qui necéssite principalement une bonne interface graphique.
Nous sommes donc partis sur la création d'un jeu de BlackJack en utilisant
seulement la console pour les graphismes. Nous avons commencé à mettre en
oeuvre les fonctions principales (telle que celle qui faisait jouer l'ordinateur, ou
encore celle qui distribuait le jeu...).
Cependant, notre manque de pratique en la matière nous as beaucoup ralenti, et
notre temps étant limité , nous avons choisi de modifier notre projet et de nous
contenter de reprendre un code source sur internet pour le modifier et le
commenter.
Les modifications apportées sur le jeu tiennent principalement des règles qui etaient
fausses, quelques couleurs qui apparaissent sur les fenêtres.
Nous avons donc un jeu de Blackjack fonctionnel en couleur comme projet final avec
un jeu Icopter, le tout mis en ligne et disponible sur une page web.
Dimension collaborative, travail d'équipe au cours du projet.
Comme dit précedemment, nous nous sommes repartis les tâches: ayant des
notions de base en programmation, j'ai aidé mes camarades dans tout le
domaine élaboration d'algorithme et fonctionnement du langage C++. Il a été
cependant difficile de nous organiser car nous pouvions difficilement nous réunir
de manière régulière. Nous avons longuement échanger durant ce projet tout
d'abord pour en determiner la nature mais ensuite pour résoudre ensemble les
problèmes techniques auxquels nous avons du faire face. La repartition des
tâches semblait une stratégie efficace et nous as permis d'eviter le
ralentissement complet du projet a la moindre difficultée rencontrée.
Cependant elle-ci a eu comme inconvenient le fait de ne pouvoir aider son camarade
que de façon limitée lorsque celui-ci rencontrait un obstacle important, sous peine
de ralentir l'ensemble du projet.

Commentaire des fonctions clés du code source
Parmi les fonctions clés du code dans un jeu de blackjack, il y a:
-la fonction ini_jeu, qui permet de determiner les cartes du paquets (nombre, type,
nom...), de les distribuer a chaque joueur au hasard et en un seul exemplaire, en
nombre correct.
C'est une fonction très importante car elle possède même un fichier qui lui est
propre, le “header”, , c'est à dire un fichier non compris dans le fichier principale
(appelé “main”). Cela permet ainsi au programmeur de l'appeler quand il en a
besoin mais de pouvoir également la retrouver et la modifier facilement si
nécessaire.
Elle utilise elle même une plusieurs fonctions prédefinis dans les bibliothèques
inclues au début du programme.
La fonction qui tient le rôle du croupier est en effet la plus délicate car, si elle ne
nécessite pas une maitrise particulière du langage C++, elle nécessite cependant une
plus grande reflexion quant a son fonctionnement: pour imiter un humain, le
programmeur doit comprendre son mode de reflexion et pouvoir le retranscrire a
travers des lignes de code.
Cela est particulièrement complexe
A défaut d'être capable de créer une veritable intelligence artificielle, je peux
cependant faire un croupier qui donnera l'illusion de reflechir a son adversaire, et
qui sera imprevisible mais coherente, dans le sens ou au lieu de chercher a lui faire
simplement tirer une carte au hasard, on tiendra quand même compte de la main
distribuée et des probabilitées de gagner.
Par exemple: (on perd lorsque on a un total supérieur à 21 et chaque carte vaut son
propre nombre; toutes les têtes valent 10)
if(scoreCarte>=17)
{
check();
}
else if(scoreCarte>14 && scoreCarte<17) {
int NbAleatoire = rand() % 10 + 1;
if (NbAleatoire >= 4) { draw_a_card(); }
Ce morceau de fonction très simple à donc pour but de faire “checker” le croupier si
son score est superieur a 17 mais si le nombre est compris entre 14 et 17, alors il
aura 60% de chance de tirer une carte et 40 % de ne rien faire.
On obtient donc bien un joueur qui imite de maniere simpliste le raisonnement
humain: en effet, un humain aura de plus en plus tendance a checker si son jeu
possède un score élevé. Bien sur, cela n'a rien à voir avec une réelle l'intelligence
artificielle, mais celle-ci n'a pas encore été atteinte jusqu'a maintenant.
On notera l'existence de plusieurs autres fonctions importantes telle que
fin_du_jeu(), ou message_effect() qui gère tout l'affichage des fenêtres sur le
programme, mais elles sont trop longues et trop nombreuses pour être expliquées
ici.
ANNEXE:
checker: Au blackjack, arreter de piocher des cartes, et donc figer son score jusqu'a la fin
de la partie
header: Fichier annexe au code source principale dans lequel est determiné plusieurs
fonctions utiles mais qui seraient encombrantes et rendraient le programmes peut lisibles
si elles se situaient toutes dans le main
fonction main: C'est la fonction dans laquelle on fait interagir toutes les fonctions entre
elles. Leur combinaison permet au jeu de se derouler correctement (pour les petits
programmes, tout le code se fait dans le main)
GDD: Game Design Document ,c'est une sorte de sommaire qui permet de poser tous les
objectifs à réaliser. Elle synthestise le principe du jeu et permet au programmeur de suivre
une ligne rouge.
IDE: Environement de développement, l'IDE est le logiciel dans lequel on developpera le
programme.
Lien du code source pris sur internet :
http://codes-sources.commentcamarche.net/source/21380-un-petit-blackjack-interfacedos-dev-c-4Auteur