Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Gra zabawa w quizy
Forum PHP.pl > Forum > Przedszkole
Poker
Witam,

Mam pytanie do ekspertów otóż tworzę "grę, zabawę" dla dzieci w rozwiązywanie quizów.
I niestety mam problem związany z wyświetlaniem ostatecznego wyniku.

Opis:
Każdy quiz ma 10 pytań i 4 odpowiedzi za które otrzymuje się punkty(użytkownik ich nie widzi, są dla mnie w celach ustalenia odpowiedniej odpowiedzi).

Tak więc użytkownik rozwiązuje quiz po czym zgarnia sumę punktów dla przykładu 67 (maksymalnie do uzbierania jest 100pkt minimum 10pkt)
Teraz jeżeli wiem że użytkownik uzbierał sumę punktów 67 chciałbym przydzielić mu gotową odpowiedź przygotowaną dla wszystkich którzy zdobyli punkty z przedziału 66-70.

I tutaj pojawia się mój problem że nie wiem w jaki sposób to podłapać że jeżeli miał sumę 67 to mieści się w granicy 65-70.
Drugi problem jak zrobić to w bazię, aby wyszukać odpowiednią odpowiedź z tego przedziału.

Przykładowo mam bazę "odpowiedzi" w której są pola id_quizu, przedział punktowy (np. 11-15, 16-20, itd.), gotowa odpowiedź.

Teraz chciałbym to jakoś połączyć lecz nie potrafię złączyć tego wszystkiego.

Wpadłem na pomysł mało funkcjonalny lecz skuteczny, przedział punktowy zamienić na ilosc punktów i stworzyć 5 rekordów z odpowiednimi id 11,12,13,14,15 i wpisać te same odpowiedzi. Wtedy szukałbym SELECT odpowiedz FROM odpowiedzi WHERE id_quizu=XX AND punkty=XX niestety to rozwiązanie jest ostatecznością.

Tak więc z góry dziękuje wszystkim za pomoc smile.gif
Skie
Jeżeli przedziały punktowe nie zmieniają się, możesz zastosować taki prosty skrypt:

  1. $arr = array(0,20,40,60,80);
  2. $min_point_lvl = false;
  3. foreach ($arr as $val) {
  4. if ($current_point_lvl >= $val) { $min_point_lvl = $val; }
  5. }


Gdzie:
$min_point_lvl - zmienna, w której zostanie zawarty minimalny próg punktowy danego przedziału, za pomocą którego będziesz szukał odpowiedzi w bazie danych - np. dla przedziału 40-59, jej wartość wyniesie 40.
$arr - tablica zawierająca minimalne wartości przedziałów, w przykładzie jest: 0-19, 20-39, 40-59, 60-79, 80+
$current_point_lvl - ilość zdobytych pkt przez uczestnika

Jest to pisany skrypt na szybko i niezbyt wymyślny, ale być może wystarczy.


Możesz także zastosować inny sposób:
Pobrać z bazy rekordy z odpowiedziami z progiem punktowym wyższym lub równym ilości zdobytych punktów - tj. WHERE required_pts>=$current_point_lvl, dodać sortowanie ORDER BY required_pts ASC LIMIT 1

Też powinno zadziałać, ale lepszy był poprzedni sposób jak dla mnie.
Poker
Bardzo dziękuje za odpowiedź, właśnie zapomniałem dodać iż każdy quiz będzie miał zróżnicowaną ilość stałych odpowiedzi.

Każdy quiz to zdobywanie punktów w przedziale 10 do 100

Dla przykładu pierwszy quiz: użytkownik zdobywa 67 punktów. Tutaj będzie 18 stałych odpowiedzi (jedna odpowiedź dla każdych 5 punktów) czyli przedziały :

10-15
16-20
21-25
26-30
[...]
96-100

Drugi quiz będzie troszkę inaczej brany pod uwagę dostosuję punkty za każde pytanie w taki sposób aby celowo wygenerować daną odpowiedź, konkretny przykład :

"Jaki styl do Ciebie pasuję"
Tutaj pytania będą miały taką ilość punktów aby w przedziale:
10-20 była odpowiedź EMO
21-30 odpowiedź SKATE
i tak dalej...

Mógłbym manipulować punktami, aby użytkownik uzyskał odpowiedź zgodną z tym co zaznacza.

Tak więc wszystkie odpowiedzi dla drugiego przykładu zawierające np lubię HIP-HOP, ulubiony sport Deskorolka miałby punktację 3 tak aby udzielając wszystkich odpowiedzi pasujących do danego stylu wypadła odpowiedź której oczekuję lub przybliżona.

Ciężko mi jest to dokładnie wytłumaczyć bo jestem w fazie planowania wszystkiego, mam już rozpisany jeden quiz, który został przetestowany na dziesiątki sposobów aby za każdy razem wypadała zbliżona do prawdy odpowiedź i jest on właśnie na zasadzie przykładu pierwszego. Drugi sposób również jest dobry dla innych informacji oraz manipulacji nimi.

Tak więc szukam rozwiązania, które nie wiem w jaki sposób wykonać (prócz mojej gorszej wersji...)

Idąc Twoim tropem spróbuję coś wymyślić, lecz ciężko będzie ze skutecznym rozwiązaniem.

W takim razie chętnie przyjmę propozycje rozwiązania problemu. : )
Skie
To do każdego quizu daj w bazie danych dane dotyczące przedziałów i użyj ich zamiast stałej zmiennej $arr w poprzednim przykładzie.

Albo rozwiązanie z bazą danych w drugim przykładzie, które zawsze się sprawdzi, niezależnie od przedziału.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.