getName()}\n"; echo "Dimensions: {$map->getWidth()} x {$map->getHeight()}\n\n"; // 2. Modifier quelques tuiles echo "2. Modification de quelques tuiles...\n"; $map->setTile(0, 0, new Tile(['type' => 'castle', 'resources' => ['gold' => 100, 'stone' => 50], 'temperature' => 20.5])); // Château au coin supérieur gauche $map->setTile(2, 2, new Tile(['type' => 'river', 'resources' => ['water' => 1000], 'temperature' => 15.0])); // Rivière au centre $map->setTile(4, 4, new Tile(['type' => 'mountain', 'elevation' => 1500, 'resources' => ['iron' => 75], 'temperature' => 5.0])); // Montagne au coin inférieur droit $map->setTile(1, 1, new Tile(['type' => 'forest', 'resources' => ['wood' => 200], 'temperature' => 18.0])); // Forêt $map->setTile(3, 3, new Tile(['type' => 'field', 'resources' => ['wheat' => 150], 'temperature' => 22.0])); // Champ $map->setTile(0, 4, new Tile(['type' => 'road', 'temperature' => 25.0])); // Route echo "Tuiles modifiées avec succès\n\n"; // 3. Afficher les statistiques echo "3. Statistiques de la carte:\n"; $stats = $map->getStatistics(); echo "Total d'hexagones: {$stats['total_hexagons']}\n"; echo "Hexagones vides: {$stats['empty_count']} ({$stats['empty_percentage']}%)\n"; echo "Hexagones remplis: {$stats['filled_count']} ({$stats['filled_percentage']}%)\n"; echo "Répartition des types de tuiles:\n"; foreach ($stats['tile_type_counts'] as $type => $count) { echo " - " . ucfirst($type) . ": $count\n"; } echo "\n"; // 4. Sauvegarder la carte echo "4. Sauvegarde de la carte...\n"; $filePath = __DIR__ . '/../../storage/maps/example_map.json'; $directory = dirname($filePath); // Créer le dossier s'il n'existe pas if (!is_dir($directory)) { mkdir($directory, 0755, true); } if ($map->saveToFile($filePath)) { echo "Carte sauvegardée dans: $filePath\n\n"; } else { echo "Erreur lors de la sauvegarde\n\n"; } // 5. Charger la carte depuis le fichier echo "5. Chargement de la carte depuis le fichier...\n"; $loadedMap = Map::fromFile($filePath); if ($loadedMap) { echo "Carte chargée: {$loadedMap->getName()}\n"; echo "Dimensions: {$loadedMap->getWidth()} x {$loadedMap->getHeight()}\n"; // Vérifier que les données sont identiques $originalStats = $map->getStatistics(); $loadedStats = $loadedMap->getStatistics(); if ($originalStats['tile_type_counts'] === $loadedStats['tile_type_counts']) { echo "✓ Les données de la carte chargée correspondent à l'originale\n"; } else { echo "✗ Erreur: les données ne correspondent pas\n"; } } else { echo "Erreur lors du chargement de la carte\n"; } echo "\n"; // 6. Afficher un aperçu de la carte echo "6. Aperçu de la carte (5x5):\n"; for ($r = 0; $r < $map->getHeight(); $r++) { // Décalage pour l'affichage hexagonal $offset = str_repeat(' ', $r * 2); echo $offset; for ($q = 0; $q < $map->getWidth(); $q++) { $tile = $map->getTile($q, $r); $symbol = getTileSymbol($tile); echo "$symbol "; } echo "\n"; } echo "\n"; // 7. Exemple d'utilisation des coordonnées hexagonales echo "7. Exemple de calcul de distance hexagonale:\n"; $hex1 = $map->getHexagon(0, 0); $hex2 = $map->getHexagon(2, 2); if ($hex1 && $hex2) { $distance = $hex1->distanceTo($hex2); echo "Distance entre (0,0) et (2,2): $distance\n"; } echo "\n=== Exemple terminé ===\n"; } /** * Retourne un symbole pour représenter une tuile * * @param Tile|null $tile La tuile * @return string Le symbole */ function getTileSymbol(?Tile $tile): string { if ($tile === null || $tile->isEmpty()) { return '□'; } $type = strtolower($tile->getType()); $symbols = [ 'grass' => '░', 'field' => '🌾', 'forest' => '🌲', 'mountain' => '⛰️', 'water' => '🌊', 'building' => '🏢', 'house' => '🏠', 'farm' => '🚜', 'road' => '🛣️', 'river' => '🌊', 'bridge' => '🌉', 'castle' => '🏰', 'tower' => '🏯', 'wall' => '🧱', 'mine' => '⛏️', 'quarry' => '⚒️', 'market' => '🏪', 'temple' => '⛩️', 'hospital' => '🏥', 'school' => '🏫', 'factory' => '🏭', 'power_plant' => '⚡', 'airport' => '✈️', 'port' => '⚓', 'railway' => '🚂', 'highway' => '🛣️' ]; return $symbols[$type] ?? '?'; } // Exécuter l'exemple si le fichier est appelé directement if (basename(__FILE__) === basename($_SERVER['PHP_SELF'] ?? '')) { runMapExample(); }