Witam mam dziwny problem z pętlami
<?
Class Fight {
function Oblicz( $arrParams ) {
if( $arrParams[1]['wpn'] == 1 ) {
$arrParams[1]['wpn'] = 11;
$arrParams[1]['deff'] = 8;
} else {
$arrParams[1]['wpn'] = 15;
$arrParams[1]['deff'] = 4;
}
if( $arrParams[2]['wpn'] == 1 ) {
$arrParams[2]['wpn'] = 11;
$arrParams[2]['deff'] = 8;
} else {
$arrParams[2]['wpn'] = 15;
$arrParams[2]['deff'] = 4;
}
$arrParams[1]['hp'] = $arrParams[1]['pw'] * 15 + $arrParams[1]['deff'] * 4;
$arrParams[2]['hp'] = $arrParams[2]['pw'] * 15 + $arrParams[2]['deff'] * 4;
return $arrParams;
}
function Hit( $arrParams, $intKiller, $intDie, $logFight ) {
#Obiczamy moc hita
$hit = rand( 1
, $arrParams[$intKiller]['str'] ) + $arrParams[$intKiller]['wpn'];
#Test uniku
$unik = $arrParams[$intDie]['zr'];
if( $rand <= $unik ) {
$return = 'unik';
#Test odpowiedzi
if( $arrParams[$intDie]['sz'] > $arrParams[$intKiller]['zr'] ) {
#Udalo się odparcie ataku
$return = 'odp';
#Obliczamy moc hita
$hit = rand( 1
, $arrParams[$intDie]['str'] ) + $arrParams[$intDie]['wpn']; }
}
switch ($return) {
case 'unik':
$logFight[] = $arrParams[$intKiller]['name'].' próbuje zadać ciosu';
$logFight[] = $arrParams[$intDie]['name'].' robi unik';
break;
case 'odp':
$logFight[] = $arrParams[$intKiller]['name'].' wymachuje niezdarnie mieczem, nie trafia';
$logFight[] = $arrParams[$intDie]['name'].' wykorzustując okazje zadaje '.$hit.' obrażeń';
$arrParams[$intKiller]['hp'] = $arrParams[$intKiller]['hp'] - $hit;
break;
default:
$logFight[] = $arrParams[$intKiller]['name'].' trafia w przeciwnika, '.$arrParams[$intDie]['name'].' traci '.$hit.' życia';
$arrParams[$intDie]['hp'] = $arrParams[$intDie]['hp'] - $hit;
break;
}
return array('log' => $logFight, 'arrParams' => $arrParams); }
function Walka( $arrParams ) {
$arrParams = $this->Oblicz( $arrParams );
//while( $arrParams[1]['hp'] != 0 AND $arrParams[1]['hp'] != 0 ) { // tutaj jest ta pętla, próbowałem też dawać np.for($x=0;$x<5;$x++) {
for($i=1;$i<=2;$i++) {
if($i==1) { $x = 2; } else { $x = 1; }
if( $arrParams[1]['hp'] > 0 AND $arrParams[1]['hp'] > 0 ) {
$walka = $this->Hit( $arrParams, $i, $x, $logFight );
$logFight = $walka['log'];
$arrParams = $walka['arrParams'];
if( $arrParams[1]['hp'] <= 0 ) {
$logFight[] = $arrParams[1]['name'].' Ginie !';
$logFight[] = $arrParams[2]['name'].' Wygrał pojedynek !';
} elseif ( $arrParams[2]['hp'] <= 0 ) {
$logFight[] = $arrParams[2]['name'].' Ginie !';
$logFight[] = $arrParams[1]['name'].' Wygrał pojedynek !';
}
}
}
//}
return $logFight;
}
}
?>
a tutaj plik test
<?
if($_POST['btn']=="GO!") {
require_once 'la.php';
$fight = new Fight;
'pw' => $_POST['pw1'],
'str' => $_POST['str1'],
'wpn' => $_POST['wpn1'],
'zr' => $_POST['zr1'],
'sz' => $_POST['sz1'],
'name' => $_POST['name1']
),
'pw' => $_POST['pw2'],
'str' => $_POST['str2'],
'wpn' => $_POST['wpn2'],
'zr' => $_POST['zr2'],
'sz' => $_POST['sz2'],
'name' => $_POST['name2']
)
);
}
?>
I problem jest taki: jak odkomentuje pętlę w klasie Fight (ta przy której jest komentarz), nie ważne czy to pętla for czy while, ładuje się aż wyskoczy max_execution_time limit reached. Nie wiecie co tu może być nie tak ?
Ten post edytował crackcomm 21.07.2009, 02:57:51
Sygnaturka comes here.