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?
In mijn code zet ik de aanval tegenover de verdediging. Dus een aanval van 20 tegenover een verdediging van 18. Deze 2 waardes tel ik bij elkaar op, 38, en pluk hieruit een random getal. Is dit getal kleiner of gelijk aan 20 (de aanval) dan heeft de aanvaller gewonnen, anders de verdediger. De verliezer heeft de nodige klappen geincasseerd en zal bij diverse onderdelen punten verliezen.
Vervolgens worden de rollen omgedraaid en valt de verdediger aan (met zijn aanvalskracht) en moet de aanvaller gaan verdedigen.
Door het verlies van punten en de verschillen in de aanvals- en verdedigingskracht, kun je de uitkomsten beinvloeden.
Uiteraard zijn er vele variaties en uitbreidingen mogelijk.
kan het zo?:
( ik werk namelijk nooit met arrays )
<?php
$spelers = array(
'a' => array(
//hier info over a uit de db halen
'aanval' => 20,
'verdediging' => 10,
'health' => 100
),
'b' => array(
//hier info over b uit de db halen
'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;
?>
Ik weet niet of het zal werken, want: ik zit wel midden in een array.?
edit:
( ik heb het nu over het bovenste gedeelte van het script, helemaal bovenaan, waar die arrays worden geset ) (daar waar dat commentaar staat, daar heb ik het over )
Je bedoelt dit: //hier info over a uit de db halen
Dat lijkt mij een open deur, maar goed.
Verder heb ik je al verteld hoe je het kunt doen. Met mysql_fetch_assoc() maak je namelijk al een array aan. Het is dus zinloos/overbodig om deze array dan nog eens in de array van mijn voorbeeld te gaan stoppen. Dat maakt het hopeloos ingewikkeld.
Ga eerst eens kijken welke informatie je in de database hebt staan, haal dit op en maak met mysql_fetch_assoc() eens een fraaie array aan. Wanneer je dat hebt, kun je verder.
Voorbeeldje:
<?php
// maak eerst verbinding met de database, en dan:
$query = "SELECT speler, aanval, verdediging, health FROM spelers WHERE speler IN ('a', 'b')";
$result = mysql_query($query) or die(mysql_error().' '.$query);
$row = mysql_fetch_assoc($result);
// Nu staat alles in de array $row en kun je daar wat mee gaan doen.
?>
Succes
Ps. Foutafhandeling moet beter, mag je ook zelf doen.
<?php
include ('database.php');
// maak eerst verbinding met de database, en dan:
$query = "SELECT naam,attack,defence FROM game_members WHERE naam IN ('a', 'b')";
$result = mysql_query($query) or die(mysql_error().' '.$query);
$row = mysql_fetch_assoc($result);
// Nu staat alles in de array $row en kun je daar wat mee gaan doen.
echo $row;
$spelers = array(
'a' => array(
'aanval' => $row[a]['attack'],
'verdediging' => $row[a]['defence'],
'health' => 100
),
'b' => array(
'aanval' => $row[b]['attack'],
'verdediging' => $row[b]['defence'],
'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;
?>
dat stuk code heb ik nu, IK zie niet wat er fout aan is, ik weet wel dat de pagina on-eindig lang doorgaat!
weet iemand wat ik nu (weer) fout heb gedaan? :p