Adrien Gras
Ateliers

Katas de démarrage

Quelques katas pour pratiquer les bases de PHP en accompagnement du cours.

Le but de ces minis ateliers est de vous familiariser avec les bases de PHP à travers quelques katas simples. Ces ateliers sont complémentaires au cours sur les bases de PHP et vous permettront de pratiquer les concepts appris.

introduction

Pour tout les katas suivants, vous utiliserez le site suivant pour les réaliser : https://onlinephp.io/.

Astuce

Online PHP est un site permettant d'exécuter du code PHP en ligne, dans un environnement simplifié. Il est idéal pour tester rapidement des solutions sans avoir à configurer un serveur local.

Ce site a certains avantages pour apprendre les bases de PHP :

  • Il permet de lancer rapidement des scripts PHP sans configuration préalable.
  • Il offre un retour immédiat sur le code exécuté, ce qui facilite le débogage.
  • Il est dépourvu d'auto-complétion, ce qui vous oblige à taper le code manuellement et à vérifier les erreurs vous-même.

Pour chacun des katas suivants, vous devrez écrire un script PHP qui résout le problème posé. Les katas ne se suivent pas, donc vous pouvez effacer vos anciennes solutions.

Attention

Pour les katas suivants, je vous déconseille fortement d'utiliser l'IA. Vous allez apprendre les bases du langage, et il est essentiel de pratiquer sans aide extérieure, au risque de ne pas comprendre les concepts fondamentaux.

Si vous utilisez un outil pour faire des recherches, assurez-vous de bien comprendre le code que vous trouvez et d'être capable de l'expliquer.


La carte d'identité

Objectif : Créer une carte d'identité pour un étudiant en utilisant des variables et l'interpolation de chaînes.

La carte d'identité devra avoir ce format :

===== CARTE D'IDENTITÉ =====
Nom : [NOM]
Prénom : [PRÉNOM]
Année : [ANNÉE]ème année
============================

Consigne

Au début de votre script, déclarez les variables suivantes :

  • $nom : le nom de l'étudiant
  • $prenom : le prénom de l'étudiant
  • $annee : l'année d'étude de l'étudiant

Utilisez en suite l'interpolation de chaînes pour afficher la carte d'identité de l'étudiant.

Astuce

Vous pouvez utiliser de l'interpolation simple, la syntaxe heredoc ou la syntaxe nowdoc.


Le générateur de badge

Objectif : Écrire un script PHP qui génère un badge personnalisé pour un utilisateur, en utilisant des variables, des constantes et de l’interpolation de chaînes.

Le but sera d'aboutir à un badge au format suivant :

--------------------------------------------------
| NAME   : [NOM]                                 |
| LEVEL  : [NIVEAU]                              |
| ROLE   : [ROLE]                                |
| AVATAR : [AVATAR]                              |
| COLOR  : [COULEUR]                             |
--------------------------------------------------

Consigne

Déclarez les constantes suivantes :

Déclarez les variables suivantes pour un utilisateur :

  • $name : Nom de l’utilisateur (ex: "Alice").
  • $level : Niveau de l’utilisateur (ex: 5).
  • $isAdmin : Statut administrateur (booléen, ex: true).
  • $avatar : URL de l’avatar (utilisez DEFAULT_AVATAR si non spécifiée).

Effectuez les traitements suivants :

  • Si $isAdmin est vrai, afficher "ADMIN" en rôle, sinon "USER".
  • Si $level est supérieur ou égal à 10, afficher "(Expert)" après le niveau.

Affichez le badge.

Astuce

Quelques indices :

  • Dans l'exemple, la chaine --- fait 50 caractères et est construite à l'aide de la fonction str_repeat().
  • La fonction str_pad() peut être utilisée pour ajuster la longueur des chaînes.
    • vous remarquerez que les "labels" de lignes (e.g. NAME, LEVEL, etc.) font toujours la même longueur, et que la chaine doit faire 50 caractères ; pratique pour calculer le chiffre à donner à str_pad().
  • L'interpolation de chaine, ou les syntaxes heredoc et nowdoc peuvent être compliqués ici. Pour vous simplifier la tâche, n'utilisez qu'une variable où vous concaténerez chaque ligne avec $myVar .= "...".

Documentations :


Le juste prix

Objectif : Écrire un script qui devine un nombre caché en utilisant uniquement des opérateurs, des conditions et des comparaisons. Le nombre caché est fixe (pas de rand), et le script doit donner des indices basés sur des essais prédéfinis.

On cherchera à produire le résultat suivant pour :

  • un nombre caché de 42
  • les essais suivants : 30, 50, 42, 10
Indice : Le nombre est pair.
Essai : 30 | Trop bas ! | Écart : 12
Essai : 50 | Trop haut ! | Écart : 8
Essai : 42 | Bravo ! Vous avez trouvé le nombre caché : 42 ! | Écart : 0
Nombre total d'essais : 3

Consigne

Déclarez les variables suivantes :

  • $nombreCache : Un nombre caché fixe (ex: 42).
  • $essais : Un tableau d’essais prédéfinis (ex: [30, 50, 42, 10]).

Pour chaque essai dans $essais :

  • Comparez l’essai avec $nombreCache.
  • Affichez un message en utilisant des conditions :
    • "Trop bas !" si l’essai est inférieur.
    • "Trop haut !" si l’essai est supérieur.
    • "Bravo ! Vous avez trouvé le nombre caché : [NOMBRE] !" si l’essai est égal.

Pour chaque essai, affichez l’écart absolu avec $nombreCache (ex: "Écart : 12").

Vous devrez arrêter les essais si le nombre est trouvé.

Affichez le nombre total d'essais à la fin.

Astuce

Quelques indices :

  • Le tableau se déclare comme suit : $essais = [30, 50, 42, 10];
  • Vous pouvez accéder à la taille d'un tableau avec sizeof().
  • Vous pouvez utiliser la syntaxe $essais[$i] pour accéder à un élément spécifique du tableau.
  • Une boucle for peut être utilisée pour itérer à travers les éléments du tableau, mais est-ce la bonne solution ici ?

Le gestionnaire de potions magiques

Objectif : Écrire un script PHP qui simule un inventaire de potions magiques. Vous devrez utiliser des tableaux associatifs, des boucles, et des fonctions de manipulation de tableaux pour gérer les potions.

Consigne

Déclarez un tableau associatif $potions où chaque clé est le nom d'une potion et chaque valeur est un tableau associatif contenant :

  • quantite : La quantité disponible (ex: 5).
  • effet : Une description de l'effet (ex: "Soigne 50 PV").
  • prix : Le prix en gallions (ex: 10).

Exemple :

$potions = [
    "Potion de soin" => ["quantite" => 5, "effet" => "Soigne 50 PV", "prix" => 10],
    "Potion de mana" => ["quantite" => 3, "effet" => "Restaure 30 points de mana", "prix" => 15],
    "Potion de force" => ["quantite" => 2, "effet" => "Augmente la force de 10", "prix" => 20],
];

Affichez l'inventaire :

  • Parcourez le tableau avec une boucle foreach et affichez chaque potion sous la forme :
[NOM] : [QUANTITÉ] x [PRIX] gallions - Effet : [EFFET]

Calculez la valeur totale de l'inventaire :

  • Utilisez une boucle pour calculer la somme de quantite * prix pour chaque potion.

Ajoutez une potion :

  • Ajoutez une nouvelle potion au tableau (ex: "Potion d'invisibilité" avec quantite => 1, effet => "Rend invisible", prix => 50).

Trouvez la potion la plus chère :

  • Parcourez le tableau pour trouver la potion avec le prix le plus élevé et affichez son nom et son prix.

Le simulateur de duel de sorts

Objectif : Créer un ensemble de fonctions pour simuler un combat de sortilèges. Chaque fonction représentera un sortilège différent, avec des effets variés.

On obtiendra un résultat similaire à ceci :

Lancement du sort : Boule de feu !
Dégâts infligés : 25
Soins appliqués : +20 PV !
Gandalf - PV: 120, Mana: 40

Consigne

Créez une fonction lancerSort :

  • Paramètres : $sort (chaîne, nom du sort), &$mana (entier, quantité de mana, passé par référence). Fonctionnement :
  • Affichez "Lancement du sort : [SORT] !".
  • Réduisez $mana de 10 (simule la consommation de mana).
  • Retournez true si le sort est lancé (si $mana était suffisant), sinon false.

Créez une fonction soigner :

  • Paramètres : &$pv (entier, points de vie, passé par référence), $quantite (entier, quantité de soins). Fonctionnement :
  • Augmentez $pv de $quantite.
  • Affichez "Soins appliqués : +[QUANTITÉ] PV !".

Créez une fonction calculerDegats :

  • Paramètres : $niveau (entier, niveau du sort), $resistance (entier, résistance de la cible). Fonctionnement :
  • Calculez les dégâts avec la formule : ($niveau * 5) - $resistance.
  • Retournez la valeur des dégâts (minimum 0).

Créez une fonction afficherEtat :

  • Paramètres : $nom (chaîne, nom du personnage), $pv (entier), $mana (entier). Fonctionnement :
  • Affichez l'état du personnage sous la forme : "[$nom] - PV: [$pv], Mana: [$mana]"

Simulez un combat :

  • Initialisez les variables $pv = 100, $mana = 50, et $nom = "Gandalf".
  • Lancez le sort "Boule de feu" avec lancerSort.
  • Calculez les dégâts infligés à un ennemi avec $resistance = 15 et $niveau = 8.
  • Appliquez des soins avec soigner ($quantite = 20).
  • Affichez l'état final avec afficherEtat.

Sur cette page