13-12-2011, 08:17 PM
(Modification du message : 13-12-2011, 10:58 PM par Sephi-Chan.)
Bonjour, depuis quelques jours je travail sur la map de mon jeu pour générer un décor aléatoire. J'ai réussis à faire un code fonctionnel, mais ce code prend énormément de ressource au serveur et le fait même planter ! :'( J'ai essayé de le réduire mais je n'ai pas trouvé comment, quelqu'un pourrait-il m'aider à ce sujet ?
Le code:
Merci d'avance .
Le code:
<?php
for ($x = 1; $x <= 23; $x++)
{
$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
$bdd = new PDO('mysql:host=sql.olympe-network.com;dbname=*****', '*****', '*****', $pdo_options);
$reponse = $bdd->query('SELECT Nombrecarre FROM map ORDER by Id desc Limit 0,1');
while ($donnees = $reponse->fetch())
{
$Nombrecarre = $donnees['Nombrecarre'];
}
$reponse = $bdd->query('SELECT Id FROM map ORDER by Id desc Limit 0,1');
while ($donnees = $reponse->fetch())
{
$Id = $donnees['Id'];
}
$reponse = $bdd->query('SELECT * FROM map WHERE Nombrecarre = '.$Nombrecarre.' ORDER by Id Limit 1');
$Nouvellecase = $Nombrecarre - 1;
$Nombrecarre = $Nombrecarre + 2;
$Id++;
while ($donnees = $reponse->fetch())
{
if ($donnees['Pos_x'] == $donnees['Pos_y'] && $donnees['Pos_y'] <= 0){
// définis la position du prochain carré
$positionX = $donnees['Pos_x'] - 1;
$positionY = $donnees['Pos_y'] - 1;
echo '<br />' . $positionY .'<br />';
for ($i = 0; $i <= $Nouvellecase; $i++)
{
$positionnouvelleX = $positionX + $i;
$positionancienX = $positionnouvelleX - 1;
//$positionancienY = $positionY - 1;
$req = $bdd->prepare('SELECT Nom FROM map WHERE Pos_x = ? AND Pos_y = ? ');
$req->execute(array($positionancienX, $positionY));
while ($donnees = $req->fetch())
{
$Nom = $donnees['Nom'];
}
$nombre = mt_rand(1,100);
if ($Nom == 'plaine2')
{
echo 'plaine2';
if ($nombre < 60)
{
$terrains = "plaine1";
}
else
{
$terrains = 'plaine3';
}
}
else if ($Nom == 'plaine3')
{
echo 'plaine3';
if ($nombre < 60)
{
$terrains = "plaine2";
}
else
{
$terrains = 'foret1';
}
}
else if ($Nom == 'foret1')
{
echo 'foret1';
if ($nombre < 35)
{
$terrains = "plaine3";
}
else
{
$terrains = 'foret1';
}
}
else if ($Nom == 'eau')
{
echo 'eau';
if ($nombre < 35)
{
$terrains = "plaine1";
}
else
{
$terrains = 'eau';
}
}
else
{
echo 'plaine1';
if ($nombre < 40)
{
$terrains = "plaine1";
}
else
{
if ($nombre < 75 )
{
$terrains = 'plaine2';
}
else
{
$terrains = 'eau';
}
}
}
$req = $bdd->prepare('INSERT INTO map(Nombrecarre, Id, Nom, Pos_x, Pos_y) VALUES(:Nombrecarre, :Id, :terrains, :positionnouvelleX, :positionY)');
$req->execute(array(
'Nombrecarre' => $Nombrecarre,
'Id' => $Id,
'terrains' => $terrains,
'positionnouvelleX' => $positionnouvelleX,
'positionY' => $positionY
));
$Id++;
}
$positionX = $positionnouvelleX;
for ($i = 1; $i <= $Nouvellecase; $i++)
{
echo '<br />' . $positionY .'<br />';
$positionnouvelleY = $positionY + $i;
$positionancienY = $positionnouvelleY - 1;
echo '<br /> '. $i .'<br />';
echo '<br />' . $positionnouvelleY .'<br />';
$req = $bdd->prepare('SELECT Nom FROM map WHERE Pos_x = ? AND Pos_y = ? ');
$req->execute(array($positionX, $positionancienY));
while ($donnees = $req->fetch())
{
$Nom = $donnees['Nom'];
}
$nombre = mt_rand(1,100);
if ($Nom == 'plaine2')
{
echo 'plaine2';
if ($nombre < 60)
{
$terrains = "plaine1";
}
else
{
$terrains = 'plaine3';
}
}
else if ($Nom == 'plaine3')
{
echo 'plaine3';
if ($nombre < 60)
{
$terrains = "plaine2";
}
else
{
$terrains = 'foret1';
}
}
else if ($Nom == 'foret1')
{
echo 'foret1';
if ($nombre < 35)
{
$terrains = "plaine3";
}
else
{
$terrains = 'foret1';
}
}
else if ($Nom == 'eau')
{
echo 'eau';
if ($nombre < 35)
{
$terrains = "plaine1";
}
else
{
$terrains = 'eau';
}
}
else
{
echo 'plaine1';
if ($nombre < 40)
{
$terrains = "plaine1";
}
else
{
if ($nombre < 75 )
{
$terrains = 'plaine2';
}
else
{
$terrains = 'eau';
}
}
}
$req = $bdd->prepare('INSERT INTO map(Nombrecarre, Id, Nom, Pos_x, Pos_y) VALUES(:Nombrecarre, :Id, :terrains, :positionnouvelleX, :positionY)');
$req->execute(array(
'Nombrecarre' => $Nombrecarre,
'Id' => $Id,
'terrains' => $terrains,
'positionnouvelleX' => $positionX,
'positionY' => $positionnouvelleY
));
$Id++;
}
$positionX = $positionnouvelleX;
$positionY = $positionnouvelleY;
for ($i = 1; $i <= $Nouvellecase; $i++)
{
$positionnouvelleX = $positionX - $i;
$positionancienX = $positionnouvelleX + 1;
$req = $bdd->prepare('SELECT Nom FROM map WHERE Pos_x = ? AND Pos_y = ? ');
$req->execute(array($positionancienX, $positionY));
while ($donnees = $req->fetch())
{
$Nom = $donnees['Nom'];
}
$nombre = mt_rand(1,100);
if ($Nom == 'plaine2')
{
echo 'plaine2';
if ($nombre < 60)
{
$terrains = "plaine1";
}
else
{
$terrains = 'plaine3';
}
}
else if ($Nom == 'plaine3')
{
echo 'plaine3';
if ($nombre < 60)
{
$terrains = "plaine2";
}
else
{
$terrains = 'foret1';
}
}
else if ($Nom == 'foret1')
{
echo 'foret1';
if ($nombre < 35)
{
$terrains = "plaine3";
}
else
{
$terrains = 'foret1';
}
}
else if ($Nom == 'eau')
{
echo 'eau';
if ($nombre < 35)
{
$terrains = "plaine1";
}
else
{
$terrains = 'eau';
}
}
else
{
echo 'plaine1';
if ($nombre < 40)
{
$terrains = "plaine1";
}
else
{
if ($nombre < 75 )
{
$terrains = 'plaine2';
}
else
{
$terrains = 'eau';
}
}
}
$req = $bdd->prepare('INSERT INTO map(Nombrecarre, Id, Nom, Pos_x, Pos_y) VALUES(:Nombrecarre, :Id, :terrains, :positionnouvelleX, :positionY)');
$req->execute(array(
'Nombrecarre' => $Nombrecarre,
'Id' => $Id,
'terrains' => $terrains,
'positionnouvelleX' => $positionnouvelleX,
'positionY' => $positionY
));
$Id++;
}
$positionX = $positionnouvelleX;
$positionY = $positionnouvelleY;
for ($i = 1; $i <= ($Nouvellecase - 1); $i++)
{
$positionnouvelleY = $positionY - $i;
$positionancienY = $positionnouvelleY + 1;
$req = $bdd->prepare('SELECT Nom FROM map WHERE Pos_x = ? AND Pos_y = ? ');
$req->execute(array($positionX, $positionancienY));
while ($donnees = $req->fetch())
{
$Nom = $donnees['Nom'];
}
$nombre = mt_rand(1,100);
if ($Nom == 'plaine2')
{
echo 'plaine2';
if ($nombre < 60)
{
$terrains = "plaine1";
}
else
{
$terrains = 'plaine3';
}
}
else if ($Nom == 'plaine3')
{
echo 'plaine3';
if ($nombre < 60)
{
$terrains = "plaine2";
}
else
{
$terrains = 'foret1';
}
}
else if ($Nom == 'foret1')
{
echo 'foret1';
if ($nombre < 35)
{
$terrains = "plaine3";
}
else
{
$terrains = 'foret1';
}
}
else if ($Nom == 'eau')
{
echo 'eau';
if ($nombre < 35)
{
$terrains = "plaine1";
}
else
{
$terrains = 'eau';
}
}
else
{
echo 'plaine1';
if ($nombre < 40)
{
$terrains = "plaine1";
}
else
{
if ($nombre < 75 )
{
$terrains = 'plaine2';
}
else
{
$terrains = 'eau';
}
}
}
$req = $bdd->prepare('INSERT INTO map(Nombrecarre, Id, Nom, Pos_x, Pos_y) VALUES(:Nombrecarre, :Id, :terrains, :positionnouvelleX, :positionY)');
$req->execute(array(
'Nombrecarre' => $Nombrecarre,
'Id' => $Id,
'terrains' => $terrains,
'positionnouvelleX' => $positionX,
'positionY' => $positionnouvelleY
));
$Id++;
}
}
else
{
echo 'erreur <br />';
}
}
}
?>
Merci d'avance .