PHP Barra dell'esperienza con php

Stato
Discussione chiusa ad ulteriori risposte.

-Luigi23-

Utente Electrum
13 Giugno 2012
157
23
12
107
Ultima modifica:
Salve, avrei un problema, vorrei creare una barra grafica per far visualizzare l'esperienza che ha un utente e quanto manca per arrivare al prossimo livello.

Accortenze:
-l'esperienza la va a prelevare dal database
-l'esperienza da accumulare cambia a secondo del livello

Cosa mi consigliate di fare? Non chiedo che mi sia inviato il codice qui bello e fatto ma perlomeno un indicazione su cosa fare.
 
Ultima modifica:
PHP:
<?PHP


$levels = array("Neutro", "Gentile", "Buono", "Nobile", "Cavaliere"); // Si potrebbe fare un unico array
$experience = array(0, 1000, 4000, 8000, 12000);


$exp = 8000; // Esperienza attuale


for($i = 0; $i < count($levels); $i++):
    if($exp >= $experience[$i]){
        $levelx = $levels[$i]; // Salvo l'ultimo risultato ottenuto in una variabile
        $exp_necessaria = $experience[$i+1] - $exp; // Esperienza necessaria
    }
endfor;
echo "Il tuo livello attuale &egrave;: ".$levelx.". Exp necessaria al prossimo livello: ".$exp_necessaria;

Sto da poco studiando PHP e questo è quello che ho potuto realizzarti:
- Usi il for per contare i livelli (ovviamente secondo le tue necessità prelevandoli dal database) e per ottenere il livello e l'esperienza necessaria salvando gli ultimi risultati in delle variabili; (Ho utilizzato il karma di Metin2 per i livelli :asd:.)
 
PHP:
<?PHP


$levels = array("Neutro", "Gentile", "Buono", "Nobile", "Cavaliere"); // Si potrebbe fare un unico array
$experience = array(0, 1000, 4000, 8000, 12000);


$exp = 8000; // Esperienza attuale


for($i = 0; $i < count($levels); $i++):
    if($exp >= $experience[$i]){
        $levelx = $levels[$i]; // Salvo l'ultimo risultato ottenuto in una variabile
        $exp_necessaria = $experience[$i+1] - $exp; // Esperienza necessaria
        break;
    }
endfor;
echo "Il tuo livello attuale &egrave;: ".$levelx.". Exp necessaria al prossimo livello: ".$exp_necessaria;

Sto da poco studiando PHP e questo è quello che ho potuto realizzarti:
- Usi il for per contare i livelli (ovviamente secondo le tue necessità prelevandoli dal database) e per ottenere il livello e l'esperienza necessaria salvando gli ultimi risultati in delle variabili; (Ho utilizzato il karma di Metin2 per i livelli :asd:.)

1u5t.png

Devilkyroth forse non mi sono spiegato bene io verrei una cosa del genere
 
Ultima modifica:
@Luigi23, vedi se questo può andarti bene:
PHP:
<?PHP


$arr = array(
    1 => 0,
    2 => 1000,
    3 => 4000,
    4 => 8000,
    5 => 12000
);


$exp = 100;


foreach($arr as $key => $value){
    for($i = 0; $i < count($arr[$key]); $i++){
        if($exp >= $value){
            $my_level = $key;
            $exp_d = $arr[$my_level+1] - $exp;
        }
    }
}
$esperienza_attuale = ($exp-($arr[$my_level]))*100/(($arr[$my_level+1])-($arr[$my_level]));


echo "Livello: {$my_level}; Esperienza: ".(int) $esperienza_attuale."/100";

Così facendo otterrai la percentuale dell'esperienza che attualmente hai.

La barra è da fare in css e html, potresti comunque provare a utilizzare le 'progress' bar di bootstrap come codice esempio e se ne hai già una, meglio è :) Comunque sia, ti consiglio di utilizzare la percentuale come numero intero.

Per bootstrap (Components · Bootstrap).

-- EDIT --
Ti ho aggiunto un modo che ti mostra il livello e la quantità di esperienza.
Se vuoi, e te lo consiglio, puoi anche togliere il for, tanto è inutile, neanche so perché l'ho messo.
 
  • Mi piace
Reazioni: -Luigi23-
Per questo genere di cose si utilizzano sempre array come fatto da Devil, cmq credo che puoi semplificare il codice... conta che tu prelevi dal DB sia il liv che l'esperienza, quindi avendo un array bidimensionale, basta che incrementi o diminuisci, quindi capire quale livello è il tuo non è proprio necessario... poi le barre le puoi fare in CSS, oppure usi le GD di PHP , per creare immagini... oppure fai con librerie CSS dinamiche in JS , ci sono molti metodi, dipende da te, poi i calcoli per ogni livello, vanno fatti in percentuali, cioè , alla barra serve la percentuale non l'esperienza
 
[MENTION=203022]Devilkyroth[/MENTION]

PHP:
<style type="text/css">
.o{

	background-color: black;
	border-radius: 4px;
	height: 15px;
	padding: 4px;
	width: 100px;
	position: relative;

}

.o .i{

	background-color: #00FF00;
	border-radius: 2px;
	height: 100%;

}

.o .l{

	position: absolute;
	top: 3px;
	right: 5px;
	color: white;
	font: bold 14px arial;

}
</style>
<?php

$max_exp = 666; // esperienza massima

$act_exp = 250; // esperienza attuale dell'utente

$calc = ($act_exp / $max_exp ) * 100; // width
$calc = round($calc); // arrotondato

?>
<div class="o">
<div class="i" style="width:<?php echo $calc; ?>%"></div>
</div>
<br>
<?php

$levels = array(1 => 100, 2 => 200, 3 => 300); // livello => esperienza

$act_exp1 = 250; // esperienza attuale dell'utente

foreach($levels as $k => $v){

	if($v >= $act_exp1){

		$calc1 = ($act_exp1 / $max_exp ) * 100; // width
		$calc1 = round($calc1); // arrotondato

		echo "<div class='o'>
<div class='l'>".$k."</div>
<div class='i' style='width:".$calc1."%'></div>
</div>";

		break;

	}

}

?>

Si può far di meglio con array_filter
 
  • Mi piace
Reazioni: Skhiroth
Grazie a tutti cercherò di mettere in pratica i vostri consigli con qualche piccola modifica poi vi farò sapere.
 
Stato
Discussione chiusa ad ulteriori risposte.