JeuWeb - Crée ton jeu par navigateur
While correcte? - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : While correcte? (/showthread.php?tid=1772)



While correcte? - covin85 - 18-09-2007

Bonjour,
Cela fait matenant plus d'un moi que je passe toutes mes soirées sur mon code d'attaque pour mon site Aglar(jeux de stratègie médieval),et je doit vous avouez que je commence a craquer.

L'erreur que je n'arrive pas a corriger est la suivante : "Maximum execution time of 30 seconds exceeded"
Mon script n'abboutit pas.

Après pleins pleins de test de toutes les autres fonctions,a moin d'être aveugle cela ne doit venir que de mes boucles "While".

Voici la boucle :

$data["u.."] sont les unitées du joueurs
Code PHP :
<?php 
$okib
='0';

while(
$okib == '0')
{
if(
$x1 == 'chevalier' && $okib == '0')
{
$x1 = 'cavalier';
if(
$data["ucavalier"] >= '1')
{
$okib= '1' ;
}
}

if(
$x1 == 'cavalier' && $okib == '0')
{
$x1 = 'arbaletrier';
if(
$data["uarbaletrier"] >= '1')
{
$okib= '1' ;
}
}

if(
$x1 == 'arbaletrier' && $okib == '0')
{
$x1 = 'ucanon';
if(
$data["ucanon"] >= '1')
{
$okib= '1' ;
}
}

...

if (
$data["uarbaletrier"] <= '0' && $data["ucavalier"] <= '0' && $data["uchevalier"] <= '0' && $data["upaladin"] <= '0' && $data["ucanon"] <= '0')
{
header ('Location: indexdd.php');
}

}

Cette boucle est elle correcte?
PS : Les noms des variable $x1 sont bien correcte.
Merci


RE: While correcte? - denisc - 18-09-2007

pourquoi tu mets '0' et par 0???
pareil dans les tests

et pourquoi '1' et pas 1 dans tes comparaisons?
Tu mélanges valeurs numériques et chaines de caractère!


RE: While correcte? - covin85 - 18-09-2007

J'ai modifier toutes les valeurs numérique mais c'est exctement pareille.
Aile


RE: While correcte? - Roworll - 18-09-2007

Quelle est la valeur de $x1 au début de ta boucle ?
Si c'est autre chose que 'chevalier', il y a des chances que tu ne rentres jamais dans un de tes tests (if($x1 == 'chevalier' && $okib == '0'))

Pour débugger ça, essaye de mettre des echos dans chacun de tes tests.
par exemple, echo 'chevalier'; dans le premier test, echo 'cavalier'; dans le 2e, etc.

Ca te permettras d'évaluer ou le programme passe et ou il ne passe pas.


RE: While correcte? - Kalan - 18-09-2007

Typiquement, la boucle est infinie parce que $okib n'est jamais modifié.
Sans le structure complète de cette boucle, c'est difficle de comprendre pourquoi; mais de manière générale, il faut, dans ce type de boucle, tourjous prévoir une sortie systématique dans le cas où aucune des conditions n'est validée.

Typiquement, un truc du genre :
if ($okib=='0')
{
switch ($xl)
{
case 'chevalier' :
ton code
break;
case [..]
default :
$okib = 'err';
break;
}
}

if ($okib=='err')
traitement de l'erreur


RE: While correcte? - covin85 - 18-09-2007

Si ma syntaxe du code est correcte la variable $okib est obligatoirement modifier car :
-Si il reste des unitées , grace aux while ,$x1 prendra forcement une valeur
-Si il n'y a plus d'unité j'ai fait un header ('Location: indexdd.php');

PS : $x1 et $x2 sont obligatoirement identique aux condition "if($x1 == 'cavalier'...."


RE: While correcte? - Kalan - 18-09-2007

covin85 a écrit :Si ma syntaxe du code est correcte la variable $okib est obligatoirement modifier car :
-Si il reste des unitées , grace aux while ,$x1 prendra forcement une valeur
-Si il n'y a plus d'unité j'ai fait un header ('Location: indexdd.php');

PS : $x1 et $x2 sont obligatoirement identique aux condition "if($x1 == 'cavalier'...."

Je ne comprends pas bien.
Dans le while, l'affectation de $xl est systématiquement sous condition. Si ta boucle est infinie, c'est sans doute qu'aucune de ces conditions n'est remplie.

Quant au débranchement vers le header, je ne connais pas le contenu $data mais la condition n'est pas non plus forcément valide si toutes les précédents sont fausse.

Bref, le preuve de cette algorithme n'existe pas car, théoriquement (et sans doute aussi pratiquement), cette boucle peut être sans fin.

Donc pour pousser plus avant l'analyse, il faudrait que tu précises un peu l'ensemble du code (le contexte).

Pour t'aider à comprendre ce qui flanche, tu devrais inclure une trace vers un fichier de log juste avant la boucle précisant la valeur de '*'.$xl.'*'.
Il s'agit peut-être d'une bête erreur de frappe quelque part qui ajouterait un espace ou quelque chose en bout de chaine (difficile à repérer) mais rendrait faux les tests d'égalité.