Beste mensen van de prachtige site: PHPHULP :p

Ik ben nu bezig met een war-game. ( nee geen criminals :p )

En dan is het zo:
je hebt 2 mensen die vechten
player1 en player2 ( klinkt logisch )
en dan heb je dus bijvoorbeeld zo:

Player 1 heeft 20 attack_power_punten en 10 verdedig dingen
Player 2 heeft 30 attack_power_punten en 18 verdedig_punten...

Nou, je ziet dus meteen dat player 2 beter is.
Maar dan wil ik maken
dat er een soort van 'winpercentage' word berekent

Dan word er gekeken wie er beter is, en hoeveel 'kans' je dan hebt om te winnen.

Stel er komt dan uit dat player1 80% kans heeft om te winnen, dan word er een getal tussen de 1 en de 100 ( met rand() ) gemaakt, en als het getal dan tussen de 1 en de 80 is, dat dan player1 wint, als het getal dan tussen de 81 en 100 is, wint player2

Dan word er dus gebruik gemaakt van die winstpercentages.
En alles staat ook in mijn database, maaar: ik heb geen flauw idee hoe ik dat dan moet maken!? dus: hoe maak ik dat hij die percentages uitrekent, en hoe maak ik dat hij daaraan de rand() functie aanpast?

Ik heb al geprobeert,, maar kom er niet uit.

MvG,
Niek
de tabel:



CREATE TABLE `game_members` (
  `id` int(5) NOT NULL auto_increment,
  `naam` text NOT NULL,
  `pass` text NOT NULL,
  `weapon` int(2) NOT NULL,
  `punten` int(9) NOT NULL,
  `level` int(5) NOT NULL,
  `defence` int(9) NOT NULL,
  PRIMARY KEY  (`id`)
) 
ligt eraan hoe zwaar je alles meetelt per onderdeel
dat kan ik denk ik zelf wel uitvinden, het gaat me om de basis. met een voorbeeldje ofzo.
op basis van 2 stats :

<?

$player1 = 'Henk';
$player2 = 'Piet';

$p1ap = 15;
$p2ap = 30;

$p1def = 10;
$p2def = 20;

//Totaal attackpower en defence
$aptot = $p1ap + $p2ap;
$deftot = $p1def + $p2def;

//Kans per stuk
$p1ap_kans = 100/($aptot/$p1ap);
$p2ap_kans = 100/($aptot/$p2ap);

$p1def_kans = 100/($deftot/$p1def);
$p2def_kans = 100/($deftot/$p2def);

//Output
echo 'Kans '.$player1.': '.$p1ap_kans.'[AP] en '.$p1def_kans.'[DEF]<br>';
echo 'Kans '.$player2.': '.$p2ap_kans.'[AP] en '.$p2def_kans.'[DEF]<br>';

?>


ok, ik zal em testen.
Bedankt!
Maareehhh, als iemand nu wint, richt die dan geen schade aan?
dat is allemaal van latere zorg ;)

maar ik heb nu dit:


<?

$player1 = 'Henk';
$player2 = 'Piet';

$p1ap  = 28;
$p2ap  = 32;

$p1def = 18;
$p2def = 24;

$p1tot = $p1ap + $p1def;
$p2tot = $p2ap + $p2def;

//Totaal attackpower en defence
$ptot = $p1tot + $p2tot;

//berekening
$p1_kans = round(100/($ptot/$p1tot));
$p2_kans = round(100/($ptot/$p2tot));

//Output
echo '<table>';
echo '<tr><td>Kans van '.$player1.':</td><td>'.$p1ap.'[AP] </td><td>'.$p1def.'[DEF] </td><td>win kans: '.$p1_kans.'</td></tr>';
echo '<tr><td>Kans van '.$player2.':</td><td>'.$p2ap.'[AP] </td><td>'.$p2def.'[DEF] </td><td>win kans: '.$p2_kans.'</td></tr>';
echo '</table>';
$ding = rand(1,100);
?> 


hoe moet ik dan maken dat ie dus kijkt welk cijfer? dus in dit geval cijfer 1 tot 45: player 1 wint.
cijfer 46 tot 100 player 2 wint.
Hoe moetik dat dan makne? daar kom ik niet uit...
Misschien heb je hier nog wat aan:
<?php
function bool_rand($procent)
{
if ($procent >= 0 && $procent <= 100) {
$toeval = mt_rand(0, 100);
return $toeval <= $procent;
} else {
return false;
}
}
?>
die functie geeft true of false terug op basis van een percentage.
Jan Koehoorn schreef op 23.06.2006 16:47
Misschien heb je hier nog wat aan:
<?php
function bool_rand($procent)
{
if ($procent >= 0 && $procent <= 100) {
$toeval = mt_rand(0, 100);
return $toeval <= $procent;
} else {
return false;
}
}
?>
die functie geeft true of false terug op basis van een percentage.


Hoe moet ik die dan in mijn script plaatsen? ik werk namelijk nooit met functies..
In principe heb je hier alleen maar het percentage van 1 player nodig:
trouwens:
100/($p1tot/$p2tot) klopt niet, want als je $p1tot groter is dan $p2tot, komt er een getal onder de 1 uit ($p1tot/$p2tot). 100/0.5=200, dus dat klopt niet, beter zo:
($p2tot/$p1tot)*100
Verder zie dit stukje voorbeeldcode.
<?php
$p1_kans=round(($p2tot/$p1tot)*100);

$toeval=mt_rand(0,100);

if($toeval <= $p1_kans){
//p1 wint
}
else {
//p2 wint
}
?>

edit:
Bovenstaande stukje over percentage berekenen leek me niet zo duidelijk, herkansing:

<?php
$p1_tot=20;
$p2_tot=40;
$ptot=$p1_tot+$p2tot; // 60

// oude berekening
$kans_p1=100/($p1tot/$ptot);
// krijg je 100/0.333 --> retourneerd 300% kans dat player 1 wint, dat wil je niet

// nieuwe berekening:
$kans_p1=($ptot/$p1tot)*100;
//krijg je 0.3333*100 -> 33%, dat lijkt logischer
?>

Reageren