Aller au menu - Aller au contenu

[Plan du site] Vous êtes ici --- > Le Site du Zéro > Les tutoriels > Officiels > Programmation > Apprenez à programmer en C ! > [Théorie] Les bases du débutant > TP : Plus ou Moins, votre premier jeu > Lecture du tutoriel

TP : Plus ou Moins, votre premier jeu

Avatar
Auteur : M@teo21
Difficulté : Amateur (2 / 5)
Note : 19 / 20 (99 votes)
Visualisations : 413 568

Plus d'informations Plus d'informations
Nous arrivons maintenant dans le premier TP.
T.P. est l'accronyme de "Travaux pratiques". Ca veut dire... qu'on va pratiquer oui oui :p

Quel est le but des TP ?

Le but est de vous montrer que vous savez faire des choses avec ce que je vous ai appris. Car en effet, la théorie c'est bien, mais si on ne sait pas mettre tout ça en pratique de manière concrète... ben ça sert à rien d'avoir passé du temps à apprendre ;)

Et, croyez-le ou non, mais vous avez déjà le niveau pour réaliser un premier programme amusant. C'est un petit jeu en mode console (les programmes en fenêtres arriveront plus tard je vous le rappelle).
Le principe du jeu est simple, et le jeu est facile à programmer. C'est pour cela que j'ai choisi d'en faire le premier TP du cours :)
Sommaire du chapitre :
Icône du chapitre
Chapitre précédent Sommaire Chapitre suivant

Préparatifs et conseils

Le principe du programme



Avant toute chose, il faut que je vous explique en quoi va consister notre programme.
C'est un petit jeu que j'appelle "Plus ou moins".

Le principe est le suivant :


Le but du jeu, bien sûr, est de trouver le nombre mystère en un minimum de coups ;)

Voici une capture d'écran d'une partie, c'est ce que vous devez arriver à faire :

Code : Console
Quel est le nombre ? 50

C'est plus !



Quel est le nombre ? 75

C'est plus !



Quel est le nombre ? 85

C'est moins !



Quel est le nombre ? 80

C'est moins !



Quel est le nombre ? 78

C'est plus !



Quel est le nombre ? 79

Bravo, vous avez trouve le nombre mystere !!!



Tirer un nombre au sort



Mais comment tirer un nombre au hasard ? Je ne sais pas le faire !


Certes ^^
Nous ne savons pas générer un nombre aléatoire. Il faut dire que demander cela à l'ordinateur n'est pas simple : il sait bien faire des calculs, mais lui demander de choisir un nombre au hasard ça il sait pas faire !
En fait, pour "essayer" d'obtenir un nombre aléatoire, on doit faire faire des calculs complexes à l'ordinateur... ce qui revient au bout du compte à faire des calculs :p

Bon, on a donc 2 solutions :


Nous allons tenter la seconde solution, mais rien ne vous empêche de coder la première si vous voulez après ;)

Pour générer un nombre aléatoire, on utilise la fonction rand().
Cette fonction génère un nombre au hasard. Mais nous, on veut que ce nombre soit compris entre 1 et 100 par exemple (si on ne connaît pas les limites ça va devenir trop compliqué :p )

Pour ce faire, on va utiliser la formule suivante :

Code : C
1
2
srand(time(NULL));
nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;


(je ne pouvais pas trop vous demander de la deviner :lol: )

La première ligne (avec srand) permet d'initialiser le générateur de nombre aléatoires. Oui c'est un peu compliqué je vous avais prévenu :p
nombreMystere est une variable qui contiendra le nombre au hasard.

L'instruction srand ne doit être exécutée qu'une seule fois (au début du programme). Il faut obligatoirement faire un srand une fois, et seulement une fois.
Vous pouvez ensuite faire autant de rand() que vous voulez pour générer des nombres aléatoires. Mais il ne faut PAS que l'ordinateur lise l'instruction srand 2 fois par programme, ne l'oubliez pas.


MAX et MIN sont des constantes, le premier est le nombre maximal (100) et le second le nombre minimal (1). Je vous recommande de définir ces constantes au début du programme, comme ceci :


Code : C
1
const long MAX = 100, MIN = 1;


(pour un nombre aléatoire entre 1 et 100)


Les librairies à inclure



Pour que votre programme marche correctement, vous aurez besoin d'inclure 3 librairies : stdlib, stdio et time (la dernière sert pour les nombres aléatoires).
Votre programme devra donc commencer par :

Code : C
1
2
3
#include <stdio.h>
#include <stdlib.h>
#include <time.h>



J'en ai assez dit !



Bon allez, j'arrête là parce que sinon je vais vous donner tout le code du programme si ça continue :p

Pour vous faire générer des nombres aléatoires, j'ai été obligé de vous donner des codes "tous prêts", sans vous expliquer totalement comment ils fonctionnaient. En général je n'aime pas faire ça mais là je n'ai pas vraiment le choix car ça compliquerait trop les choses pour le moment.
Soyez sûrs toutefois que par la suite vous apprendrez de nouvelles choses qui vous permettront de comprendre cela ;)


Bref, vous en savez assez. Je vous ai expliqué le principe du programme, je vous ai fait une capture d'écran du programme au cours d'une partie.
Avec tout ça, vous êtes tout à fait capables d'écrire le programme ;)

A vous de jouer !
Bonne chance ! :)

Correction !

Stop !
Je ramasse les copies :D


Alors, avez-vous réussi à coder le programme ?
Je veux pas vous mettre la pression mais... vous devriez :p
Cela n'est pas bien compliqué.


Je vais vous donner une correction (la mienne), mais il y a plusieurs bonnes façons de faire le programme. Si votre code source n'est pas identique au mien et que vous avez trouvé une autre façon de le faire, c'est bien aussi hein ;)


La correction de "Plus ou Moins"




Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
/*

Plus ou Moins
-------------

Réalisé par M@teo21, pour les cours du Site du Zér0
<lien url="www.siteduzero.com">www.siteduzero.com</lien> (cours de programmation en C / C++ pour débutants)

Création le : 20/12/2005

*/


#include <stdio.h>
#include <stdlib.h>
#include <time.h>


int main ( int argc, char** argv )
{
    long nombreMystere = 0, nombreEntre = 0;
    const long MAX = 100, MIN = 1;

    // Génération du nombre aléatoire

    srand(time(NULL));
    nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;

    /* La boucle du programme. Elle se répète tant que l'utilisateur
    n'a pas trouvé le nombre mystère */

    do
    {
        // On demande le nombre
        printf("Quel est le nombre ? ");
        scanf("%ld", &nombreEntre);

        // On compare le nombre entré avec le nombre mystère

        if (nombreMystere > nombreEntre)
            printf("C'est plus !\n\n");
        else if (nombreMystere < nombreEntre)
            printf("C'est moins !\n\n");
        else
            printf ("Bravo, vous avez trouve le nombre mystere !!!\n\n");
    } while (nombreEntre != nombreMystere);

    system("PAUSE");
}


Exécutable et sources



Pour ceux qui le désirent, je mets à votre disposition en téléchargement l'exécutable du programme ainsi que les sources.

L'exécutable (.exe) est compilé pour Windows, donc si vous êtes sous un autre système d'exploitation il faudra recompiler le programme pour qu'il marche chez vous ;)




Il y a deux dossiers, l'un avec l'exécutable (compilé sous Windows je le rappelle), et l'autre avec les sources.

Dans le cas de "Plus ou moins", les sources sont très simples : il y a juste un fichier main.c.
N'ouvrez pas le fichier main.c directement. Ouvrez d'abord votre ide favori (Dev, Visual...) et créez un nouveau projet de type console vide. Une fois que c'est fait, demander à ajouter au projet le fichier main.c.
Vous pourrez alors compiler le programme pour tester, et le modifier si vous le désirez ;)


Explications



Je vais maintenant vous expliquer mon code, en commençant par le début.

Les directives de précompilateur



Ce sont les lignes commençant par # tout en haut. Elles incluent les librairies dont on a besoin.
Je vous les ai données tout à l'heure, donc si vous vous êtes plantés là c'est que vous êtes vraiment euh... pas doués :lol:


Les variables



On n'en a pas eu besoin de beaucoup.
Juste une pour le nombre entré par l'utilisateur (nombreEntre) et une autre qui retient le nombre aléatoire généré par l'ordinateur (nombreMystere).

J'ai aussi défini les constantes comme je vous l'ai dit au début de ce chapitre. L'avantage de définir les constantes en haut du programme, c'est que comme ça si vous voulez changer la difficulté (en mettant 1000 pour MAX par exemple) il suffit juste d'éditer cette ligne et de recompiler.


La boucle



J'ai choisi de faire une boucle do... while. En théorie, une boucle while simple aurait pu fonctionner aussi, mais j'ai trouvé qu'utiliser do... while était plus logique.

Pourquoi ?
Parce que, souvenez-vous, do... while est une boucle qui s'exécute au moins une fois. Et nous, on sait qu'on veut demander le nombre à l'utilisateur au moins une fois (il ne peut pas trouver le résultat en moins d'un coup, ou alors c'est qu'il est super fort o_O )


A chaque passage dans la boucle, on redemande à l'utilisateur le nombre. On stocke le nombre qu'il propose dans nombreEntre.
Puis, on compare ce nombreEntre au nombreMystere. Il y a 3 possibilités :



Il faut une condition pour la boucle. Celle-ci était facile à trouver : on continue la boucle TANT QUE le nombre entré n'est pas égal au nombre mystère.
La fois où le nombre est égal (c'est-à-dire quand on a trouvé), la boucle s'arrête. Le programme est alors terminé :)

Idées d'amélioration

Non, vous ne croyiez tout de même pas que j'allais m'arrêter là ? ^^
Les cours du Site du Zér0 c'est comme la mousse au chocolat, quand y'en a plus y'en a encore !


Je veux vous inciter à continuer à améliorer ce programme, pour vous entraîner. N'oubliez pas que c'est en vous entraînant comme ceci que vous progresserez ! Ceux qui lisent les cours d'une traite sans jamais faire de tests font une grosse erreur, je l'ai dit et je le redirai ;)

Figurez-vous que j'ai une imagination débordante, et même sur un petit programme comme celui-ci je vois plein d'idées pour l'améliorer ! :-°
Attention : cette fois je ne vous fournis pas de correction, il faudra vous débrouiller tous seuls ! Si vous avez vraiment des problèmes, n'hésitez pas à aller faire un tour sur les forums du site, faites une recherche pour voir si on n'a pas déjà donné la réponse à vos questions, sinon créez un nouveau sujet pour poser ces questions :)



Voilà, ça devrait vous occuper un petit bout de temps :D

Amusez-vous bien et n'hésitez pas à chercher d'autres idées pour améliorer ce "Plus ou Moins", je suis sûr qu'il y en a !
N'oubliez pas que les forums sont à votre disposition si vous avez des questions ;)

Voilà notre premier TP s'achève ici :)
J'espère que vous l'avez apprécié et que vous allez tenter de faire un maximum de modifications tous seuls comme des grands, car c'est réellement ce qui vous fera progresser.

Au fur et à mesure du cours, les TP deviendront bien sûr de plus en plus intéressants, et vous vous étonnerez dans quelques temps de ce que vous arriverez à faire !
Chapitre précédent Sommaire Chapitre suivant
Retour en haut Retour en haut


Créé : le 29/07/2005 à 00:29:36
Modifié : le 13/09/2008 à 16:52:50
Avancement : 100%
Licence : Copie non autorisée

Changer de design | En savoir plus | Plan du site | Politique d'accessibilité | Règles | RSS tutoriels | RSS news
Édité par Simple IT SARL : Nous contacter | Notre blog | Revue de presse | Publicité

Y'a plus rien à lire, faut remonter maintenant !

Hébergement web - Correction de tutoriels - Créer un site
Vous souhaitez apparaître ici ? Contactez-nous.

Nombre de connectés 541 Zéros connectés | Requêtes SQL 9 requêtes | Temps de génération de la page : Total (SQL) 0.0809s (0.0602s)