Skocz do zawartości

Skrypt totolotka


Rekomendowane odpowiedzi

Mam za zadanie napisać skrypt totolotka. Wprowadzane liczby mam zapisać w tabeli 'lottery' o strukturze:

id => int(11) auto_increment - id losu

owner => int(11) - id grającego

number1 => tinyint(2)

number2 => tinyint(2)

number3 => tinyint(2)

number4 => tinyint(2)

number5 => tinyint(2)

number6 => tinyint(2)

los => int(11) - koszt zakupu losu (?)

Wprowadzanie danych już mam, odpowiednio filtrowane i zabezpieczone przed wprowadzaniem duplikatów, jednak nie mogę sobie poradzić ze skryptem samego losowania(mam pominąć fakt iż kilka osób trafi takie same cyfry to dzielą się wygraną).

function losuj()
{
//wylosowanie liczb
$arr = array();
while ( count($arr) < 6 ) {
    $x = mt_rand(1,45);
    if ( !in_array($x,$arr) ) 
    { 
        $arr[] = $x; 
    }
}
$wynik=mysql_query("SELECT * FROM lottery");
while($row=mysql_fetch_array($wynik)
{
   //tu sprawdzanie ile trafił liczb, ale jakie??
}
}

W jaki sposób sprawdzać wyniki losowania z bazy aby było najoptymalniej? Skrypt jest odpalany jakimś darmowym cronem więc zależy mi na szybkości działania. Z góry dzięki za pomoc :)

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

Jeśli pętla while losuje liczby uczestnika, a tabela lottery ma wynik... zapisuj w tabeli wynik posortowany, rozdzielony przecinkami, np. 1,5,6,14,32,44, a to co userowi wylosujesz posortuj i zimploduj.

 

sort($x);
$prawidlowe = '1,5,6,14,32,44';

if (implode(',',$x) === $prawidlowe) { /* wygrales */ } else { /* frajer */ }

 

Edit: ah, chcesz sprawdzać ile liczb trafił... no to z kolei explode:

 

$prawilowe = explode(',', '1,5,6,14,32,44');

foreach ($x as $liczba) {
if (in_array($liczba, $prawidlowe)) { echo 'trafiles liiczbe' . $liczba; }
}

Odnośnik do komentarza
Udostępnij na innych stronach

Odwrotnie, tabela lottery ma liczby uczestnika, a pętla while ma wynik losowania do tablicy $arr.

Czyli:

$number[1]=$row['number1'];
$number[2]=$row['number2'];
$number[3]=$row['number3'];
$number[4]=$row['number4'];
$number[5]=$row['number5'];
$number[6]=$row['number6'];

foreach ($number as $trafienie)
{
  if (in_array($trafienie, $arr) { $i++;}
}
echo('Trafiłeś $i liczb!');

A co w przypadku gdy gracz kupi kilka losów z różnymi liczbami i np trafi za 3, za 4 i za 6? Albo w przypadku gdy kupi kilka losów z takimi samymi liczbami i trafi 6? Może jakoś zmodyfikować zapytanie? Żeby nie było że ktoś dostał 4 razy wypłaty całej sumy bo kupił 4 losy i miał farta :P

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

Ale gdy wylosujesz liczby, można sprawdzić ile osób wygrało - nagroda powinna być podzielona pomiędzy wszystkie osoby prawda? Jak dwie osoby wygrywają szóstkę, a pula to 10mln, to każda dostaje 5mln (-10% podatku ofc).

A jak ktoś ma 3, 4 i 6 - no to dostaje za trzy kasę kasę. Mój ojciec tydzień temu miał na jednym kuponie 5 i 3, dostał obie kwoty.

 

Swoją drogą dziwnie to robisz... liczby są losowane jak user wchodzi na stronę? Czyli każdy ma inne?

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

I wtedy chcesz sprawdzić ile osób i co wygrało ? Bez sensu. To użytkownik powinien sobie wejść i sprawdzić ;) Nie mniej korzystając z tego co już dałem, możesz zliczyć ile osób trafiło 6,5,4 lub 3 liczby. Nie jest to otymalne, bo wierszy może być dużo, ale da się.

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...