Adrien Gras
Ateliers

Pierre-Feuille-Ciseaux

Un jeu Pierre-Feuille-Ciseaux pour manipuler variables, conditions et génération de HTML.

Le but de cet atelier est de vous familiariser avec les bases de PHP en créant un jeu simple : Pierre, Feuilles, Ciseaux. Vous allez apprendre à manipuler des variables, à utiliser des conditions et à générer du contenu HTML.

Préparation

Pour tous les ateliers, nous allons utiliser VSCode comme IDE, et Docker pour exécuter notre code PHP.

Attention

Si vous aviez déjà un projet en cours, assurez-vous de bien stopper les conteneurs Docker des projets précédents pour éviter les conflits de ports.

Vous trouverez la procédure ici : Changer de projet

Lancer la stack Docker

Rendez-vous dans le dossier racine du dépôt git puis dans 002-php-chifoumi. En suite, lancez la stack docker avec la commande suivante :

docker compose up -d --build

Vous pouvez en suite vérifier que tout fonctionne en allant à l'adresse http://localhost:80.

Attention

Si vous avez une erreur HTTPS, acceptez simplement le certificat auto-généré.

Attention

Pour ceux qui ont le problème de page qui ne se raffraichissent pas sur Windows

Vous allez devoir changer votre configuration docker pour ce projet. Pour se faire :

  1. Allez dans le dossier du projet
  2. Ouvrez le fichier docker-compose.yml
  3. Dans la section port, vous devriez avoir des notations comme suit :
    ports:
      - "80:80" # HTTP
      - "443:443" # HTTPS
      - "443:443/udp" # HTTP/3

  1. Changez les ports de gauche (ceux avant les :) pour des ports libres sur votre machine, par exemple :
    ports:
      - "8080:80" # HTTP
      - "444:443" # HTTPS
      - "444:443/udp" # HTTP/3

Lorsque dans la documentation il est fait référence à http://localhost ou https://localhost, vous devrez utiliser les ports que vous avez configurés : https://localhost:444 pour accéder à votre projet.

Ouvrir le projet dans PHPStorm

Ouvrez PHPStorm, puis :

  • Si vous êtes déjà dans un projet :
    • File > Open
    • Sélectionnez le dossier racine du dépôt git > 001-php-chifoumi/app
  • Si vous n'êtes pas dans un projet :
    • Open
    • Sélectionnez le dossier racine du dépôt git > 001-php-chifoumi/app

Configurer l'interpréteur PHP

Pour éviter que vous n'ayez à installer PHP sur votre machine, nous allons utiliser l'interpréteur PHP fourni par Docker.

Pour cela :

  1. Allez dans File > Settings > Languages & Frameworks > PHP
  2. Cliquez sur les ... à côté du champ CLI Interpreter
  3. Cliquez sur le + en haut à gauche pour ajouter un nouvel interpréteur
  4. Sélectionnez From Docker, Vagrant, WSL, Remote...
  5. Sélectionnez Docker Compose
  6. Si le champ Server est vide, cliquez sur les ... à côté et laissez les options par défaut, puis cliquez sur OK
  7. Dans le champ Configuration file, cliquez sur les ..., retirez tout le contenu en cliquant sur chaque entrée puis le bouton - et sélectionnez le fichier docker-compose.yml à la racine du dossier actuel : 002-php-chifoumi/docker-compose.yml
  8. Dans le champ Service, sélectionnez php
  9. Cliquez sur OK pour valider l'ajout de l'interpréteur
  10. Cliquez sur Apply puis OK pour fermer la fenêtre des paramètres

Afficher quelque chose dans le navigateur

En ouvrant le fichier index.php, vous pouvez voir qu'il y a déjà du code PHP dedans.

<?php

echo "Hello World!";

Si vous allez à l'adresse http://localhost:80, vous devriez voir le texte "Hello World!" s'afficher.

Pour faire notre jeu, nous allons devoir afficher une page HTML. Pour cela, nous allons utiliser la syntaxe heredoc.

Consigne

Utilisez la syntaxe heredoc pour afficher une page HTML simple avec un titre "Jeu Pierre, Feuilles, Ciseaux".

Pour faire propre, je vous conseille :

  • De mettre votre HTML dans une variable $html et de la remplir avec la syntaxe heredoc.
  • D'utiliser echo $html; pour afficher le contenu de la variable en fin de votre script.

Astuce

Si vous êtes comme moi et que vous ne voulez pas vous prendre la tête avec le CSS/JS mais que ça rende bien quand-même, vous pouvez utiliser le template "starter" de Bootstrap 5.

https://getbootstrap.com/docs/5.3/getting-started/introduction/#quick-start

De manière alternative, vous pouvez aussi utiliser Tailwind avec le Play CDN : https://tailwindcss.com/docs/installation/play-cdn.

Ajouter les éléments graphiques

Maintenant que nous avons une page HTML qui s'affiche, nous allons ajouter les éléments graphiques nécessaires pour jouer au jeu.

Consigne

Modifiez votre code pour ajouter les éléments suivants à votre page HTML :

  • Un titre <h1> avec le texte "Jeu Pierre, Feuilles, Ciseaux".
  • Deux zones pour afficher les choix du joueur et de PHP.
  • Une zone pour afficher le résultat du jeu (gagné, perdu, égalité).
  • Trois boutons pour que le joueur puisse choisir entre Pierre, Feuille et Ciseaux.
  • Un bouton pour réinitialiser le jeu.

Gérer les choix du joueur

Maintenant que nous avons les éléments graphiques, nous allons gérer les choix du joueur.

Pour passer les informations du joueur au serveur, nous allons utiliser les paramètres de query dans l'URL. Par exemple, si le joueur choisit "Pierre", l'URL sera http://localhost:80/?player=pierre.

Consigne

  1. Faites en sortes que lorsque le joueur clique sur un des boutons (Pierre, Feuille, Ciseaux), le choix du joueur soit envoyé au serveur via les paramètres de query dans l'URL.
  2. Récupérez le choix du joueur dans votre script PHP en utilisant la variable superglobale $_GET. (documentation: https://www.php.net/manual/en/reserved.variables.php)
  3. Affichez le choix du joueur dans la zone prévue à cet effet.
  4. Si aucun choix n'a été fait (c'est-à-dire si le paramètre player n'est pas présent dans l'URL), affichez un message invitant le joueur à faire un choix.
  5. Faites en sortes que le bouton de réinitialisation redirige vers l'URL sans paramètre player.

Gérer le choix de PHP

Maintenant que nous avons le choix du joueur, nous allons générer un choix aléatoire pour PHP.

Pour maintenir une cohérence dans le jeu, nous allons utiliser un tableau pour stocker les choix possibles (Pierre, Feuille, Ciseaux).

Consigne

  1. Créez un tableau $choices contenant les trois choix possibles : "pierre", "feuille", "ciseaux".
  2. Trouvez une fonction PHP qui permet de sélectionner un élément aléatoire dans un tableau. (Indice : https://www.php.net/manual/en/ref.array.php)
  3. Utilisez cette fonction pour sélectionner un choix aléatoire pour PHP à partir du tableau $choices.
  4. Affichez le choix de PHP dans la zone prévue à cet effet.

Déterminer le résultat du jeu

Maintenant que tout est en place, nous allons déterminer le résultat du jeu en fonction des choix du joueur et de PHP.

Pour déterminer un gagnant, nous allons utiliser l'agorithme suivant :

CHOIX_JOUEUR = ...
CHOIX_PHP = ...
RESULTAT = "Perdu"

SI CHOIX_JOUEUR == CHOIX_PHP 
ALORS
    RESULTAT = "Égalité"
SINON SI (CHOIX_JOUEUR == "pierre" ET CHOIX_PHP == "ciseaux") OU
        (CHOIX_JOUEUR == "feuille" ET CHOIX_PHP == "pierre") OU
        (CHOIX_JOUEUR == "ciseaux" ET CHOIX_PHP == "feuille") 
ALORS
    RESULTAT = "Gagné"
FIN SI

Astuce

Vous avez plusieurs manières d'implémenter cet algorithme en PHP (du plus simple au plus complexe):

  • Utiliser des if, elseif et else pour vérifier chaque condition.
  • Utiliser un switch pour vérifier le choix du joueur, puis imbriquer des if ou d'autres switch pour vérifier le choix de PHP.
  • Utiliser un match pour vérifier en même temps le choix du joueur et le choix de PHP et déterminer le résultat.

Consigne

  1. Implémentez l'algorithme ci-dessus pour déterminer le résultat du jeu.
  2. Affichez le résultat dans la zone prévue à cet effet.

Bonus

Les sujets suivants sont à faire en bonus si vous avez terminé les consignes principales.

Pierre , Feuille, Ciseaux, Lézard, Spock

Dans la série The Big Bang Theory (2007), l'un des personnages principaux, Sheldon Cooper, propose une variante du jeu Pierre, Feuille, Ciseaux en ajoutant deux nouveaux choix :

Les nouvelles règles sont les suivantes :

  • La pierre écrase les ciseaux et écrase le lézard
  • La feuille couvre la pierre et réfute Spock
  • Les ciseaux coupent la feuille et décapitent le lézard
  • Le lézard mange la feuille et empoisonne Spock
  • Spock vaporise la pierre et écrase les ciseaux

Consigne

  1. Modifiez votre page HTML pour ajouter deux nouveaux boutons pour le Lézard et Spock.
  2. Mettez à jour le tableau $choices pour inclure les nouveaux choix.
  3. Mettez à jour l'algorithme pour déterminer le résultat du jeu en fonction des nouvelles règles.

Statistiques de jeu

Pour rendre le jeu plus intéressant, nous allons ajouter des statistiques pour suivre les performances du joueur.

Comme nous n'avons pas de base de données, nous allons utiliser les paramètres de query dans l'URL pour stocker les statistiques.

Voici les statistiques que nous allons suivre :

  • Le nombre de parties jouées
  • Le nombre de victoires du joueur
  • Le nombre de victoires de PHP
  • Le nombre d'égalités

Consigne

  1. Modifiez votre page HTML pour ajouter une section affichant les statistiques de jeu.
  2. Mettez à jour les paramètres de query dans l'URL pour inclure les statistiques après chaque partie.
  3. Récupérez les statistiques dans votre script PHP en utilisant la variable superglobale $_GET.
  4. Mettez à jour les statistiques en fonction du résultat de la partie.
  5. Affichez les statistiques dans la section prévue à cet effet.

Sur cette page