Visualizzazione dei risultati da 1 a 9 su 9

Discussione: loop infinito while

  1. #1

    loop infinito while

    Ciao a tutti,

    sto cercando di creare un evento post-battaglia per un browser game.

    Diciamo che la battaglia sia già stata svolta e che le perdite dell'ATT siano 21 e determino le truppe inviate grazie ad un valore in DB mysql.

    Ho scritto questo codice:

    Codice PHP:

                $att 
    '10,20,30,0,0,0,0,0,0,0,0';
                
                
    $explode_att explode(","$att);
                
                
    $u_0 $explode_att[0];
                
    $u_1 $explode_att[1];
                
    $u_2 $explode_att[2];
                
    $u_3 $explode_att[3];
                
    $u_4 $explode_att[4];
                
    $u_5 $explode_att[5];
                
    $u_6 $explode_att[6];
                
    $u_7 $explode_att[7];
                
    $u_8 $explode_att[8];
                
    $u_9 $explode_att[9];
                
                
    $att_perdite 21;
                
                while ( 
    $att_perdite != ) {
                
                    
    $k rand(1$att_perdite);
                    
    $i rand(09);
                    
    $r = empty(${'u_'.$i});
                    
                    if ( 
    $r == FALSE ) {
                        
                            
                            echo 
    "K: ".$k."

    "
    ;
                            echo 
    "I: ".$i."

    "
    ;
                            echo 
    "u_".$i." era ".${'u_'.$i}."

    "
    ;
                            echo 
    " -- si -- 

    "
    ;
                            
    $att_perdite $att_perdite $k;
                            ${
    'u_'.$i} = ${'u_'.$i} - $k;
                            echo 
    "u_".$i." è ".${'u_'.$i}."

    "
    ;


                    }
                    
                    
                
                } 
    e funziona benissimo perché mi setta il nuovo valore di ogni $u_ . Adesso però arriva il problema perché va in loop, sto cercando di dichiarare che se le unità siano minori del valore di $k allora si deve sottrarre $att_perdite - $r.

    Codice PHP:
                $att '10,20,30,0,0,0,0,0,0,0,0';
                
                
    $explode_att explode(","$att);
                
                
    $u_0 $explode_att[0];
                
    $u_1 $explode_att[1];
                
    $u_2 $explode_att[2];
                
    $u_3 $explode_att[3];
                
    $u_4 $explode_att[4];
                
    $u_5 $explode_att[5];
                
    $u_6 $explode_att[6];
                
    $u_7 $explode_att[7];
                
    $u_8 $explode_att[8];
                
    $u_9 $explode_att[9];
                
                
    $att_perdite 21;
                
                while ( 
    $att_perdite != ) {
                
                    
    $k rand(1$att_perdite);
                    
    $i rand(09);
                    
    $r = empty(${'u_'.$i});
                    
                    if ( 
    $r == FALSE ) {
                        
                        if ( 
    $r <= $k ) {
                            
                            echo 
    "1

    "
    ;
                            echo 
    "K: ".$k."

    "
    ;
                            echo 
    "I: ".$i."

    "
    ;
                            echo 
    "u_".$i." era ".${'u_'.$i}."

    "
    ;
                            echo 
    " -- si -- 

    "
    ;
                            
    $att_perdite $att_perdite $r;
                            ${
    'u_'.$i} = ${'u_'.$i} - $r;
                            echo 
    "u_".$i." è ".${'u_'.$i}."

    "
    ;
                        
                        } else {
                            
                            echo 
    "2

    "
    ;
                            echo 
    "K: ".$k."

    "
    ;
                            echo 
    "I: ".$i."

    "
    ;
                            echo 
    "u_".$i." era ".${'u_'.$i}."

    "
    ;
                            echo 
    " -- si -- 

    "
    ;
                            
    $att_perdite $att_perdite $k;
                            ${
    'u_'.$i} = ${'u_'.$i} - $k;
                            echo 
    "u_".$i." è ".${'u_'.$i}."

    "
    ;
                        
                        }


                    }
                    
                    
                
                } 
    Chi sa perché va in loop? GRAZIE!

  2. #2
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Hai provato a mettere un print da qualche parte per seguire i valori della variabile ?
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  3. #3
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Prova comunque con

    Codice PHP:
    while ( $att_perdite ) { 
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  4. #4
    Si ho messo vari ECHO, come puoi notare dentro i while.

    Solo che nel primo caso, stampa tutti perfettamente, nel secondo no perché va in un caricamento infinito e quindi non stampa niente. Ho provato a fare come dici tu, ma non si risolve, anche perché penso sia la stessa cosa -> !=0 e >0 .

  5. #5
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Devi semplicemente rimpiazzare $r da $i.

    Codice PHP:
    if ( $i <= $k ) { 
                             
                           
                            
    $att_perdite $att_perdite $i
                            
                            echo 
    "$att_perdite
    "

    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  6. #6
    ma perché $i ? $i da un rand(0,9) non il valore dell'unità di attacco, quello che fa $r

  7. #7
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Originariamente inviato da powertoglory
    ma perché $i ? $i da un rand(0,9) non il valore dell'unità di attacco, quello che fa $r
    Fai il confronto tra una variabile "boolean" ($r) ed una numerica ($k).

    if ( $r <= $k ) {

    Ho eseguito il tuo script e $att_perdite non variava mai.
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  8. #8
    GIUSTO! grazie mille, perché non mi sono accorto proprio:

    Codice PHP:
    $r = empty(${'u_'.$i}); 
    da un FALSE o TRUE non un valore numerico grazie!

  9. #9
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Originariamente inviato da powertoglory
    Si ho messo vari ECHO, come puoi notare dentro i while.

    Solo che nel primo caso, stampa tutti perfettamente, nel secondo no perché va in un caricamento infinito e quindi non stampa niente. Ho provato a fare come dici tu, ma non si risolve, anche perché penso sia la stessa cosa -> !=0 e >0 .
    !=0 e >0 non sono la stessa cosa. Il primo puo' partire in loop se il valore 0 non é mai raggiunto.
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.