Buthers

Project Galaxy EW - GALAXY

Feb 13th, 2017
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 5.92 KB | None | 0 0
  1. <?php
  2.  
  3. class Galaxie extends Database
  4. {
  5.     const MAX_SYSTEMES = 500; // Nombre maximum de systèmes
  6.     const MIN_PLANETES_PAR_SYSTEME = 1;
  7.     const MAX_PLANETES_PAR_SYSTEME = 8;
  8.     const UNITE_X = 1;
  9.     const UNITE_Y = 1;
  10.     const MIN_RAND_X = 20;
  11.     const MAX_RAND_X = 9980;
  12.     const MIN_RAND_Y = 20;
  13.     const MAX_RAND_Y = 9980;
  14.  
  15.     public function Generate()
  16.     {
  17.         for($i = 0; $i <= self::MAX_SYSTEMES; $i++)
  18.         {
  19.             $this->systemPosition();
  20.         }
  21.         for($s = 0; $s <= $this->countSystems(); $s++)
  22.         {
  23.             $planetsNumber = rand(self::MIN_PLANETES_PAR_SYSTEME, self::MAX_PLANETES_PAR_SYSTEME);
  24.             for($pN; $pN <= $planetsNumber; $pN++)
  25.             {
  26.                 $this->createPlanet($this->GetSystem($s, "id"));
  27.             }
  28.         }
  29.     }
  30.  
  31.     public function GetPlanet($planetID, $key)
  32.     {
  33.         try
  34.         {
  35.             $query = $this->_database->prepare("SELECT ".$key." FROM `planetes` WHERE id = :planetID");
  36.             $query->execute(array(":planetID" => $planetID));
  37.             $key = $query->fetchColumn();
  38.             $query->closeCursor();
  39.             return $key;
  40.         }
  41.         catch(Exception $e)
  42.         {
  43.             die("<center>Erreur de requête SQL:<br>".$e->getMessage()."</center>");
  44.         }
  45.     }
  46.  
  47.     public function GetSystem($systemID, $key)
  48.     {
  49.         try
  50.         {
  51.             $query = $this->_database->prepare("SELECT ".$key." FROM `systemes` WHERE id = :systemID");
  52.             $query->execute(array(":id" => $systemID));
  53.             $key = $query->fetchColumn();
  54.             $query->closeCursor();
  55.             return $key;
  56.         }
  57.         catch(Exception $e)
  58.         {
  59.             die("<center>Erreur de requête SQL:<br>".$e->getMessage()."</center>");
  60.         }
  61.     }
  62.  
  63.     private function createSystem($AX, $AY, $BX, $BY, $CX, $CY, $DX, $DY)
  64.     {
  65.         try
  66.         {
  67.             $pseudo = "aucun";
  68.             $query = $this->_database->prepare("INSERT INTO `systemes` (coordonnee_aX, coordonnee_bX, coordonnee_cX, coordonnee_dX, coordonnee_aY, coordonnee_bY, coordonnee_cY, coordonnee_dY, pseudo) VALUES (:AX, :BX, :CX, :DX, :AY, :BY, :CY, :DY, :pseudo)");
  69.             $query->execute(array(":AX" => $AX, ":BX" => $BX, ":CX" => $CX, ":DX" => $DX, ":AY" => $AY, ":BY" => $BY, ":CY" => $CY, ":DY" => $DY));
  70.             $query->closeCursor();
  71.         }
  72.         catch(Exception $e)
  73.         {
  74.             die("<center>Erreur de requête SQL:<br>".$e->getMessage()."</center>");
  75.         }
  76.     }
  77.  
  78.     private function createPlanet($systemID)
  79.     {
  80.         try
  81.         {
  82.             $coordonnees = array("X" => rand($this->GetSystem($systemID, "coordonnee_aX", $this->GetSystem($systemID, "coordonnee_bX"), "Y" => rand($this->GetSystem($systemID, "coordonnee_aY", $this->GetSystem($systemID, "coordonnee_dY"));
  83.             if($this->isValidPlanet($systemID, $coordonnees["X"], $coordonnees["Y"]))
  84.             {
  85.                 $portalID = $this->generatePortalID();
  86.                 $query = $this->_database->prepare("INSERT INTO `planetes` (coordonnee_x, coordonnee_y) VALUES (:X, :Y)");
  87.                 $query->execute(array(":X" => $X, ":Y" => $Y));
  88.                 $query->closeCursor();
  89.             }
  90.         }
  91.         catch(Exception $e)
  92.         {
  93.             die("<center>Erreur de requête SQL:<br>".$e->getMessage()."</center>");
  94.         }
  95.  
  96.     }
  97.  
  98.     private function isValidPlanet($systemID, $X, $Y)
  99.     {
  100.         for($p = 0; $p <= $this->countPlanets(); $p++)
  101.         {
  102.             if(!($coordonnees["X"] == $this->GetPlanet($p, "coordonnee_x")) || !($coordonnees["Y"] == $this->GetPlanet($p, "coordonnee_y")))
  103.             {
  104.                 return 1;
  105.             }
  106.             else
  107.             {
  108.                 return $this->createPlanet($systemID, $X, $Y);
  109.             }
  110.         }
  111.     }
  112.  
  113.     private function systemPosition()
  114.     {
  115.         $coordonnees_A = array("X" => rand(self::MIN_RAND_X, self::MAX_RAND_X), "Y" => rand(self::MIN_RAND_Y, self::MAX_RAND_Y));
  116.         $coordonnees_B = array("X" => $coordonnees_A["X"]+20, "Y" => $coordonnees_A["Y"]);
  117.         $coordonnees_C = array("X" => $coordonnees_B["X"], "Y" => $coordonnees_A["Y"]-20);
  118.         $coordonnees_D = array("X" => $coordonnees_A["X"], $coordonnees_C["Y"]);
  119.         if($this->isValidSystem($coordonnees_A["X"], $coordonnees_A["Y"], $coordonnees_B["X"], $coordonnees_B["Y"], $coordonnees_C["X"], $coordonnees_C["Y"], $coordonnees_D["X"], $coordonnees_D["Y"]))
  120.         {
  121.             $systems = $this->countSystems();
  122.             for($s = 0; $s <= $systems; $s++)
  123.             {
  124.                 if($coordonnees_A["X"] >= $this->GetSystem($s, "coordonnee_aX") || $coordonnees_B["X"] <= $this->GetSystem($s, "coordonnee_bX"))
  125.                 {
  126.                     if(!($coordonnee_A["Y"] <= $this->GetSystem($s, "coordonnee_aY")) || !($coordonnee_B["Y"] >= $this->GetSystem($s, "coordonnee_bY"))
  127.                     {
  128.                         $this->createSystem($coordonnees_A["X"], $coordonnees_A["Y"], $coordonnees_B["X"], $coordonnees_B["Y"], $coordonnees_C["X"], $coordonnees_C["Y"], $coordonnees_D["X"], $coordonnees_D["Y"]);
  129.                     }
  130.                 }
  131.                 else
  132.                 {
  133.                     return $this->systemPosition();
  134.                 }
  135.             }
  136.         }
  137.         else
  138.         {
  139.             return $this->systemPosition();
  140.         }
  141.     }
  142.  
  143.     private function isValidSystem($AX, $AY, $BX, $BY, $CX, $CY, $DX, $DY)
  144.     {
  145.         $planets = $this->countPlanets();
  146.         for($p = 0; $p <= $planets; $p++)
  147.         {
  148.             $planetX = $this->GetPlanet($p, "coordonnee_x");
  149.             $planetY = $this->GetPlanet($p, "coordonnee_y");
  150.             if($planetX >= $AX || $planetX <= $BX)
  151.             {
  152.                 if(!($planetY >= $BY) && !($planetY <= $AY))
  153.                 {
  154.                     return 1;
  155.                 }
  156.                 else
  157.                 {
  158.                     return 0;
  159.                 }
  160.             }
  161.         }
  162.     }
  163.  
  164.     private function countPlanets()
  165.     {
  166.         try
  167.         {
  168.             $query = $this->_database->prepare("SELECT * FROM `planetes`");
  169.             $query->execute();
  170.             $result = $query->rowCount();
  171.             $query->closeCursor();
  172.             return $result;
  173.         }
  174.         catch(Exception $e)
  175.         {
  176.             die("<center>Erreur de requête SQL:<br>".$e->getMessage."</center>");
  177.         }
  178.     }
  179.  
  180.     private function countSystems()
  181.     {
  182.         try
  183.         {
  184.             $query = $this->_database->prepare("SELECT * FROM `systemes`");
  185.             $query->execute();
  186.             $result = $query->rowCount();
  187.             $query->closeCursor();
  188.             return $result;
  189.         }
  190.         catch(Exception $e)
  191.         {
  192.             die("<center>Erreur de requête SQL:<br>".$e->getMessage()."</center>");
  193.         }
  194.     }
  195.  
  196.     private function generatePortalID()
  197.     {
  198.         $characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
  199.         $portalID = array();
  200.         $charactersLength = strlen($characters) - 1;
  201.         for($i; $i < 7; $i++)
  202.         {
  203.             $character = rand(0, $charactersLength);
  204.             $portalID[] = $characters[$character];
  205.         }
  206.         return implode($portalID);
  207.     }
  208. }
  209.  
  210. ?>
Add Comment
Please, Sign In to add comment