Avatar billede feza Nybegynder
23. juli 2009 - 14:52 Der er 10 kommentarer og
1 løsning

hvordan sperare jeg et tal indi forskellige størrelser

jeg har et tal vi kan sige det er 45000
dette tal vil jeg alt efter situationen have delt i 2-5 forskellige størrelser.
er der en "komado" til at gøre dette, eller skal jeg  gå den igennem.
Avatar billede elkoger Nybegynder
23. juli 2009 - 14:57 #1
hvordan dele det?
Avatar billede j4k0b Nybegynder
23. juli 2009 - 15:00 #2
Dit indlæg giver ikke så meget mening. Hvad vil du opnå?
Avatar billede feza Nybegynder
23. juli 2009 - 15:05 #3
sry kan godt se det er formuleret dårligt
det er til et spil jeg er ved at lave
alt efter hvor mange der angriber har de en samlet skade de udgøre fx. 45000
den skal skal dele ud på mellem 1-5 slags forsvarende krigere
jeg finder ud af hvor mange slags der er til stæde fx. 3
nu skal skaden så fordeles random ud over de 3 type soldater.

men hvordan deler jeg så det tal op i 3 tilfældige størrelser
Avatar billede repox Seniormester
23. juli 2009 - 15:30 #4
Hvad med
<?php
        $damage = 45000;
        $forsvar = 3;
       
        while($damage > 0)
        {
            for($i = 1; $i <= $forsvar; $i++)
            {
                $rand = rand(1, $damage);       
                $damage -= $rand;
               
                $forsvarPerson[$i] += $rand;
               
            }
        }
   
        print_r($forsvarPerson);


?>

utestet, men ellers er idéen der...
Avatar billede elkoger Nybegynder
23. juli 2009 - 15:38 #5
Ja det ser nice ud repox, har lige testet det og det giver fine resultater :)

php5 test.php
Array
(
    [1] => 32684
    [2] => 1034
    [3] => 11284
)
Avatar billede feza Nybegynder
23. juli 2009 - 15:42 #6
jeg siger pænt tak og spørg "desværre" lidt dumt om hvordan jeg så giver de 30 points jeg har lovet :)
Avatar billede repox Seniormester
23. juli 2009 - 15:42 #7
Lækkert ;) Rart at se man kan lave noget der virker :p
Avatar billede repox Seniormester
23. juli 2009 - 15:42 #8
Jamen, jeg giver et svar og så accepterer du det, hvis du var tilfreds med min besvarelse.
Avatar billede j4k0b Nybegynder
23. juli 2009 - 17:25 #9
function spreadDmg($totalDmg, $players) {
    $dmgGiven = 0;
    $playerList = array();
    for($i=0; $i<count($players); $i++) {
        if($i == count($players) - 1) {
            $dmg = $totalDmg - $dmgGiven;
        } else {
            $dmg = rand(0, ($totalDmg - $dmgGiven));
        }
        $playerList[] = array($player, $dmg);
        $dmgGiven += $dmg;
    }
    return $playerList;
}
Avatar billede j4k0b Nybegynder
23. juli 2009 - 17:41 #10
Her er en lidt ændret version. har ikke testet det

<?php

function spreadDmg($totalDmg, $players) {
    $dmgGiven = 0;
    $playerList = array();
    for($i=0; $i<count($players); $i++) {
        if($dmgGiven == $totalDmg) {
            $dmg = 0;
        } elseif($i == count($players) - 1) {
            $dmg = $totalDmg - $dmgGiven;
        } else {
            $dmg = rand(0, ($totalDmg - $dmgGiven));
        }
        $playerList[] = array($player, $dmg);
        $dmgGiven += $dmg;
    }
    return $playerList;
}


// test

$players = array('spiller1', 'spiller2', 'spiller3');
$res = spreadDmg(45000, $players);

$total = 0;

foreach($res as $item) {
    list($player, $dmg) = $item;

    print $player .' => '. $dmg;
    print '<br>';

    $total += $dmg;
}

print 'Total: ' .$total;

?>
Avatar billede repox Seniormester
23. juli 2009 - 18:06 #11
@j4k0b:
af ren og skær nysgerrighed, så kunne jeg godt tænke mig om årsagen til dit forslag er om du synes din funktion/kode er mere effektiv/pæn/bedre struktureret end mit forslag?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester