2.5. Duszek zgaduje liczbę

Zasady gry

W klasie piątej przygotowywaliście projekt pt. „Zabawa w zgadywanie liczby”. Duszek losował liczbę naturalną, np. od 1 do 100, a zadaniem gracza było odgadnięcie tej liczby. Duszek pomagał graczowi, podpowiadając, czy jego liczba jest mniejsza, czy większa, od podanej.

Zadanie 2.5.1.

Zagraj z komputerem w zgadywanie liczby. Uruchom poniższą aplikację. Postaraj się zgadnąć liczbę w jak najmniejszej liczbie prób.
Teraz twoim zadaniem będzie przygotowanie aplikacji, w której role zostaną odwrócone. To duszek zgadnie liczbę pomyślaną przez ciebie.

Algorytm zgadującego

Zadanie 2.5.2.

Zapisz w postaci listy kroków algorytm zadawania pytań przez duszka. Możesz uruchomić poniższą aplikację, w której duszek zgaduje liczbę pomyślaną przez ciebie.

Wskazówka

Łatwo zauważyć, że duszek zawsze pyta się o liczbę będącą środkiem przedziału, w którym liczba na pewno się znajduje. W zależności od odpowiedzi odpowiednio zawęża przedział poszukiwań. Powinien więc pamiętać końce przedziału oraz wyznaczyć jego środek, a po otrzymaniu odpowiedzi zaktualizować jeden z końców. Jak dojdzie do sytuacji, że początek jest równy końcowi, to już wie jaka to liczba (chyba, że wcześniej przypadkowo zgadł).
Algorytm zgadującego liczbę naturalną z zakresu od 1 do 100:
a – dolna granica przedziału, w którym znajduje się poszukiwana liczba;
b – górna granica przedziału, w którym znajduje się poszukiwana liczba;
c – środek przedziału od a do b.

Przykładowy zapis algorytmu zgadującego:
  1. 1.
    Ustaw zmienną a na 1.
  2. 2.
    Ustaw zmienną b na 100.
  3. 3.
    Powtarzaj aż a=b:
    1. 3.1.
      Ustaw c na środek przedziału od a do b.
    2. 3.2.
      Zapytaj się, czy to liczba c.
    3. 3.3.
      Jeżeli tak to:
      1. 3.3.1.
        Powiedz „Zgadłem!”.
      2. 3.3.2.
        Zatrzymaj ten skrypt.
    4. 3.4.
      Jeżeli poszukiwana liczba jest większa to:
      1. 3.4.1.
        Ustaw zmienną a na c+1.
    5. 3.5.
      w przeciwnym przypadku:
      1. 3.5.1.
        Ustaw zmienną b na c-1.
  4. 4.
    Powiedz „Wiem, Twoja liczba to:” a.
  5. 5.
    Zatrzymaj ten skrypt.

Przygotowujemy aplikację

Zadanie 2.5.3.

Ustal zasady komunikacji z grającym. W przykładowej aplikacji komunikacja następowała za pomocą przycisków. W pierwszej wersji gry wygodniej będzie komunikować się za pomocą polecenia zapytaj i czekaj. Należy więc określić sposób odpowiadania przez gracza: jakich znaków, słów lub tekstów będzie używał jako odpowiedzi na zadawane pytania przez duszka.
Przykład 1:
„tak” – to moja liczba,
„mniej” – moja liczba jest mniejsza,
„więcej” – moja liczba jest większa.
Przykład 2:
„=” – to moja liczba,
„<” – moja liczba jest mniejsza,
„>” – moja liczba jest większa.
Przykład 3:
„tak” – to moja liczba,
„za dużo” – moja liczba jest mniejsza,
„za mało” – moja liczba jest większa.

Zadanie 2.5.4.

Zmodyfikuj zapis algorytmu w postaci listy kroków uwzględniając ustalenia z poprzedniego zadania. Należy także przewidzieć sytuację, że grający wpisze tekst niezrozumiały dla duszka – pomyli się, wpisując odpowiedź. Po uruchomieniu gry, np. zieloną flagą, daj czas graczowi na pomyślenie liczby, niech zadawanie pytań przez duszka rozpocznie się po określonym czasie lub po wciśnięciu wybranego klawisza na klawiaturze.
Przykładowe modyfikacje:

Kiedy wciśnięto zieloną flagę:
  1. 1.
    Powiedz „Pomyśl liczbę całkowitą od 1 do 100, a ją zgadnę! Naciśnij spację, jak będziesz gotowy.”
  2. 2.
    Czekaj aż klawisz spacja naciśnięty.
  3. 3.
    Ustaw zmienną a na 1.
  4. 4.
    Ustaw zmienną b na 100.
  5. 5.
    Powtarzaj aż a=b:
    1. 5.1.
      Ustaw c na środek przedziału od a do b.
    2. 5.2.
      Zapytaj się, czy to liczba c.
    3. 5.3.
      Jeżeli odpowiedź=tak to:
      1. 5.3.1.
        Powiedz „Zgadłem!”.
      2. 5.3.2.
        Zatrzymaj ten skrypt.
    4. 5.4.
      Jeżeli odpowiedź=więcej to:
      1. 5.4.1.
        Ustaw zmienną a na c+1, w przeciwnym przypadku:
      2. 5.4.2.
        Jeżeli odpowiedź=mniej to:
        1. 5.4.2.1.
          Ustaw zmienną b na c -1, w przeciwnym przypadku:
        2. 5.4.2.2.
          Powiedz „Nie rozumiem..., odpowiedz mi: tak, mniej lub więcej”.
  6. 6.
    Powiedz „Wiem, Twoja liczba to:” a.
  7. 7.
    Zatrzymaj ten skrypt.

Zadanie 2.5.5.

Przygotuj interfejs użytkownika do gry, czyli wybierz scenę (lub zaprojektuj własną), dobierz duszka, który będzie zadawał pytania. Utwórz też zmienne, które będą potrzebne przy realizacji algorytmu zgadywania liczby.

Zadanie 2.5.6.

Utwórz skrypt realizujący algorytm zgadywania liczby przez duszka.

Wskazówka

Wyznaczając środek przedziału c=(a+b)/2 otrzymasz liczbę niecałkowitą dla a+b nieparzystego. Skorzystaj z klocka podłoga, aby uzyskać część całkowitą liczby. Do łączenia tekstu i wartości zmiennej w wyświetlanych dymkach skorzystaj z klocka połącz.

Zadania uzupełniające

Zadanie 2.5.7.

Wprowadź do aplikacji licznik pytań. Uruchom kilkukrotnie aplikację. Ile pytań maksymalnie zada duszek, aby zgadnąć liczbę pomyślaną przez ciebie?

Zadanie 2.5.8.

Zmień przedział, w którym znajduje się pomyślana liczba. Najlepiej, niech duszek się zapyta na początku o dolną i górną granicę, w jakim przedziale ma poszukiwać liczbę. Wypróbuj działanie aplikacji dla różnych przedziałów, np. od 1 do 1000, od 1 do 10000. Obserwuj liczbę pytań zadawanych przez duszka.

Zadanie 2.5.9.

Przygotuj aplikację z wykorzystaniem przycisków do udzielania odpowiedzi.

Wskazówka

Przyciski powinny być duszkami. Do komunikacji pomiędzy duszkami możesz wykorzystać mechanizm nadawania i odbierania komunikatów.