Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Losowanie lotto.
Macios25
post
Post #1





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 31.07.2011

Ostrzeżenie: (0%)
-----


Witajcie.

Próbuje nauczyć się na własną rękę pisać skrypty w php. Zapoznałem się z podstawami jednak nie zawsze wiem czy wykorzystuje zdobytą w najprostszy sposób. Dlatego chciałbym abyście rzucili okiem na mój skrypt losowania lotto
i powiedzieli co mogłem zrobić lepiej i w jaki sposób.

  1. <?php
  2. $zakres = array(1=>1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49);
  3. // zakres liczb z jakich ma być losowane 6 cyfr.
  4.  
  5. $wprowadzone="3,9,7,2,22,12";
  6. // Liczby wprowadzone przez użytkownika. ( Muszą one być odzielone odcinkami. )
  7.  
  8. if(!preg_match('#^[0-9,}]+$#ui', $wprowadzone)) {
  9. // tą linijkę kodu ukradłem z innego skryput. Nie mogę zrozumieć wyrażeń warunkowych, nie wiem czy użyłem tej funkcji prawidłowo.
  10. echo("<br>Blad! Musisz podac 6 liczb z zakresu od 1 do 49, odzielonych za pomoca przecinka!<br>");
  11. // W wypadku gdy użytkownik poda niedozwolony ciąg znaków zostanie wyśwetlony komunikat o błędzie.
  12. die();
  13. // Zostanie również wtedy zakończone działanie skryptu.
  14. }
  15.  
  16.  
  17. $wprowadzone =explode(",",$wprowadzone);
  18. // Każda liczba odzielona przecinkiem zostaje osobno przypisana do tablicy wporowadzone.
  19.  
  20.  
  21.  
  22. for ($i = 0; $i<= 5; $i++) {
  23. if ($wprowadzone[$i]>49 or $wprowadzone[$i]<1 ){
  24. echo("Możesz podawać tylko liczby zakresu od 1 do 49!<br>");
  25. die();
  26. }
  27. // Pętla sprawdza czy podane liczby pochodza z zakresu od 1 do 49;
  28.  
  29.  
  30. }
  31.  
  32.  
  33. echo("Wybrane przez Ciebie liczby to: <br>");
  34. for ($i = 0; $i <= 5; $i++) {
  35. echo($wprowadzone[$i]." ");
  36. }
  37. // Wypisuje 6 wybranych przez użytkownika liczb.
  38.  
  39.  
  40.  
  41.  
  42. echo("<br>Wylosowano:<br>");
  43.  
  44. for ($i = 1; $i<= 6; $i++) {
  45. // pętla wykona się 6 razy, za każdym razem wylosuje jedną liczbę i umieści ją w tablicy losuj
  46. $losuj[$i] = array_rand($zakres, 1);
  47. // losuje liczbę z tablicy zakres.
  48. unset($zakres[$losuj[$i]]);
  49. // usuwa wylosowaną liczbę z tablicy zakres - każada liczba ma być unikalna.
  50. echo($losuj[$i]." ");
  51. // Zwaraca wylosowaną liczbę.
  52. }
  53.  
  54.  
  55.  
  56.  
  57.  
  58. $licznik =0;
  59.  
  60.  
  61. for ($i = 0; $i <= 5; $i++) {
  62. if (in_array($wprowadzone[$i], $losuj)) {
  63. $licznik++;
  64. }
  65. }
  66. //Porównuje liczby wylosowane z liczbami podanymi przez użytkownika.
  67.  
  68.  
  69.  
  70. echo ("<br>Trafione: ".$licznik);
  71. // Wyświelta liczbę trafień.
  72.  
  73.  
  74.  
  75.  
  76.  
  77.  
  78. ?>
  79.  
  80.  
  81.  


Chyba trochę przesadziłem z komentarzami...

Proszę o sugestie i pozdrawiam
Maciek.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Macios25
post
Post #2





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 31.07.2011

Ostrzeżenie: (0%)
-----


Dziękuje za rady. Zastosowałem wszystkie i kod stał się dużo bardziej przejrzysty, a do tego poznałem kilka przydatnych funkcji. (IMG:style_emoticons/default/wink.gif)

Poprawiony kod:


  1. <?php
  2.  
  3.  
  4. $zakres = range (1, 49);
  5. // funkcja renge() generuje tablicę $zakres z, której następnie ma być wybrane 6 liczb.
  6.  
  7.  
  8. $wprowadzone="1,2,3,4,5,6";
  9. // Liczby wprowadzone przez użytkownika. ( Muszą one być odzielone odcinkami. )
  10.  
  11. if(!preg_match('#^[0-9,}]+$#ui', $wprowadzone)) {
  12. // tą linijkę kodu ukradłem z innego skryput. Nie mogę zrozumieć wyrażeń warunkowych, nie wiem czy użyłem tej funkcji prawidłowo.
  13. die("<br>Blad! Musisz podac 6 liczb z zakresu od 1 do 49, odzielonych za pomoca przecinka!<br>");
  14. // zostanie wyświetlony odpowiedni komunikat i działaie skryptu zostanie zakończone.
  15. }
  16.  
  17.  
  18. $wprowadzone =explode(",",$wprowadzone);
  19. // Każda liczba odzielona przecinkiem zostaje osobno przypisana do tablicy wporowadzone.
  20.  
  21.  
  22.  
  23. for ($i = 0; $i<= 5; $i++) {
  24. if ($wprowadzone[$i]>49 || $wprowadzone[$i]<1 ){
  25. die("Możesz podawać tylko liczby zakresu od 1 do 49!<br>");
  26. }
  27. }
  28. // Pętla sprawdza czy podane liczby pochodza z zakresu od 1 do 49, zostaje wyświetlony odpowiedni komunikat, po czym działanie skryptu zostaje zatrzymane.;
  29.  
  30.  
  31.  
  32.  
  33.  
  34. echo("Wybrane przez Ciebie liczby to: <br>");
  35. for ($i = 0; $i <= 5; $i++) {
  36. echo($wprowadzone[$i]." ");
  37. }
  38. // Pętla Drukuje wybrane przez użytkownika liczby.
  39.  
  40.  
  41. echo("<br>Wylosowano:<br>");
  42. $wylosowane = array_rand($zakres, 6);
  43. $licznik =0;
  44. // Funkcja array_rand() losuje 6 liczb z tablicy $zakres. ( bez zwracania. )
  45.  
  46.  
  47.  
  48. foreach($wylosowane as $klucz=> $wylosowana ) {
  49. echo ($wylosowana." ");
  50. if (in_array($wylosowana,$wprowadzone)) {
  51. $licznik++;
  52. }
  53. }
  54. // Pętla foreach drukuje wzlosowane liczby. Sprawdza czy każda z kolejna znajduje się w tablicy $wprowadzone. Jeśli tak zwiększa licznik o 1.
  55.  
  56.  
  57. echo ("<br>Trafione: ".$licznik);
  58. ?>


Trapi mnie jeszcze jedne rzecz. Użytkownik może podać 6 takich samych liczb, przez co prawdopodobieństwo na
trafienie "szóstki" byłoby bardzo duże ( 1 do 49 ).
Do sprawdzania czy wszystkie liczby są różne mógłbym użyć funkcji in_array. Jednak musiałbym sprawdzać każdy element z osobna i porównywać go do całej tablicy. Czy nie ma jakiegoś bardziej wydajnego i odpowiedniego wyjścia
w tej sytuacji?

Jeszcze raz dziękuje za zainteresowanie i udzieloną pomoc.

Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 4.10.2025 - 15:00