Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- class Galaxie extends Database
- {
- const MAX_SYSTEMES = 500; // Nombre maximum de systèmes
- const MIN_PLANETES_PAR_SYSTEME = 1;
- const MAX_PLANETES_PAR_SYSTEME = 8;
- const UNITE_X = 1;
- const UNITE_Y = 1;
- const MIN_RAND_X = 20;
- const MAX_RAND_X = 9980;
- const MIN_RAND_Y = 20;
- const MAX_RAND_Y = 9980;
- public function Generate()
- {
- for($i = 0; $i <= self::MAX_SYSTEMES; $i++)
- {
- $this->systemPosition();
- }
- for($s = 0; $s <= $this->countSystems(); $s++)
- {
- $planetsNumber = rand(self::MIN_PLANETES_PAR_SYSTEME, self::MAX_PLANETES_PAR_SYSTEME);
- for($pN; $pN <= $planetsNumber; $pN++)
- {
- $this->createPlanet($this->GetSystem($s, "id"));
- }
- }
- }
- public function GetPlanet($planetID, $key)
- {
- try
- {
- $query = $this->_database->prepare("SELECT ".$key." FROM `planetes` WHERE id = :planetID");
- $query->execute(array(":planetID" => $planetID));
- $key = $query->fetchColumn();
- $query->closeCursor();
- return $key;
- }
- catch(Exception $e)
- {
- die("<center>Erreur de requête SQL:<br>".$e->getMessage()."</center>");
- }
- }
- public function GetSystem($systemID, $key)
- {
- try
- {
- $query = $this->_database->prepare("SELECT ".$key." FROM `systemes` WHERE id = :systemID");
- $query->execute(array(":id" => $systemID));
- $key = $query->fetchColumn();
- $query->closeCursor();
- return $key;
- }
- catch(Exception $e)
- {
- die("<center>Erreur de requête SQL:<br>".$e->getMessage()."</center>");
- }
- }
- private function createSystem($AX, $AY, $BX, $BY, $CX, $CY, $DX, $DY)
- {
- try
- {
- $pseudo = "aucun";
- $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)");
- $query->execute(array(":AX" => $AX, ":BX" => $BX, ":CX" => $CX, ":DX" => $DX, ":AY" => $AY, ":BY" => $BY, ":CY" => $CY, ":DY" => $DY));
- $query->closeCursor();
- }
- catch(Exception $e)
- {
- die("<center>Erreur de requête SQL:<br>".$e->getMessage()."</center>");
- }
- }
- private function createPlanet($systemID)
- {
- try
- {
- $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"));
- if($this->isValidPlanet($systemID, $coordonnees["X"], $coordonnees["Y"]))
- {
- $portalID = $this->generatePortalID();
- $query = $this->_database->prepare("INSERT INTO `planetes` (coordonnee_x, coordonnee_y) VALUES (:X, :Y)");
- $query->execute(array(":X" => $X, ":Y" => $Y));
- $query->closeCursor();
- }
- }
- catch(Exception $e)
- {
- die("<center>Erreur de requête SQL:<br>".$e->getMessage()."</center>");
- }
- }
- private function isValidPlanet($systemID, $X, $Y)
- {
- for($p = 0; $p <= $this->countPlanets(); $p++)
- {
- if(!($coordonnees["X"] == $this->GetPlanet($p, "coordonnee_x")) || !($coordonnees["Y"] == $this->GetPlanet($p, "coordonnee_y")))
- {
- return 1;
- }
- else
- {
- return $this->createPlanet($systemID, $X, $Y);
- }
- }
- }
- private function systemPosition()
- {
- $coordonnees_A = array("X" => rand(self::MIN_RAND_X, self::MAX_RAND_X), "Y" => rand(self::MIN_RAND_Y, self::MAX_RAND_Y));
- $coordonnees_B = array("X" => $coordonnees_A["X"]+20, "Y" => $coordonnees_A["Y"]);
- $coordonnees_C = array("X" => $coordonnees_B["X"], "Y" => $coordonnees_A["Y"]-20);
- $coordonnees_D = array("X" => $coordonnees_A["X"], $coordonnees_C["Y"]);
- 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"]))
- {
- $systems = $this->countSystems();
- for($s = 0; $s <= $systems; $s++)
- {
- if($coordonnees_A["X"] >= $this->GetSystem($s, "coordonnee_aX") || $coordonnees_B["X"] <= $this->GetSystem($s, "coordonnee_bX"))
- {
- if(!($coordonnee_A["Y"] <= $this->GetSystem($s, "coordonnee_aY")) || !($coordonnee_B["Y"] >= $this->GetSystem($s, "coordonnee_bY"))
- {
- $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"]);
- }
- }
- else
- {
- return $this->systemPosition();
- }
- }
- }
- else
- {
- return $this->systemPosition();
- }
- }
- private function isValidSystem($AX, $AY, $BX, $BY, $CX, $CY, $DX, $DY)
- {
- $planets = $this->countPlanets();
- for($p = 0; $p <= $planets; $p++)
- {
- $planetX = $this->GetPlanet($p, "coordonnee_x");
- $planetY = $this->GetPlanet($p, "coordonnee_y");
- if($planetX >= $AX || $planetX <= $BX)
- {
- if(!($planetY >= $BY) && !($planetY <= $AY))
- {
- return 1;
- }
- else
- {
- return 0;
- }
- }
- }
- }
- private function countPlanets()
- {
- try
- {
- $query = $this->_database->prepare("SELECT * FROM `planetes`");
- $query->execute();
- $result = $query->rowCount();
- $query->closeCursor();
- return $result;
- }
- catch(Exception $e)
- {
- die("<center>Erreur de requête SQL:<br>".$e->getMessage."</center>");
- }
- }
- private function countSystems()
- {
- try
- {
- $query = $this->_database->prepare("SELECT * FROM `systemes`");
- $query->execute();
- $result = $query->rowCount();
- $query->closeCursor();
- return $result;
- }
- catch(Exception $e)
- {
- die("<center>Erreur de requête SQL:<br>".$e->getMessage()."</center>");
- }
- }
- private function generatePortalID()
- {
- $characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
- $portalID = array();
- $charactersLength = strlen($characters) - 1;
- for($i; $i < 7; $i++)
- {
- $character = rand(0, $charactersLength);
- $portalID[] = $characters[$character];
- }
- return implode($portalID);
- }
- }
- ?>
Add Comment
Please, Sign In to add comment