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
Om te bepalen wie wint..

De een heeft 80% kans om te winnen, de andere 20:

wanneer uit de rand(0,100) een getal komt tussen de 0 en 80, wint de een, wanneer die tussen de 80 en 100 zit, dan wint de ander. Capiche?
en er om verder op te gaan, ik heb alles laten echo'en.. en dit komt eruit:

Winkansen:

Henk: 33.3% met 15 punten
Piet: 66.7% met 30 punten

Winnaar: Piet
Gekozen nummer: 94

edit: ik had het nog over het eerste systeem met de 100/($totaal/$player1)
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 )
Wat is het verschil met mijn voorbeeldje? Ik zie zo 1-2-3 geen verschillen. Tevens is de vraag wat je met 'kan het zo?' bedoelt.
Frank schreef op 23.06.2006 22:00
Wat is het verschil met mijn voorbeeldje? Ik zie zo 1-2-3 geen verschillen. Tevens is de vraag wat je met 'kan het zo?' bedoelt.


zie bovenaan wat voor commentaar ik heb gepost in het script.
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.
ik heb al naar tutorials op php.net zitten kijken/zoeken/lezen enal. maar ik kom er niet uit hoe mysql_fetch_assoc() werkt.

kan iemand een klein voorbeeldje posten ofzo? ik volg het namelijk niet...
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

Reageren