Avatar billede mjl Nybegynder
04. november 2003 - 21:39 Der er 17 kommentarer og
1 løsning

Lotto agtigt spil - hvordan gør jeg?

Nu har jeg siddet et par dage, for at finde ud af, hvordan jeg laver følgende spil...

Man skal vælge op til 10 tal ud af 16 mulige (1-16) - disse skulle så lagres i MySQL

Når flere brugere så har valgt, og spillet er færdigt - vælges 4 tal - og derefter tjekkes DB'en for brugere der ramte disse 4 tal...

MEN HVORDAN - Jeg er gået totalt blank!!!! Please hjælp!

Hvordan smidder jeg det i DB'en og hvordan tjekker jeg efterfølgende?
Avatar billede mjl Nybegynder
04. november 2003 - 21:55 #1
Flere points kan komme på tale - uden problemer! :o)
Avatar billede mjl Nybegynder
04. november 2003 - 21:58 #2
Nogen der kan hjælpe?
Avatar billede ztyxx Nybegynder
04. november 2003 - 22:00 #3
det får du nok ikke for bare point, tror at du skal betale dig for det, da det kan vise sig at være en mase kode der skal lires af...
Avatar billede detox Nybegynder
04. november 2003 - 22:01 #4
Jeg har en idé om at du kan bruge felttypen SET til noget i den forbindelse.
Avatar billede mjl Nybegynder
04. november 2003 - 22:01 #5
Jamen : jeg skal ikke ha' al koden - bare et spark i den rigtige retning!!!
Avatar billede mjl Nybegynder
04. november 2003 - 22:01 #6
SET???
Avatar billede detox Nybegynder
04. november 2003 - 22:03 #7
Ja, med SET kan du med et felt repræsentere tallene fra 1-16 binært, så når du skal tjekke de 4 rigtige behøver du bare at tjekke et felt for den binære værdi.
Avatar billede mjl Nybegynder
04. november 2003 - 22:04 #8
...tror du, du kan forklare det lidt mere simpelt? :o)
Avatar billede detox Nybegynder
04. november 2003 - 22:11 #9
Jeg kan da prøve. SET kan indeholde op til 64 værdier. Disse er repræsenteret binært. Det vil sige med tallene: 1,2,4,8,16,32,64,128,osv... Hvis fx tallene fra 1-4 skal tjekkes binært tjekker man summen af de binære værdier. Altså 1+2+4+8=15, "SELECT * FROM tabel WHERE tal & 15"
Avatar billede mjl Nybegynder
04. november 2003 - 22:11 #10
Tror jeg har læst mig til en forklaring på SET - jeg ser lige på det, og vender tilbage!
Avatar billede detox Nybegynder
04. november 2003 - 22:15 #11
Man kan omregne til binære tal på denne måde: 2^0, 2^1, 2^2, 2^3, 2^4, osv...
Avatar billede detox Nybegynder
04. november 2003 - 23:17 #12
Her et eksempel. Den første fil smider 30 forskellige brugere med hver 8 tilfældige tal ind i tabellen (bare for at have lidt at arbejde med).
Den anden fil udtrækker 4 tal og udvælger 'vinderne' og viser resultatet. Den gennemløber dette 30 gange.

CREATE TABLE lotto (
  id smallint(5) unsigned NOT NULL auto_increment,
  bruger varchar(32) NOT NULL default '',
  tal set('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p') NOT NULL default '',
  dato datetime NOT NULL default '0000-00-00 00:00:00',
  PRIMARY KEY  (id)
) TYPE=MyISAM

----------
test1.php:
----------

<?
require ('connect.inc.php');// Forbindelse til din database
function LavPass($len=8) {
  return substr(md5(uniqid(mt_rand(), true)),0,$len);
}
function FindTal($antal=4) {
    $alle_tal = range(1,16);
    shuffle($alle_tal);
    $res = 0;
    for ($i=0;$i<$antal;$i++) {
        $tal = array_pop($alle_tal)-1;
        $res += pow(2, $tal);
    }
    return $res;
}
for ($i=0;$i<30;$i++) {
    $bruger = LavPass();
    $tal = FindTal(8);
    $query = "insert into lotto set bruger='$bruger', tal=$tal, dato=now()";
    mysql_query($query) or die(mysql_error());
}
?>

----------
test2.php:
----------

<?
require ('connect.inc.php');// Forbindelse til din database
function LavPass($len=8) {
  return substr(md5(uniqid(mt_rand(), true)),0,$len);
}
function FindTal($antal=4) {
    $alle_tal = range(1,16);
    shuffle($alle_tal);
    $res = array();
    for ($i=0;$i<$antal;$i++) {
        $tal = array_pop($alle_tal)-1;
        echo $tal." - ";
        $res[$i] = pow(2, $tal);
    }
    echo "<br />";
    return $res;
}
for ($i=0;$i<30;$i++) {
    $tal = FindTal();
    $query = "select bruger from lotto where tal&$tal[0] && tal&$tal[1] && tal&$tal[2] && tal&$tal[3]";
    $res = mysql_query($query) or die(mysql_error());
    if (mysql_num_rows($res)>0) {
        while ($row = mysql_fetch_assoc($res)) {
            echo "Tillykke ".$row['bruger']." Nr.: ".$i."<br />";
        }
    }
}
?>
Avatar billede detox Nybegynder
04. november 2003 - 23:19 #13
function LavPass($len=8) {
  return substr(md5(uniqid(mt_rand(), true)),0,$len);
}

behøver naturligvis ikke være i 'test2.php'.
Avatar billede detox Nybegynder
04. november 2003 - 23:24 #14
Jeg ser lige at man skal bruge srand() før shuffle(), så der skal indsættes denne linie i de to funktioner:

    srand((float)microtime()*1000000);
før:
    shuffle($alle_tal);
Avatar billede detox Nybegynder
05. november 2003 - 01:36 #15
<?
require ('connect.inc.php');// Forbindelse til din database
function FindTal($antal=4) {
    $alle_tal = range(1,16);
    srand((float)microtime()*1000000);
    shuffle($alle_tal);
    $res = array();
    for ($i=0;$i<$antal;$i++) {
        $tal = array_pop($alle_tal)-1;
        $res[$i] = (1 << $tal);
    }
    sort($res, SORT_NUMERIC);
    return $res;
}
$out = "";
for ($i=0;$i<30;$i++) {
    $tal = FindTal();
    $out .= "Uge ".($i+1).": Vindertal: ".strlen(decbin($tal[0]))." - ".strlen(decbin($tal[1]))." - ".strlen(decbin($tal[2]))." - ".strlen(decbin($tal[3]))."<br />";
    $query = "select bruger, tal from lotto where tal&$tal[0] && tal&$tal[1] && tal&$tal[2] && tal&$tal[3]";
    $res = mysql_query($query) or die(mysql_error());
    if (mysql_num_rows($res) == 0) {
        $out .= "<font color='#CC3300'>Ingen vindere i denne uge!</font>";
    } else {
        while ($row = mysql_fetch_assoc($res)) {
            $out .= "Tillykke ".$row['bruger']."! - Dine tal: ".$row['tal']."<br />";
        }
    }
    $out .= "<hr />";
}
echo $out;
?>
Avatar billede detox Nybegynder
05. november 2003 - 01:37 #16
Hov musetasten smuttede!
Du får lige en opdateret version, så håber jeg du kan bruge det til noget:

CREATE TABLE lotto (
  id smallint(5) unsigned NOT NULL auto_increment,
  bruger varchar(32) NOT NULL default '',
  tal set('1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16') NOT NULL default '',
  dato datetime NOT NULL default '0000-00-00 00:00:00',
  PRIMARY KEY  (id)
) TYPE=MyISAM

---------
test1.php
---------

<?
require ('connect.inc.php');// Forbindelse til din database
function LavPass($len=8) {
  return substr(md5(uniqid(mt_rand(), true)),0,$len);
}
function FindTal($antal=4) {
    $alle_tal = range(1,16);
    srand((float)microtime()*1000000);
    shuffle($alle_tal);
    $res = 0;
    for ($i=0;$i<$antal;$i++) {
        $tal = array_pop($alle_tal)-1;
        $res += (1 << $tal);
    }
    return $res;
}
for ($i=0;$i<30;$i++) {
    $bruger = LavPass();
    $tal = FindTal(8);
    $query = "insert into lotto set bruger='$bruger', tal=$tal, dato=now()";
    mysql_query($query) or die(mysql_error());
}
?>

---------
test2.php
---------

<?
require ('connect.inc.php');// Forbindelse til din database
function FindTal($antal=4) {
    $alle_tal = range(1,16);
    srand((float)microtime()*1000000);
    shuffle($alle_tal);
    $res = array();
    for ($i=0;$i<$antal;$i++) {
        $tal = array_pop($alle_tal)-1;
        $res[$i] = (1 << $tal);
    }
    sort($res, SORT_NUMERIC);
    return $res;
}
$out = "";
for ($i=0;$i<30;$i++) {
    $tal = FindTal();
    $out .= "Uge ".($i+1).": Vindertal: ".strlen(decbin($tal[0]))." - ".strlen(decbin($tal[1]))." - ".strlen(decbin($tal[2]))." - ".strlen(decbin($tal[3]))."<br />";
    $query = "select bruger, tal from lotto where tal&$tal[0] && tal&$tal[1] && tal&$tal[2] && tal&$tal[3]";
    $res = mysql_query($query) or die(mysql_error());
    if (mysql_num_rows($res) == 0) {
        $out .= "<font color='#CC3300'>Ingen vindere i denne uge!</font>";
    } else {
        while ($row = mysql_fetch_assoc($res)) {
            $out .= "Tillykke ".$row['bruger']."! - Dine tal: ".$row['tal']."<br />";
        }
    }
    $out .= "<hr />";
}
echo $out;
?>
Avatar billede mjl Nybegynder
05. november 2003 - 15:55 #17
10.000 tak ... !!!
Avatar billede detox Nybegynder
06. november 2003 - 00:35 #18
Velbekommen c",)
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