| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160 |
- <?php
- /**
- * Exemple d'utilisation de la classe Map
- *
- * Ce fichier montre comment créer, modifier et sauvegarder une carte.
- */
- // Inclure les classes nécessaires
- require_once __DIR__ . '/../Models/Map.php';
- /**
- * Fonction principale d'exemple
- */
- function runMapExample()
- {
- echo "=== Exemple d'utilisation de la classe Map ===\n\n";
- // 1. Créer une nouvelle carte
- echo "1. Création d'une nouvelle carte 5x5...\n";
- $map = new Map("Carte d'exemple", 5, 5);
- echo "Carte créée: {$map->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();
- }
|