Back to Top

Gra w PHP

Zadanie polega na napisaniu oprogramowania do przyjmowania zakładów totolotka. Podobne oprogramowanie posiadają urządzenia w tysiącach punktów sprzedaży.

Na potrzeby ćwiczenia przyjmujemy następujące założenia:

  1. Główna funkcja przyjmująca zakład totolotka powinna nazywać się checkNumber.

  2. Funkcja przyjmuje tablicę z 6 liczbami całkowitymi.

  3. Funkcja wyświetla napis “Ilość trafień wynosi x”, gdzie za x powinna zostać podstawiona liczba.

Do wykonania tego zadania potrzebna jest możliwość wylosowania liczby z danego zakresu. Służy do tego celu funkcja wbudowana w bibliotekę standardowo dostępnych funkcji w PHP (podobnie jak funkcja count() ).

Funkcja ta nazywa się rand(). Przyjmuje jako parametry 2 liczby, które są oznaczeniem zakresu z jakiego ma zostać wylosowana liczba. W dokumentacji można odnaleźć szczegółowe informacje na ten temat.

Przykład wylosowania liczby z zakresu od 0 do 10 wygląda następująco:

// Wylosowanie liczby od 0 do 10 i jej wyświetlanie 
echo rand(1,49);

Algorytm rozwiązania zadania

Rozpoczynając pracę nad napisaniem kodu musimy rozbić zadanie na kilka mniejszych.

Mogą to być:

  1. zadanie polegające na wylosowaniu liczby z zakresu 1 - 49 (użycie funkcji rand)

  2. zapisanie wylosowanej liczby w tablicy pod warunkiem, że wcześniej nie została już tam zapisana. W tablicy ma zostać zapisane równo 6 liczb.

  3. ostatnie zadanie polega na sprawdzeniu ile spośród wylosowanych liczb znajduje się w podanej przez użytkownika tablicy

Dobre praktyki mówią aby każde zadanie napisać w oddzielnej funkcji, z których skorzysta funkcja główna checkNumber. Łatwiej w takim wypadku sprawdzić oddzielnie każdy fragment kodu, niż zastanawiać się nad całością.

Nazewnictwo funkcji pomocniczych powinno zostać napisane w j. angielskim za pomocą tzw. cameCase. Oznacza to, że każdy człon nazwy poza pierwszym piszemy bez odstępu z dużej litery np. getRandomNumber(). Jak widać oprócz specyficznej pisowni funkcji od razu po nazwie możemy zakładać jakie funkcja ma przeznaczenie.

Omówmy teraz po kolei wszystkie punkty algorytmu i to jak można je zrealizować.

Ad 1. Do wylosowania liczby użyjemy funkcji rand() podając zakres. Ten punkt więc wiemy jak zrealizować.

Ad 2. Po wylosowaniu liczby zapiszemy ją w tablicy pod kolejnym indeksem używając operatora przypisania. To również już robiliśmy, jednak problem jest tego typu iż liczba ta nie może się powtórzyć. Musimy więc sprawdzić czy wylosowana liczba nie znajduje się już w tablicy. Do tego celu należy wyszukać taką funkcję w dokumentacji używając wyszukiwarki internetowej oraz frazy typu “PHP check if array have value”. Jako jeden z pierwszych elementów w wynikach (wyszukiwarka Google) ukaże się fukcja in_array() – i to jej należy użyć. Sposób użycia oraz to, co funkcja zwraca jest szczegółowo opisany w znalezionej dokumentacji.  

Jako dodatkowa trudność w tym punkcie pojawia się problem wstawienia 6 różnych liczb do tablicy. Z pomocą przychodzi nam pętla while. Sposób jej działania moża opisać następująco:

  1. losuj liczbę

  2. sprawdź czy liczba nie znajduje się w tablicy

  3. jeśli nie znajduje się to ją wstaw (jeśli nie idź dalej)

  4. wykonuj czynności od 1 do 3 aż tablica ,do której wstawiasz liczby nie będzie posiadała 6 elementów

Ad. 3. W tym punkcie należy porównać elementy z tablicy podanej jako parametr do głównej funkcji z wylosowaną tablicą z punktu 2. Do tego celu można użyć znanej nam pętli while lub pokusić się o poznanie nowej pętli - wygodnej do iterowania po tablicy. Jej nazwa to foreach a szczegółowy opis użycia znajduje się w dokumentacji tutaj

 

Ile losowań trzeba wykonać aby trafić 6? 

Rozwiązanie znajdziesz tutaj.