Avatar billede spidr Nybegynder
17. juli 2003 - 16:20 Der er 17 kommentarer og
1 løsning

Terninge maskine..

Jeg spiller en del RGP på nettet :) Og for at ungå at folk snyder vil jeg lave en terninge maskine på nettet, der gemmer det folk slå i en sql database, men den del klare jeg selv, mit spørgsmål er mere hvordan jeg gør så den der skal slå kan vælge en slags terning, evt. en 6 sidet terning og så giver scriptet et tilfølgit tal mellem 1 og 6 ? eller hvor de kan vælge 2 x 6 sides og så får de et tal mellem 2 og 12 :) Håber der er nogen der har en ide :)
Avatar billede tipsen Nybegynder
17. juli 2003 - 16:24 #1
$terninger = 1; //antal terninger
$oejne = 6;  //antal øjne
$sum = 0;
for ($i=1;$i<$terninger;$i++) {
  $udfald = mt_rand(1,$oejne);
  echo "Terning $i: $udfald<br>\r\n";
  $sum += $udfald;
}
echo "Samlet sum: $sum<br>\r\n";
Avatar billede tipsen Nybegynder
17. juli 2003 - 16:31 #2
function terningemaskine($terninger = 1, $oejne = 6) {
    $udfald = array();
    for ($i=1;$i<$terninger;$i++) {
      $udfald[] = mt_rand(1,$oejne);
    }
    return $udfald;
}

$resultat = terningemaskine();
print_r($resultat);
$resultat = terningemaskine(2,10);
print_r($resultat);
echo 'Sum: ' . array_sum($resultat);
Avatar billede spidr Nybegynder
17. juli 2003 - 17:18 #3
Nummer 1 forstår jeg ude mærket men kan du ikke lige forklare nummer 2?
Vil prøve den med det samme :)
Avatar billede exp Juniormester
17. juli 2003 - 17:27 #4
nummer to ligger som en funktion, hvor du inden for () beskriver i hvilket interval summen skal findes...

$resultat = terningemaskine(); <== giver et tal mellem 1 & 6 (da den er født med det som standard
$resultat = terningemaskine(0,1); <== giver et tal mellem 0 & 1
$resultat = terningemaskine(2,12); <== giver et tal mellem 2 & 12 (hvilket jo er to terninger
$resultat = terningemaskine(3,18); <== tre terninger etc
Avatar billede spidr Nybegynder
17. juli 2003 - 17:40 #5
Oh den må jeg strax prøve :) for den første virkede ikke Den skriver sum 0 hele tiden :D:D
Avatar billede spidr Nybegynder
17. juli 2003 - 17:52 #6
Nu er det sådan at jeg lige slog en 1'er med:
<?php
function terningemaskine($terninger = 1, $oejne = 6) {
    $udfald = array();
    for ($i=1;$i<$terninger;$i++) {
      $udfald[] = mt_rand(1,$oejne);
    }
    return $udfald;
}


$resultat = terningemaskine(2,12);
echo 'Sum: ' . array_sum($resultat);
?>
<--den kode der hehe :) hvordan kan det lade sig gøre? Prøv selv på http://www.goog.dk/terning.php
Avatar billede exp Juniormester
17. juli 2003 - 17:55 #7
Prøv:
<?php
function terningemaskine($terninger, $oejne) {
    $udfald = array();
    for ($i=1;$i<$terninger;$i++) {
      $udfald[] = mt_rand($terninger,$oejne);
    }
    return $udfald;
}


$resultat = terningemaskine(2,12);
echo 'Sum: ' . array_sum($resultat);
?>
Avatar billede spidr Nybegynder
17. juli 2003 - 17:58 #8
Ja så virker den sQ :D:D
Tusind tark :) havde nu ikke regnet med at få et helt script bare en ide :P Men tusind tak :)
Avatar billede tipsen Nybegynder
17. juli 2003 - 18:14 #9
exp: Din fortolkning af funktionen er ikke helt korrekt!

$resultat = terningemaskine(); <== giver et tal mellem 1 & 6 (da den er født med 1 terning og 6 øjne som standard
$resultat = terningemaskine(0,1); <== giver ikke noget tal, da der er 0 terninger at slå med!
$resultat = terningemaskine(2,12); <== giver et tal mellem 2 & 24, da der slås med 2 terninger med hver 12 øjne!
$resultat = terningemaskine(3,18); <== giver et tal mellem 3 og 54, da der slås med 3 terninger som hver har 18 øjne!

Derudover skal funktionen rettes til:

function terningemaskine($terninger = 1, $oejne = 6) {
    $udfald = array();
    for ($i=0;$i<$terninger;$i++) {
      $udfald[] = mt_rand(1,$oejne);
    }
    return $udfald;
}

-så der tages højde for det korrekte antal terninger!

Funktionen returnerer et array, hvor antallet af elementer modsvarer antallet af terninger og indeholder de enkelte udfald. Dette array kan enten bruges til at udskrive de enkelte udfald eller beregne summen af terningekastene!
Avatar billede exp Juniormester
17. juli 2003 - 18:23 #10
... men hvordan vil du så forklare at spidr (og jeg) fik sum: 1 ved 2 terninger?
Avatar billede spidr Nybegynder
17. juli 2003 - 18:48 #11
Jamen det problem har jeg rettet :)

Nu er problemet bare at hvis man slåt med 1 terning så vil den ikke vise noget fordi den ikke kan finde ud af:
$siderne = $tern * $sider;
når der kun slås med en terninge :S
Prøv selv på www.goog.dk/terningen
Hvorfor vil den ikke $siderne = $tern * $sider; når der kun slås med en terninge??
Avatar billede tipsen Nybegynder
17. juli 2003 - 19:38 #12
Jeg kan ikke regne ud, hvad dine variable dækker, men jeg har lige testet:

<?php
function terningemaskine($terninger = 1, $oejne = 6) {
    $udfald = array();
    for ($i=0;$i<$terninger;$i++) {
      $udfald[] = mt_rand(1,$oejne);
    }
    return $udfald;
}
for ($i=0;$i<100;$i++) {
    $resultat = terningemaskine(2,6);
    print_r($resultat);
    echo '- sum: ' . array_sum($resultat) . '<br>';
}
?>

og der bliver kun givet "korrekte" resultater - dvs. summen af de to terninger ligger i intervallet fra 2-12 (begge inkl)
Avatar billede spidr Nybegynder
17. juli 2003 - 20:04 #13
ok min terningresultat.php ser således ud:

<html>
<head>
<link href=snorre.css rel=stylesheet>
<title>goog.dk - Terningen.</title>
</head><body><br><br>
<?php
if ($_POST[action] == "hent_resultat") {
$siderne = $tern * $sider;

function terningemaskine($terninger, $oejne) {
    $udfald = array();
    for ($i=1;$i<$terninger;$i++) {
      $udfald[] = mt_rand($terninger,$oejne);
    }
    return $udfald;
}

$resultat = terningemaskine($tern, $siderne);
echo 'Du slog: ' . array_sum($resultat);
$logfile = 'log.txt';
      if ($logfile) {
      $handle = fopen($logfile,'a');
      if ($handle) {
      fwrite($handle,'<tr><td valign=top>' . $navn . '</td><td valign=top> -' . $tern . '</td><td valign=top> -' . $sider . '</td><td valign=top> -'  . array_sum($resultat) . '</td><td valign=top> -' . $ip . '</td></tr>');
      fclose($handle);}}
}
?>
<br><br><a href=http://www.goog.dk/terningen target=_top>Tilbage</a>
</body></html>

Til den bliver jo så sendt $tern, $nav, $sider og $ip
Men hvis man på www.goog.dk/terningen slår med 1 6 sidet terning så skriver den bare 0 :S hvorfor??
Avatar billede tipsen Nybegynder
17. juli 2003 - 20:35 #14
Fordi du ikke bruger den rettede funktion jeg har angivet ovenfor og derudover kalder du også funktionen forkert idet 2. argument er antal sider pr. terning og ikke det samlede antal sider.
Avatar billede spidr Nybegynder
17. juli 2003 - 20:37 #15
åååh det vil jeg lige prøve :) men din rettede der virker altså ikke i mit eks :S men prøver lige :)
Avatar billede spidr Nybegynder
17. juli 2003 - 20:47 #16
Nu ser det faktisk ud til den virker :)
Avatar billede tipsen Nybegynder
17. juli 2003 - 20:52 #17
Hvorfor er det rettelsen ikke skulle fungere i dit eksempel?
Avatar billede spidr Nybegynder
17. juli 2003 - 21:02 #18
Troede ikke den ville virke på grund af
($terninger = 1, $oejne = 6)
ser ud som om den kun virkede med 6 sidedet terninger :) og i RGP kan man jo ikke rigtig nøjes med 6 sidet terninger :)
Men den virkede også med 10 sidet og alle de andre så det er job are godt :D
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