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