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
ik heb nu dit:

<?
$player1 = 'Player1';
$player2 = 'Player2';

$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>';

$p1_kans=round(($p2tot/$p1tot)*100);
$toeval=mt_rand(0,100);

if($toeval <= $p1_kans){
	echo 'De speler '.$player1.' heeft gewonnen!!';
} else {
	echo 'De speler '.$player2.' heeft gewonnen!!';
}
?> 


Maar speler 1 wint altijd!! ( het zou natuurlijk kunnen zijn dat het 'toeval' is dat die de hele tijd wint, maar ik heb nu onderhand al 100x op [F5] gedrukt...
<?
$player1 = 'Player1';
$player2 = 'Player2';

$p1ap = 28;
$p2ap = 32;

$p1def = 18;
$p2def = 24;

$p1tot = $p1ap + $p1def; // wordt 46
$p2tot = $p2ap + $p2def; // wordt 56

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

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

//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>';

$toeval=mt_rand(0,100);

if($toeval <= $p1_kans){
echo 'De speler '.$player1.' heeft gewonnen!!';
} else {
echo 'De speler '.$player2.' heeft gewonnen!!';
}
?>

Edit:
round(($ptot/$p1tot)*100); Klopt niet, je moet die van de speler delen door totaal, niet totaal door die van de speler.
Hier eentje met 2 spelers die doorvechten tot de dood er op volgt:
<?php

$spelers = array(
'a' => array(
'aanval' => 20,
'verdediging' => 10,
'health' => 100
),
'b' => array(
'aanval' => 30,
'verdediging' => 18,
'health' => 100
)
);

$aanvaller = 'b';
$verdediger = 'a';

$rounds = 0;

// aanval => verdediging => verliezer krijgt minder health, aanval en verdediging
while (($spelers[$verdediger]['health'] > 0) && ($spelers[$aanvaller]['health'] > 0)) {
$total = $spelers[$aanvaller]['aanval'] + $spelers[$verdediger]['verdediging'];
$result = rand(1, $total);

if ($result <= $spelers[$aanvaller]['aanval']) { // aanvaller wint
$spelers[$verdediger]['health'] -= $spelers[$aanvaller]['aanval'];
$spelers[$verdediger]['aanval'] -= 2;
$spelers[$verdediger]['verdediging'] -= 1;
$winner = $aanvaller;
}
else { // aannvaller verliest
$spelers[$aanvaller]['health'] -= $spelers[$verdediger]['verdediging'];
$spelers[$aanvaller]['aanval'] -= 2;
$spelers[$aanvaller]['verdediging'] -= 1;
$winner = $verdediger;
}
$rounds ++;

echo 'Winnaar: '.$winner.' (som:'.$total.' random:'.$result.')'.PHP_EOL;
echo 'Resultaten van deze ronde:'.PHP_EOL;
echo 'Aanvaller '.$aanvaller.' health: '.$spelers[$aanvaller]['health'].PHP_EOL;
echo 'Aanvaller '.$aanvaller.' aanval: '.$spelers[$aanvaller]['aanval'].PHP_EOL;
echo 'Aanvaller '.$aanvaller.' verdediging: '.$spelers[$aanvaller]['verdediging'].PHP_EOL;
echo 'Verdediger '.$verdediger.' health: '.$spelers[$verdediger]['health'].PHP_EOL;
echo 'Verdediger '.$verdediger.' aanval: '.$spelers[$verdediger]['aanval'].PHP_EOL;
echo 'Verdediger '.$verdediger.' verdediging: '.$spelers[$verdediger]['verdediging'].PHP_EOL;
echo '<br />'.PHP_EOL;

// Dit stukje kan beter
$flip_attack = $verdediger;
$flip_defense = $aanvaller;

$aanvaller = $flip_attack;
$verdediger = $flip_defense;
}
echo 'Overall winnaar: '.$winner.PHP_EOL;
echo 'Ronden gespeeld: '.$rounds.PHP_EOL;

?>
het werkt

thnx boys =D
ik loop weer vast:

<?php
session_start();
include ('database.php');
$onaam = 'henk';
$naam = $_SESSION['naam'];
if($_SESSION['suc'] != 1) {
	echo "niet ingelogd";
} else {
		$sql1 = "SELECT naam,weapon,punten,level,defence.attack FROM game_members WHERE naam = '".$onaam."'";
		$res1 = mysql_query($sql1);
		while ($row1 = mysql_fetch_array($res1)) {
			$sql2 = "SELECT naam,weapon,punten,level,defence,attack FROM game_members WHERE naam = '".$naam."'";
			$res2 = mysql_query($sql2);
			while ($row2 = mysql_fetch_array($res2)) {

				$player1 = $row1['naam'];
				$player2 = $row2['naam'];
				$p1ap  = $row1['attack'];
				$p2ap  = $row2['attack'];
				$p1def = $row1['defence'];
				$p2def = $row2['defence'];
				$p1tot = $p1ap + $p1def; 
				$p2tot = $p2ap + $p2def; 
				//Totaal attackpower en defence
				$ptot = $p1tot + $p2tot; 
				//berekening
				$p1_kans = round(($p1tot/$ptot)*100);
				$p2_kans = round(($p2tot/$ptot)*100);

				//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>';

				$toeval=mt_rand(0,100);

				if($toeval <= $p1_kans){
					echo 'De speler '.$player1.' heeft gewonnen!!';
				} else {
					echo 'De speler '.$player2.' heeft gewonnen!!';
				}
			}
		}
	}
?>


dat heb ik nu, en ik krijg dit eruit:


Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\Program Files\xampp\htdocs\game\attack.php on line 11


en ik snap er niks meer van!! :-(
Frank schreef op 23.06.2006 17:12
Hier eentje met 2 spelers die doorvechten tot de dood er op volgt:
<?php

$spelers = array(
'a' => array(
'aanval' => 20,
'verdediging' => 10,
'health' => 100
),
'b' => array(
'aanval' => 30,
'verdediging' => 18,
'health' => 100
)
);

$aanvaller = 'b';
$verdediger = 'a';

$rounds = 0;

// aanval => verdediging => verliezer krijgt minder health, aanval en verdediging
while (($spelers[$verdediger]['health'] > 0) && ($spelers[$aanvaller]['health'] > 0)) {
$total = $spelers[$aanvaller]['aanval'] + $spelers[$verdediger]['verdediging'];
$result = rand(1, $total);

if ($result <= $spelers[$aanvaller]['aanval']) { // aanvaller wint
$spelers[$verdediger]['health'] -= $spelers[$aanvaller]['aanval'];
$spelers[$verdediger]['aanval'] -= 2;
$spelers[$verdediger]['verdediging'] -= 1;
$winner = $aanvaller;
}
else { // aannvaller verliest
$spelers[$aanvaller]['health'] -= $spelers[$verdediger]['verdediging'];
$spelers[$aanvaller]['aanval'] -= 2;
$spelers[$aanvaller]['verdediging'] -= 1;
$winner = $verdediger;
}
$rounds ++;

echo 'Winnaar: '.$winner.' (som:'.$total.' random:'.$result.')'.PHP_EOL;
echo 'Resultaten van deze ronde:'.PHP_EOL;
echo 'Aanvaller '.$aanvaller.' health: '.$spelers[$aanvaller]['health'].PHP_EOL;
echo 'Aanvaller '.$aanvaller.' aanval: '.$spelers[$aanvaller]['aanval'].PHP_EOL;
echo 'Aanvaller '.$aanvaller.' verdediging: '.$spelers[$aanvaller]['verdediging'].PHP_EOL;
echo 'Verdediger '.$verdediger.' health: '.$spelers[$verdediger]['health'].PHP_EOL;
echo 'Verdediger '.$verdediger.' aanval: '.$spelers[$verdediger]['aanval'].PHP_EOL;
echo 'Verdediger '.$verdediger.' verdediging: '.$spelers[$verdediger]['verdediging'].PHP_EOL;
echo '<br />'.PHP_EOL;

// Dit stukje kan beter
$flip_attack = $verdediger;
$flip_defense = $aanvaller;

$aanvaller = $flip_attack;
$verdediger = $flip_defense;
}
echo 'Overall winnaar: '.$winner.PHP_EOL;
echo 'Ronden gespeeld: '.$rounds.PHP_EOL;

?>


die zie ik nu pas,
Hoe kan ik die dan combineren met een mysql systeem?
Je haalt de gegevens op uit de database en met mysql_fetch_assoc() ga je fetchen. Vervolgens in bovenstaand script de juiste variabelen veranderen (een andere naam geven) en klaar ben je.

De array die ik heb gemaakt met de gegevens van de spelers, kun je zien als een mini-database.
niek schreef op 23.06.2006 15:28
Nou, je ziet dus meteen dat player 2 beter is.

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

Beetje kromme redenatie. Nu heeft player1 vier keer zoveel kans om te winnen terwijl die de zwakste is.

Edit: Typo
haha, scherp opgemerkt SanThe, zo had ik het nog niet gelezen. Maargoed, we komen er wel uit :)
waarschijnlijk ligt het aan mij hoor, maar je bent hier bezig met kansberekening, vanwaar dan die rand() functie?

Reageren