Ce jeux sera réalisé en PHP, avec une exécution en local.

Dimension: px
Commencer à balayer dès la page:

Download "Ce jeux sera réalisé en PHP, avec une exécution en local."

Transcription

1 TP PHP Réalisons une plateforme de 3 jeux Le premier consiste à faire deviner un chiffre à l'utilisateur. Le temps qui s'écoule fait perdre des points. Le deuxième est un jeu de roulette, il faut miser sur Pair/Impair Rouge/Noir Le troisième est un jeu de rapidité sur les tables de multiplication. A chaque bonne réponse on gagne des points, à chaque mauvaise réponse on en perd. Le tout est chronométré. Nous allons réaliser ces jeux pas à pas en découvrant les notions de FONCTION, des cas de test avec la commande SWITCH, des cas de boucle avec la commande FOR Ce jeux sera réalisé en PHP, avec une exécution en local. 1 Faire deviner un chiffre Le programme de base Crée un programme qui demande à l'utilisateur de deviner le chiffre que l'ordinateur a en mémoire. Stockez ce chiffre dans une variable en début de programme. L'ordinateur demande à l'utilisateur «Quel est mon chiffre?». A chaque fois que l'utilisateur donne une mauvaise réponse, le programme lui indique s'il doit trouver un chiffre plus petit ou plus grand. Puis le programme repose sa question «Quel est mon chiffre?» Lorsque l'utilisateur a trouvé le bon chiffre, nous le félicitons. Les bornes Nous allons ajouter des bornes à notre jeux. Par exemple, on demandera à l'utilisateur de trouver un chiffre entre 1 et 10. Si l'utilisateur rentre un chiffre en dehors de ces bornes, nous lui indiquons qu'il s'est trompé, qu'il doit bien suivre les consignes. Stockez ces bornes dans des variables en début de programme. Le tirage au sort PHP possède de nombreuses fonctionnalités déjà pré-programmées. C'est ce que l'on appelle des FONCTIONS. Un fonction est une boite qui contient un programme. Ce programme s exécute lorsque l'on appelle la fonction. Ces programme font des opérations, des calculs, et produisent des résultats.

2 Par exemple, il en existe une très pratique pour les jeux, puisqu'elle simule le hasard. Il s'agit de la fonction rand( ). Son nom vient de l'anglais «random» qui signifie «aléatoire». Lorsque j'utilise la fonction rand( ), on dit que je l'appelle. J'obtiens un chiffre entier, c'est le résultat de la fonction. Le résultat de la fonction rand( ) est un entier. Je peux appeler cette fonction comme ceci : echo rand() ; // j'écris à l'écran le résultat de la fonction (un chiffre pris au hasard) $variable = rand( ) ; // j'affecte à une variable le résultat de la fonction. Essaye ce programme : <?php echo rand() ;?> Le résultat de la fonction rand( ) sera un chiffre entier compris entre 0 et Dans notre cas, c'est pas très pratique, puisque nous avons besoins de bornes plus réduites. Nous souhaitons faire deviner un chiffre entre 1 et 10, pas entre 0 et 32767! C'est pourquoi, nous devons nous intéresser aux attributs de la fonction rand( ). Les attributs sont des options que peut utiliser la fonction. La fonction rand( ) peut prendre 2 options. Une borne inférieure et une borne supérieure. Je peux appeler ma fonction de cette façon : echo rand(5,15) ; // j'obtiendrais un chiffre pris au hasard entre 5 et 15 inclus. Ou de cette façon echo rand($inf,$sup) ; // ou $inf et $sup son des variables qui contiennent un entier. Grâce à cette fonction rand( ) et à ses options, améliore ton programme, pour qu'à chaque utilisation, on doive deviner un nouveau chiffre pris au hasard entre 1 et 10. On recommence? Lorsque le joueur a trouvé le chiffre mystère, après les félicitations, l'ordinateur affiche «Ce jeu t'a plu... Veux-tu jouer encore? (Y/N)». Si le joueur répond Y, le programme fait un nouveau tirage au sort et recommence le jeu. Sinon, on passe au jeu suivant... 2 Le jeu de la roulette. Fait un jeu qui demande à l'utilisateur de miser

3 d'abord sur PAIR ou IMPAIR puis sur ROUGE ou NOIR Grâce à la fonction rand( ), réalise un tirage sur les chiffres, un autre sur la couleur, puis indique le résultat du tirage «Le tirage est IMPAIR et NOIR!» par exemple. Si la mise est la même que le tirage, le joueur a gagné. Sinon, il a perdu. Pour réaliser ce programme, utilise les opérations sur les booléens. Il faut que le tirage sur les chiffres soit gagnant ET que le tirage sur les couleurs soit gagnant. Si l'un des deux est perdant, tout est perdant. Au fait, vérifie les saisies que fait le joueur! 3 La table de multiplication chronométrée. Le jeux sans chronomètre Le programme tire un chiffre au hasard, compris entre 1 et 10. Puis, il fait réciter la table de ce chiffre ( X, à remplacer par le chiffre tiré au hasard ) au joueur. «1 x X =?» Si la réponse est bonne on passe à «2 x X =?» et ainsi de suite. Si la réponse est fausse, le programme indique «C'est FAUX! recommence», et repose la question. Le chronomètre Soyons plus sévères... Nous allons stresser un peu notre joueur en lui imposant une limite de temps pour répondre à chaque question. La fonction time( ) de PHP est étonnante. Elle renvoie le nombre de secondes qui se sont écoulées depuis le 1er janvier 1970 à 0 heures. C'est ce que l'on appelle le temps UNIX. Quel intérêt? Et bien si l'on considère qu'un nombre de secondes est un entier, il est beaucoup plus facile de faire des calculs algébriques dessus que sur des dates! Par exemple, combien de jours séparent le 13 juin 1990 du 26 mai 2012? à la française : 26/05/ /06/1990 =.? en timestamp : = secondes = minutes = heures = 8018 jours Bref... c'est plus facile... et re-bref, la fonction time( ) renvoie un chiffre différent toutes les secondes, plus grand d'une unité à chaque seconde qui passe...

4 Grace à time() qui n'accepte aucune option... améliorez le programme de la table de multiplication. Le joueur n'a droit qu'à 2 secondes pour donner sa réponse à chaque question. S'il dépasse ce délais, le programme affiche «Temps dépassé!! recommence» et on lui repose la question. Le sans faute Si le jouer réalise un sans faute sur tout la table (réponses justes et chronomètre respecté), il mérite une félicitation particulière... Faites en sorte d'afficher un super message de félicitation si le joueur fait un sans faute! 4 - Les points, les gains Pas de jeu sans points marqués! Améliorez tout le programme pour que : le joueur commence le jeu avec un stock de 20 points. Il perd un point par seconde passée à chercher le chiffre mystère du premier jeux Il peux miser ses points sur le jeu de roulette. Il ne peux pas miser plus de points qu'il n'a après le jeu du chiffre mystère. S'il gagne il remporte 2 fois sa mise. S'il perd, il perd ses points. Il gagne un point pour chaque bonne réponse à la table de multiplication. Il perd un point à chaque mauvaise réponse à la table de multiplication. Il perd un point à chaque fois qu'il dépasse le temps du chronomètre à la table de multiplication. Il gagne un bonus de 10 points s'il fait un sans faute à la table de multiplication. 5 - On recommence? Lorsque le joueur a terminé les trois jeux, après les félicitations, l'ordinateur affiche «Ce jeu t'a plu... Veux-tu jouer encore? (Y/N)». Si le joueur répond Y, le programme recommence au début. Sinon, c'est terminé. 6 sortie de secours Les parents sont agaçants. Ils ne laissent jamais leurs enfants aller jusqu'au bout du jeu. Aussi, il fait permettre aux joueurs de quitter précipitamment le jeu. A chaque fois qu'on attend une réponse du joueur, si celui-ci tape la lettre Q, il met fin au programme. Pour cela, il existe une commande tout simple. Il s'agit de la commande exit. <?php exit ;?> Le programme s'arrête automatiquement lorsqu'il rencontre un «exit».

5 Place des sorties de secours dans tout le jeux. Un indice : utilise le test SWITCH. C'est un genre de IF, mais à choix multiples. Un exemple d'utilisation : Les deux sont équivalents : if ($i == 0) { echo "i égal 0"; } elseif ($i == 1) { echo "i égal 1"; } elseif ($i == 2) { echo "i égal 2"; } else { echo "rien"; } switch ($i) { case 0: echo "i égal 0"; break; case 1: echo "i égal 1"; break; case 2: echo "i égal 2"; break; default : echo "rien"; } Le «break» évite à PHP de se coltiner tous les cas. Break le fait sortir du switch dès qu'il a trouvé la bonne solution. 7 Design! Fais nous une belle interface d accueil. Du genre /////////////////////////////////////////////////////////////////////// Bienvenue sur SUPER GAME! Un jeu développé par MOI. **************************************** /////////////////////////////////////////////////////////////////////// Pour tracer ces jolies lignes, on va utiliser une boucle bien-sur! Mais on va s'exercer avec la boucle FOR. for (expr1; expr2; expr3) { commandes ; } La première expression (expr1) est évaluée (exécutée), quoi qu'il arrive au début de la boucle. Au début de chaque itération, l'expression expr2 est évaluée. Si l'évaluation vaut TRUE, la boucle continue et l'instruction est exécutée. Si l'évaluation vaut FALSE, l'exécution de la boucle s'arrête. Ce qui fait la différence avec la boucle do... while

6 qui execute un premier tour de boucle quoi qu'il arrive. Ici, on vérifie d'abord si on a le droit de faire le premier tour de boucle. À la fin de chaque itération, l'expression expr3 est évaluée (exécutée). Voilà, c'est fini pour cette fois.