Projet Shifumi PHP

Jeu en ligne de commande & Persistance JSON

Voir les autres projets

Le Contexte

Réalisé dans le cadre de ma formation l'année dernière, ce projet avait pour but de maîtriser les fondamentaux de PHP Vanilla en dehors d'un contexte web classique (HTML/CSS).

L'objectif était de créer un jeu de "Pierre-Feuille-Ciseaux" entièrement fonctionnel dans le terminal, capable de sauvegarder la progression du joueur sans utiliser de base de données SQL. C'était un excellent exercice pour comprendre la manipulation de fichiers et la logique algorithmique pure.

Fonctionnalités Développées

  • Interface CLI : Interaction avec l'utilisateur via la console (entrées/sorties standard).
  • Persistance des Données : Sauvegarde automatique des scores et de l'historique dans des fichiers Data.json.
  • Statistiques Avancées : Calcul du taux de victoire, de la main la plus jouée et du temps de jeu total.
  • Logique de Jeu : Algorithme aléatoire pour l'ordinateur et gestion des conditions de victoire.

Stack Technique

  • PHP PHP 8 : Scripting & Logique
  • JSON JSON : Stockage de données
  • Terminal CLI : Interface Homme-Machine
  • Git Git : Versionning

Les Défis Techniques

Manipulation de Fichiers : Le plus gros défi a été de créer un système de "base de données" léger en utilisant uniquement des fichiers JSON. Il a fallu gérer la lecture (file_get_contents), le décodage, la modification des tableaux PHP, puis la ré-écriture (file_put_contents) à chaque tour de jeu.

Gestion du Temps : J'ai implémenté un système de chronomètre avec microtime(true) pour calculer le temps exact passé en jeu et l'ajouter aux statistiques globales.

Robustesse : Le script doit gérer les erreurs, comme la création des fichiers JSON s'ils n'existent pas au premier lancement, ou la gestion des entrées utilisateur invalides dans la console.

Aperçu du Terminal

>> Menu Principal :

1. Commencer une nouvelle partie

2. Consulter l'historique

3. Consulter les statistiques

Votre choix : 1

... pierre, papier ou ciseaux ?

Simulation de l'interface en ligne de commande.