Check successi dadi
Check successi dadi postato il 29/08/2018 21:31:38 nel forum programmazione, open source e hosting
Sera a tutti! :D
Sto da poco sviluppando un sistema di lancio di dadi che lancia più dadi in una volta tanti quanti indicati in una variabile, nello specifico il codice che ho scritto è il seguente
$totdadi=$_POST['dice']; //prende da un form precedente la quantità di dadi da lanciare
$difficolta= 6 //indica il valore minimo da ottenere col dado perché il risultato possa considerarsi un successo.6 è un valore indicativo
$testodado = '';
for( $i = 1; $i <= $totdadi; $i++ ) {
$dado10=mt_rand(1,10);
$testodado .= $dado10 . ' ';
}
//questo for loops tira tanti dadi quanti indicati da $totdadi e salva il risultato in una stringa di codice salvata a sua volta dentro la variabile $testodado
Ora il mio problema era che volevo creare un check che controlla quanti dei dadi tirati hanno raggiunto o superato la difficoltà richiesta e salvasse il numero di questi successi dentro una variabile:
Facile a dirsi ma di meno a farsi, perché non ho idea di come realizzare a livello di codice una cosa simile.Avete per caso qualche consiglio?
Pagine → 1
29/08/2018 22:14:05
Io farei:
$totdadi=$_POST['dice']; //prende da un form precedente la quantità di dadi da lanciare
$difficolta= 6 //indica il valore minimo da ottenere col dado perché il risultato possa considerarsi un successo.6 è un valore indicativo
$testodado = '';
$successi = 0;
for( $i = 1; $i <= $totdadi; $i++ ) {
$dado10=mt_rand(1,10);
$testodado .= $dado10 . ' ';
if ($dado10 >= $difficolta) { $successi++; }
}
//questo for loops tira tanti dadi quanti indicati da $totdadi e salva il risultato in una stringa di codice salvata a sua volta dentro la variabile $testodado
Poi quanto stampi il $testodado ci aggiungi in calce $successi
30/08/2018 08:56:24
Ottimo!
Grazie mille davvero :D
30/08/2018 16:51:23 e modificato da blancks il 30/08/2018 16:58:39
Mi permetto di esporre un piccolo suggerimento di programmazione, sperando sia cosa apprezzata :)
Vorrei suggerire di ricorrere all'uso degli array ogniqualvolta ci si ritrova ad avere a che fare con liste di dati di un certo tipo. Questo, ci tengo a precisare, non aggiunge niente alla soluzione del problema indicata da seralia (che e' perfetta cosi' com'e').
In pratica sto suggerendo di non concatenare i dadi da subito nella variabile $testodado come stringa, ma di salvarne singolarmente il valore all'interno di una lista. Questo facilitera' eventuali operazioni si possa un domani voler effettuare su di essi.
Prendendo in considerazione la tua casistica, faccio qualche esempio pratico:
$totdadi = $_POST['dice']; //prende da un form precedente la quantità di dadi da lanciare
$difficolta = 6; //indica il valore minimo da ottenere col dado perché il risultato possa considerarsi un successo.6 è un valore indicativo
$listadadi = array();
$successi = 0;
for( $i = 1; $i <= $totdadi; $i++ ) {
$dado10 = mt_rand(1,10);
$listadadi[] = $dado10;
if ($dado10 >= $difficolta) {
$successi++;
}
}
// Uniamo la lista in una stringa usando uno spazio per separare i valori
$testodado = implode(' ', $listadadi);
Fino a qui, la situazione e' identica a quello che faceva il codice prima. A differenza di prima, pero', adesso abbiamo anche $listadadi che ha in memoria il valore di ogni singolo dado.
Mettiamo quindi che io voglia ordinare i dadi per valore e poi voglia anche decidere di colorarli in base al loro risultato. Mi bastera' aggiungere di seguito l'eventuale blocco di codice per farlo:
// ordiniamo i dadi dal valore piu' grande al piu' piccolo
rsort($listadadi);
// Adesso li voglio colorare in base al risultato ottenuto
$listadadicolorati = array_map(function($die) use($difficolta) {
// Rosso se zero
if ($die === 0) {
return "<span style=\"color:red\">{$die}</span>";
// Verde se 10
} elseif ($die === 10) {
return "<span style=\"color:green\">{$die}</span>";
// Blu se supera la difficolta' prevista
} elseif ($die >= $difficolta) {
return "<span style=\"color:blue\">{$die}</span>";
}
// nessuno dei casi di prima, ritorniamo il valore del dado cosi' com'e'
return $die;
}, $listadadi);
// Alla fine sovrascriviamo $testodado per applicare le modifiche salvate in $listadadicolorati
$testodato = implode(' ', $listadadicolorati);
E via dicendo, continuando a sfruttare l'elenco $listadadi possiamo applicare ogni genere di modifica ci possa venire in mente su quei dadi.
Per concludere, la versatilita' di questo approccio si riassume in tre punti principali:
1. Non si va a toccare piu' il codice base che produce il funzionamento di partenza (rischiando potenzialmente di far danno);
2. E' possibile annullare delle funzionalita' aggiunte semplicemente commentando il blocco interessato, senza la necessita' di dover mettere mano a nomi di variabili o controlli in altri punti del codice per tornare a "far quadrare le cose";
3. I vari blocchi di codice, occupandosi di un compito per volta, restano piccoli e diventano ben riconoscibili, rendendo piu' semplice la comprensione di quanto c'e' scritto e l'ispezione del codice in caso di problemi.
My 2 cents
30/08/2018 18:18:26
Con la soluzione via array può anche decadere la mia soluzione $successi: quando hai l'array vai a contarci i valori che rispettano il requisito >6 e via, senza usare una nuova variabile.
Discussione seguita da
Pagine → 1
Rispondi alla Discussione Segui Discussione Inoltra Discussione Forum Programmazione, Open Source e Hosting Elenco Forum
Articoli, Interviste e altre Risorse!
Raja Dunia ↗
RAID Shadow Legends ↗
War Thunder ↗
Foundation Galactic Frontier ↗
World of Tanks ↗