2.1. Odbijanie piłeczki

Wprowadzenie

W ramach projektu stworzysz grę polegającą na odbijaniu piłeczki. Wykorzystasz w tym celu edukacyjne środowisko programistyczne Scratch. Prawdopodobnie programowaliście w szkole podstawowej. Znasz więc podstawy sterowania komputerem przez wydawanie mu prostych poleceń - instrukcji, które powodują, że komputer wyświetli coś na ekranie, przesunie jakiś obiekt, wykona obliczenia lub powtórzy jakieś operacje wielokrotnie. Jeśli jednak niewiele pamiętasz lub nie znasz środowiska Scratch - nie martw się. Tworzenie gry będzie świetną okazją, aby przypomnieć sobie na czym to polega, a nawet poznać środowisko Scratch od podstaw. Jeśli dobrze znasz Scratcha, wówczas nie będą ci potrzebne umieszczone przy zadaniach podpowiedzi - szybko i bez problemu zaprogramujesz grę, a nawet uatrakcyjnisz uzupełniając o dodatkowe elementy.

Zadanie 2.1.1.

Skorzystaj z poniższej aplikacji, aby sprawdzić, czy wiesz, gdzie znajdują się poszczególne elementy środowiska Scratch oraz czy umiesz je nazwać. Odnajdź w aplikacji i przeczytaj opisy takich elementów, jak:
  • scena,
  • obszar wyboru i zarządzania duszkami,
  • obszar budowania skryptów,
  • zakładki Skrypty, Kostiumy, Dźwięki,
  • lista wyboru kategorii,
  • lista klocków (bloczków) dostępnych w wybranej kategorii,
  • obszar zarządzania sceną,
  • informacja o wybranym duszku i jego pozycji na scenie.

Scenariusz gry

Gra będzie polegała na poruszaniu przez dwóch graczy paletkami w taki sposób, by odbić poruszającą się na ekranie piłeczkę na stronę przeciwnika. Wygrywa gracz, który doprowadzi do sytuacji, w której przeciwnikowi nie uda się odbić piłeczki i minie ona jego paletkę. Obejrzyj poniższy film z przykładem działania gry.

Zadanie 2.1.2.

Zastanów się, jakie obiekty poruszają się na ekranie. Którymi z nich steruje komputer, czyli program? Na ruch których mają bezpośredni wpływ gracze?
Możesz zaobserwować na filmie, że poruszają się dwie paletki oraz piłeczka. Gracze sterują swoimi paletkami, natomiast piłeczką steruje komputer (on decyduje gdzie porusza się piłeczka, w jaki sposób i kiedy odbije się).

Zadanie 2.1.3.

Zastanów się, w jaki sposób gracze mogą sterować swoimi paletkami? Jakie znasz sposoby kontrolowania ruchu w grach?
Zapewne potrafisz wymienić co najmniej kilka sposobów sterowania grą. W zależności od jej rodzaju może do tego służyć klawiatura, mysz, joystick, kontroler nazywany padem, możemy użyć palców, gdy dostępny jest ekran dotykowy.

Zadanie 2.1.4.

Zastanów się, w przypadku projektowanej gry, gdy nie mamy do dyspozycji kontrolerów takich joystick lub pad, jaki sposób poruszania paletkami będzie sprawiedliwy dla obu graczy?
Gracze powinni sterować w podobny sposób paletkami, żeby każdy miał taką samą szansę wygranej. Ponieważ zazwyczaj do komputera możemy podpiąć tylko jedną myszkę, to najprościej będzie do sterowania wykorzystać klawiaturę i każdemu z graczy przyporządkować dwa klawisze - odpowiadające ruchowi np. w górę i w dół (jak miało to miejsce na filmie).

Zadanie 2.1.5.

Czas zaplanować wszystkie działania, jakie musi wykonywać komputer, by można było zagrać zgodnie ze scenariuszem. Możemy je podzielić na trzy główne kategorie: ustawienia początkowe, sterowanie grą oraz akcje - czyli wydarzenia lub sytuacje jakie mogą zajść w grze. Działania te trzeba będzie później zaprogramować - czyli zapisać w języku zrozumiałym dla komputera. Zastanów się i opisz tak szczegółowo, jak potrafisz, wszystkie działania z podziałem na wymienione kategorie.
Po spisaniu, sprawdź swoją odpowiedź z przykładowym rozwiązaniem. Uzupełnij brakujące elementy opisu.

Wskazówka

W ustawieniach początkowych należy przewidzieć stan, w jakim rozpocznie się gra. W przypadku projektowanej gry będzie to na przykład umiejscowienie paletek oraz piłki na scenie, jak również kierunek, w którym piłka zacznie się poruszać na początku rozgrywki. W kategorii sterowania musisz opisać, jakie klawisze zostaną przyporządkowane do odpowiedniego ruchu paletek. W kategorii zdarzenia - akcje mające wpływ na przebieg rozgrywki, sytuacje w których do nich dochodzi oraz skutek jaki wywołują - np. piłka dotyka paletki, piłka minęła paletkę.
Przykładowe rozwiązanie może wyglądać w opisany niżej sposób. Sprawdź, czy w swoim rozwiązaniu masz opisane wszystkie elementy gry.

Ustawienia początkowe
  • Piłka zostaje umieszczona na środku ekranu i zaczyna poruszać się w losowym kierunku.
  • Pierwsza paletka umieszczona zostanie w pobliżu lewej krawędzi sceny na środku.
  • Druga paletka umieszczona zostanie w pobliżu prawej krawędzi sceny na środku.


Sterowanie
  • Pierwszy gracz będzie używał następujących klawiszy:
    • klawisz A - ruch paletki do góry
    • klawisz Z - ruch paletki do dołu
  • Drugi gracz będzie używał następujących klawiszy:
    • klawisz K - ruch paletki do góry
    • klawisz M - ruch paletki do dołu


Akcje
  • Piłka dotyka paletki - ma odbić się od niej, czyli zmienić kierunek ruchu.
  • Piłka minęła paletkę - koniec gry - wygrywa gracz obsługujący drugą paletkę.
  • Piłka dotyka krawędzi sceny, na której toczy się gra - ma odbić się od niej, czyli zmienić kierunek ruchu.
Dysponujesz już dość szczegółowym scenariuszem gry. Zawiera większość elementów. Nie wszystkie są opisane w sposób, pozwalający na ich oprogramowanie, ale tym zajmiemy się podczas dalszej pracy. Czas zaprojektować elementy graficzne gry – paletki i piłeczkę.

Projektujemy duszki

W scenariuszu opisane zostały poszczególne elementy gry - postacie, pozycje startowe, zachodzące zdarzenia oraz sposób sterowania. Zacznij od zaprojektowania rysunków, czyli piłeczki oraz paletek. W środowisku Scratch, rolę bohaterów w programach pełnią duszki, które mogą poruszać się po scenie i przyjmować różny wygląd.

Zadanie 2.1.6.

Dodaj nowego duszka i zaprojektuj dla niego kostium - paletkę. Pamiętaj, żeby zaprojektować odpowiednią wielkość paletki. Zbyt duża spowoduje, że gra będzie bardzo łatwa, zbyt mała - utrudni znacząco grę. Na koniec upewnij się, że punkt zaczepienia duszka jest umiejscowiony na środku zaprojektowanego kostiumu. Po zakończeniu ustaw duszka na scenie na środku z lewej strony.

Wskazówka

W celu utworzenia nowego duszka i zaprojektowania dla niego kostiumu możesz wybrać w obszarze zarządzania duszkami ikonkę pędzelka lub skorzystać z zewnętrznego edytora grafiki.
W edytorze kostiumów upewnij się, że punkt zaczepienia jest ustawiony na środku kostiumu.
Jeżeli zaprojektowany duszek jest zbyt duży lub zbyt mały, można zmienić jego wielkość za pomocą przycisków znajdujących się na pasku menu. Należy wybrać przycisk ze strzałeczkami skierowanymi do środka (zmniejsz) lub na zewnątrz (powiększ) a następnie kliknąć na scenie duszka, którego wielkość chcemy zmodyfikować.

Zadanie 2.1.7.

Usuń domyślnego duszka - kotka.

Wskazówka

W celu usunięcia duszka, kliknij go prawym klawiszem myszy, a następnie z menu wybierz opcję Usuń.

Zadanie 2.1.8.

Potrzebne będą dwie paletki, które powinny być identyczne co do wielkości, aby gracze mieli równe szanse. Powiel zaprojektowaną paletkę. Po zakończeniu ustaw duszka w środkowej części prawej strony sceny.

Wskazówka

W celu powielenia duszka, kliknij go prawym klawiszem myszy, a następnie z menu wybierz opcję Duplikuj.

Zadanie 2.1.9.

Dodaj nowego duszka - piłkę. Zamiast samodzielnie rysować, możesz dodać gotowego duszka z biblioteki.

Wskazówka

W celu dodania duszka z biblioteki skorzystaj z ikonki duszka w obszarze zarządzania.

Zadanie 2.1.10.

Nadaj duszkom nazwy - odpowiednio: lewa, prawa, piłka.

Wskazówka

W celu zmiany nazwy duszka, wybierz go w obszarze zarządzania duszkami, następnie kliknij symbol i.
Po wpisaniu nowej nazwy kliknij ikonę powrotu.

Projektujemy sterowanie paletkami

Żeby móc opracować zasady sterowania paletkami, przypomnij sobie, jak zorganizowany jest układ współrzędnych sceny. Punkt o współrzędnych (0,0) to środek sceny. Szerokość sceny wynosi 480 punktów, a wysokość 360 punktów. Duszek może więc zmieniać swoje współrzędne na scenie w zakresie od -240 do 240 na osi x, oraz od -180 do 180 na osi y.

Zadanie 2.1.11.

Zastanów się, jakie wartości współrzędnych x i y powinny zostać ustalone odpowiednio dla lewej i prawej paletki po uruchomieniu gry?

Wskazówka

Dla obu paletek wartość współrzędnej y powinna zostać ustawiona na 0. Współrzędna x powinna zostać dobrana tak, by znajdowały się w tej samej odległości od bliższej sobie krawędzie sceny. Na przykład dla lewej paletki wartość x może zostać ustawiona na -220. Wówczas dla prawej powinna zostać ustawiona na 220. Wartość x powinna zostać dobrana w taki sposób, by paletki znajdowały się w pobliżu krawędzi sceny, ale jej nie dotykały.
Zgodnie ze scenariuszem gry, w momencie jej uruchomienia paletki powinny zostać umieszczone na pozycji startowej. Do uruchomienia gry można wykorzystać przycisk zielonej flagi. Przepis na wprowadzenie ustawień początkowych dla lewej paletki mógłby więc wyglądać następująco:

Kiedy kliknięto zieloną flagę:
  1. 1.
    Przejdź na pozycję x: -220 i y: 0.
  2. 2.
    Zatrzymaj ten skrypt.

Zadanie 2.1.12.

Wybierz w obszarze zarządzania duszkami lewą paletkę. Następnie zbuduj skrypt zgodnie z przepisem, przeciągając i łącząc odpowiednie klocki ze sobą w obszarze skryptów.

Wskazówka

Wykorzystaj klocki idź do x: … i y: … oraz zatrzymaj … .

Zadanie 2.1.13.

W obszarze zarządzania duszkami wybierz prawą paletkę i zbuduj dla niej analogiczny skrypt, który ustawi ją przy prawej krawędzi sceny na środku. Następnie przetestuj działanie skryptów - uruchom program klikając na zieloną flagę. Obie paletki powinny ustawić się naprzeciw siebie w środkowej części sceny.
Kolejne skrypty, które należy stworzyć, powinny graczom zapewnić możliwość sterowania paletkami. Każda paletka ma się poruszać w górę lub w dół o określoną liczbę punktów w wyniku naciśnięcia odpowiedniego klawisza - zgodnie z opracowanym scenariuszem gry. Zmianie będzie więc podlegała tylko wartość współrzędnej y danej paletki. Wartość x powinna być stała, ponieważ paletka nie będzie się poruszała w prawą ani lewą stronę. Przepis na ruch paletki może wyglądać następująco:

Kiedy naciśnięto klawisz …
  1. 1.
    Zmień współrzędną y o … .
  2. 2.
    Zatrzymaj ten skrypt.

Zadanie 2.1.14.

W obszarze zarządzania duszkami wybierz lewą paletkę. Zbuduj zgodnie z powyższym przepisem skrypt, który będzie ją przesuwał do góry po naciśnięciu klawisza A. Jeżeli w swoim scenariuszu masz przewidziane inne klawisze do sterowania paletkami niż uwzględnione w opisie, wykorzystaj je konsekwentnie podczas budowy skryptów.

Wskazówka

Wykorzystaj klocki kiedy klawisz … naciśnięty oraz zmień y o … . Zwróć uwagę, że w opcjach klocka może być ustawiony inny klawisz, niż ten, który chcesz. Zauważ również, że zmiana współrzędnej y o wartość dodatnią spowoduje ruch paletki do góry.
Przykładowy skrypt przesuwający paletkę do góry o 30 punktów po wciśnięciu klawisza A:

Zadanie 2.1.15.

Powiel stworzony skrypt obsługujący klawisz A. Następnie zmień klawisz, który ma aktywować skrypt, na Z. Zmodyfikuj wartość, o jaką powinna zmienić się współrzędna y, by paletka poruszyła się do dołu.

Wskazówka

W celu powielenia skryptu:
  • najedź na pierwszy klocek skryptu i wybierz go prawym klawiszem myszy,
  • z menu podręcznego wybierz opcję duplikuj,
  • przesuń skopiowany skrypt na pustą przestrzeń w obszarze skryptów,
  • kliknij w miejscu, gdzie chcesz upuścić skopiowany skrypt.

Zadanie 2.1.16.

Wypróbuj działanie skryptów. Wciśnij kilkukrotnie klawisz A, następnie Z. Czy lewa paletka porusza się odpowiednio do góry i do dołu? Czy twoim zdaniem dostatecznie szybko? Co należałoby zrobić, aby paletka poruszała się szybciej lub wolniej?
Szybkość ruchu paletki zależy od liczby punktów, o jaką zmienione zostanie jej położenie po wciśnięciu klawisza. Możesz zmodyfikować wartość w odpowiednich miejscach skryptów i dostosować ruch paletki do swoich wymagań.

Zadanie 2.1.17.

Przygotuj odpowiednie skrypty, reagujące na wciśniecie klawiszy K oraz M dla drugiej paletki. Zamiast tworzyć je od początku, możesz skopiować skrypty, które zostały przygotowane dla lewej paletki, a następnie zmienić klawisze, na które mają reagować.

Wskazówka

W celu skopiowania skryptu między duszkami, należy wybrać dany skrypt i przeciągnąć go tak, by upuścić na drugim duszku w obszarze zarządzania. Po skopiowaniu skryptów, wystarczy wybrać drugiego duszka i zmodyfikować skopiowane skrypty.
UWAGA: Należy zachować ostrożność, żeby podczas kopiowania nie upuścić skryptu w przypadkowym miejscu - może to spowodować jego usunięcie. Żeby się zabezpieczyć, przed przeciągnięciem skryptu można go powielić, a po skopiowaniu, powielony skrypt usunąć.

Projektujemy działanie piłeczki

Gracze mogą już sterować paletkami. Czas zaprojektować skrypty dla piłki. W scenariuszu zostały dla niej zaplanowane następujące ustawienia początkowe:
  • Piłka zostaje umieszczona na środku ekranu i zaczyna poruszać się w losowym kierunku.

Zadanie 2.1.18.

Umiesz już poruszać duszka. Zastanów się, jak powinien wyglądać przepis działania piłeczki, który:
  • uwzględni ustawienia początkowe,
  • spowoduje ciągłe poruszanie się piłeczki.

Zapisz go. Następnie porównaj z przykładowym rozwiązaniem zamieszczonym w odpowiedzi.

Wskazówka

Zwróć uwagę, że piłka powinna poruszać się cały czas. Do powtarzania pewnych poleceń w programowaniu wykorzystuje się instrukcje zwane pętlą. W tym przypadku najlepiej będzie użyć klocka zawsze.
Przepis na skrypt realizujący początkowe ustawienia piłki może wyglądać następująco:

Kiedy kliknięto zieloną flagę:
  1. 1.
    Idź na środek sceny (do x:0 i y:0),
  2. 2.
    Ustaw kierunek ruchu na losowy,
  3. 3.
    Zawsze:
    1. 3.1.
      Przesuń o 5 kroków.

Zadanie 2.1.19.

Wybierz duszka - piłkę, a następnie stwórz dla niego skrypt zgodnie z opracowanym w poprzednim zadaniu przepisem. Następnie przetestuj działanie skryptu.

Wskazówka

Znajdź dwa klocki. Pierwszy, który daje możliwość ustawienia kierunku ruchu dla duszka. Drugi, który pozwala wylosować wartość z podanego przedziału liczb. Oba przeciągnij do obszaru skryptów. Następnie zastanów się nad następującymi kwestiami:
  • W jaki sposób można klocki połączyć ze sobą, żeby kierunek ruchu był losowany?
  • Jak należy ustawić zakres losowania, żeby piłka po uruchomieniu programu miała przypadkowy kierunek ruchu?
Klocek losuj od … do … możesz umieścić w miejscu parametru klocka ustaw kierunek na …. W celu ustalenia dowolnego kierunku należy losować wartość z zakresu od 0 do 360 stopni.
Czy piłeczka za każdym razem po uruchomieniu porusza się w innym, losowym kierunku? Czy porusza się cały czas? Jeśli dojdzie do krawędzi sceny, chwyć ją myszką, odsuń ją od brzegu i puść ponownie. Czy piłeczka dalej się porusza?

Ważne

Zauważ, że losowanie kierunku z zakresu od 0 do 360 stopni może spowodować wylosowanie wartości powodujących poruszanie się piłki pionowo w górę lub w dół - wówczas piłka nigdy nie dotrze do paletki. Jeśli tak się zdarzy, rozpocznij grę od początku. W dalszej części projektu zajmiesz się rozwiązaniem tego problemu.
Pozostało stworzenie skryptów, które obsłużą zaplanowane akcje - zdarzenia mogące zajść w grze. Zwróć uwagę, że wszystkie zaplanowane akcje dotyczą piłki:
  • Piłka dotyka krawędzi sceny - ma odbić się od niej, czyli zmienić kierunek ruchu.
  • Piłka dotyka paletki - ma odbić się od niej, czyli zmienić kierunek ruchu.
  • Piłka ominęła paletkę - koniec gry - wygrywa gracz obsługujący drugą paletkę.

Zadanie 2.1.20.

Zastanów się, w jaki sposób uzupełnić przepis działania piłki, tak by uwzględnić opisane w scenariuszu zdarzenia. Uzupełnij przepis i porównaj z przykładem z odpowiedzi.

Wskazówka

Zauważ, że obsłużenie danej sytuacji w grze jest warunkowe i zachodzi tylko wówczas, gdy określona akcja miała miejsce. Zastanów się również, kiedy opisane zdarzenia mogą nastąpić - inaczej mówiąc, w którym miejscu przepisu należałoby je uwzględnić oraz czy ma znaczenie, w jakiej kolejności zostaną sprawdzone. Pamiętaj, że należy obsłużyć zwycięstwo obu graczy.
Przykładowy przepis może wyglądać następująco:

Kiedy kliknięto zieloną flagę:
  1. 1.
    Idź na środek sceny (do x:0 i y:0).
  2. 2.
    Ustaw kierunek na losową wartość z zakresu 0 do 360 stopni.
  3. 3.
    Zawsze:
    1. 3.1.
      Przesuń o 5 kroków.
    2. 3.2.
      Jeżeli dotyka krawędzi sceny, odbij się - zmień kierunek ruchu.
    3. 3.3.
      Jeżeli dotyka lewej paletki lub dotyka prawej paletki to:
      1. 3.3.1.
        Odbij się - zmień kierunek ruchu.
    4. 3.4.
      Jeżeli ominie lewą paletkę to:
      1. 3.4.1.
        Wyświetl „Zwycięża gracz z prawej".
      2. 3.4.2.
        Zatrzymaj wszystko.
    5. 3.5.
      Jeżeli ominie prawą paletkę to:
      1. 3.5.1.
        Wyświetl „Zwycięża gracz z lewej”.
      2. 3.5.2.
        Zatrzymaj wszystko.

Zdarzenia takie jak dotknięcie przez piłeczkę krawędzi sceny lub paletki, a także ominięcie paletki mogą nastąpić za każdym razem, gdy piłka wykona ruch. Dlatego zbadanie tych zdarzeń powinno być umieszczone wewnątrz pętli, po tym jak nastąpi przesunięcie piłki.
Kolejność sprawdzenia warunków nie ma większego znaczenia. Wszystkie warunki sprawdzane są między kolejnymi ruchami piłki - nawet jeżeli piłka zmieni kierunek ruchu bo dotknęła krawędzi boiska, to nie zmieni swojej pozycji. Jeżeli ominęła którąś z paletek, to na pewno nie ominęła drugiej.

Zadanie 2.1.21.

Klocek pozwalający odbić się duszkowi od brzegu sceny to jeżeli na brzegu, odbij się. Znajdź go, a następnie zmodyfikuj skrypt, aby uwzględniał realizację punktu 3.2 z opracowanego przepisu. Następnie ponownie uruchom program zieloną flagą. Czy piłeczka odbija się zgodnie z oczekiwaniami?
Skrypt po zmianach:
Niestety nie ma klocka pozwalającego osiągnąć efekt odbicia jednego duszka od drugiego. Należy więc zastanowić się, jak zmienić kierunek ruchu po odbiciu się piłeczki od paletki. Być może wiesz, że kąt padania równy jest kątowi odbicia. Żeby obliczyć kierunek ruchu musisz wiedzieć, w jaki sposób oznaczane są kierunki w programie Scratch. W kategorii Czujniki znajdziesz klocek kierunek. Jego wartość stanowi aktualny kierunek, w którym ustawiony jest duszek. Przyjmuje wartości zgodnie z regułą przedstawioną na poniższym rysunku.

Wskazówka

Wartości klocka kierunek są z zakresu od -180 do 180. Klocek ustaw kierunek na … może korzystać zarówno z zakresu od -180 do 180 stopni, jak również od 0 do 360 stopni. Dlatego w poprzednim zadaniu można było skorzystać z losowania kierunku właśnie w tym zakresie. Scratch automatycznie potrafi przeliczyć odpowiednio wartości, a tworząc program możesz skorzystać z odpowiadającego ci w danym przypadku sposobu oznaczenia kierunku.

Zadanie 2.1.22.

Zastanów się, w jaki sposób można obliczyć wartość kierunku, w którym piłka ma się poruszać po odbiciu od paletki. Możesz skorzystać z rysunku zamieszczonego we wskazówce.

Wskazówka

Jak możesz zauważyć posługując się rysunkiem zamieszczonym we wskazówce, wystarczy przemnożyć wartość aktualnego kierunku, z którego piłka nadlatuje, przez -1 w celu obliczenia kierunku po odbiciu od paletki.

Zadanie 2.1.23.

Uzupełnij skrypt zgodnie z powyższymi rozważaniami oraz przepisem działania piłeczki realizując wyróżnione punkty:

Kiedy kliknięto zieloną flagę:
  1. 1.
    Idź na środek sceny (do x:0 i y:0).
  2. 2.
    Ustaw kierunek na losową wartość z zakresu 0 do 360 stopni.
  3. 3.
    Zawsze:
    1. 3.1.
      Przesuń o 5 kroków.
    2. 3.2.
      Jeżeli dotyka krawędzi sceny, odbij się - zmień kierunek ruchu.
    3. 3.3.
      Jeżeli dotyka lewej paletki lub dotyka prawej paletki to:
      1. 3.3.1.
        Ustaw kierunek na (-1)*kierunek.
    4. 3.4.
      Jeżeli ominie lewą paletkę to:
      1. 3.4.1.
        Wyświetl „Zwycięża gracz z prawej”.
      2. 3.4.2.
        Zatrzymaj wszystko.
    5. 3.5.
      Jeżeli ominie prawą paletkę to:
      1. 3.5.1.
        Wyświetl „Zwycięża gracz z lewej”.
      2. 3.5.2.
        Zatrzymaj wszystko.

Wskazówka

Wykorzystaj klocki: jeżeli … to oraz dotyka … ?
Przykładowy skrypt może wyglądać jak niżej. Zauważ, że wykorzystany został dodatkowy klocek … lub … , pozwalający zbudować złożony warunek dla klocka jeżeli … to .
Należy jeszcze oprogramować sytuację, w której piłka minie jedną z paletek. W tym celu wystarczy zbadać, czy wartość współrzędnej x piłeczki jest mniejsza od współrzędnej x lewej paletki (wówczas wygrywa gracz z prawej strony sceny) lub większa od współrzędnej x paletki prawej (wówczas wygrywa gracz z lewej strony sceny). Wartości współrzędnych x dla obu paletek są znane i stałe. Wystarczy więc dodać odpowiednie instrukcje warunkowe w skrypcie piłeczki, sprawdzające, czy piłeczka nie minęła jednej z paletek. Żeby gracze wiedzieli, który z nich wygrał, warto żeby piłka wyświetliła odpowiedni komunikat, np. powiedziała: „Zwycięża gracz z prawej” lub „Zwycięża gracz z lewej”. Następnie powinno nastąpić zatrzymanie gry.

Zadanie 2.1.24.

Uzupełnij skrypt zgodnie z powyższymi rozważaniami - niech duszek - piłeczka wyświetli napis, kto wygrał np. przez 2 sekundy, a następnie zatrzyma wszystkie skrypty, jeśli minie którąś z paletek.

Wskazówka

Zaktualizowany przepis na działanie piłeczki może wyglądać w następujący sposób:

Kiedy kliknięto zieloną flagę:
  1. 1.
    Idź do x: 0 i y:0.
  2. 2.
    Ustaw kierunek na losową wartość z zakresu 0 do 360 stopni.
  3. 3.
    Zawsze:
    1. 3.1.
      Przesuń o 5 kroków.
    2. 3.2.
      Jeśli na brzegu, odbij się.
    3. 3.3.
      Jeżeli dotyka lewej paletki lub dotyka prawej paletki to:
      1. 3.3.1.
        Ustaw kierunek na (-1)*kierunek.
    4. 3.4.
      Jeżeli współrzędna x piłki < współrzędnej x lewej paletki to:
      1. 3.4.1.
        Powiedz „Zwycięża gracz z prawej”.
      2. 3.4.2.
        Zatrzymaj wszystko.
    5. 3.5.
      Jeżeli współrzędna x piłki > współrzędnej x prawej paletki to:
      1. 3.5.1.
        Powiedz „Zwycięża gracz z lewej”.
      2. 3.5.2.
        Zatrzymaj wszystko.

Zauważ, że tym razem nie można było wprowadzić jednego klocka jeżeli … to i zastosować sprawdzenie podwójnego warunku ponieważ oddzielnie należy obsłużyć sytuację wygranej obu graczy.
Przykładowy skrypt, realizujący zaktualizowany przepis opisany we wskazówce:

Zmieniamy reguły gry - wprowadzamy punkty

W grach tego typu zabawa nie kończy się przy pierwszym potknięciu. Zlicza się punkty, aż ktoś osiągnie określony wynik. Na przykład możesz wprowadzić zasadę, że wygrywa ten, kto pierwszy zdobędzie 3 punkty. Punkt jest przyznawany za każdym razem, gdy przeciwnik nie odbije piłki.
Realizacja powyższego scenariusza wymaga przechowania informacji o liczbie punktów, czyli danej. Dane mogą być przechowywane przez program w zmiennych. W uproszczeniu zmienna to skrytka (szufladka), w której chowa się na przykład liczbę. Program może do niej zajrzeć i sprawdzić, jaka jest wartość zmiennej (przechowywana liczba). Wolno także zmieniać tę wartość - na przykład dodać do niej inną liczbę.

Zadanie 2.1.25.

Stwórz dwie zmienne i nazwij je Licznik prawy oraz Licznik lewy. Żeby stworzyć zmienne, należy przejść do kategorii Dane. Zmienne powinny być dostępne dla wszystkich duszków. Skorzystaj, w razie potrzeby, z zamieszczonego niżej filmu ilustrującego dodawanie nowej zmiennej.

Zadanie 2.1.26.

Zastanów się, w jaki sposób można zmodyfikować przepis działania piłeczki, żeby wprowadzić opisane wyżej zasady, korzystając z utworzonych zmiennych. Zapisz go, następnie porównaj z odpowiedzią i sprawdź, czy zostały w nim uwzględnione sugerowane zmiany.
Należy uwzględnić wyzerowanie liczników punktów na początku każdej rozgrywki. Zamiast wyświetlać napis dotyczący wygranej, należy zwiększyć odpowiednio licznik punktów, a następnie zbadać, czy nie osiągnął wartości określającej zwycięstwo. Jeżeli osiągnął, należy wyświetlić informację o wygranej - jeśli nie - kontynuować rozgrywkę np. od środka sceny.

Przykładowa modyfikacja może wyglądać następująco:

Kiedy kliknięto zieloną flagę:
  1. 1.
    Idź do x: 0 i y:0.
  2. 2.
    Ustaw zmienną Licznik prawy na 0.
  3. 3.
    Ustaw zmienną Licznik lewy na 0.
  4. 4.
    Ustaw kierunek na wylosowaną wartość z zakresu 0 do 360 stopni.
  5. 5.
    Zawsze:
    1. 5.1.
      Przesuń o 5 kroków.
    2. 5.2.
      Jeżeli na brzegu, odbij się.
    3. 5.3.
      Jeżeli dotyka lewej paletki lub dotyka prawej paletki to:
      1. 5.3.1.
        Ustaw kierunek na (-1)*kierunek.
    4. 5.4.
      Jeżeli współrzędna x piłki < współrzędna x lewej paletki to:
      1. 5.4.1.
        Zwiększ wartość zmiennej Licznik prawy o 1.
      2. 5.4.2.
        Jeżeli Licznik prawy = 3 to:
        1. 5.4.2.1.
          Powiedz „Zwycięża gracz z prawej”.
        2. 5.4.2.2.
          Zatrzymaj wszystko.
      3. 5.4.3.
        Idź do x: 0 i y:0.
    5. 5.5.
      Jeżeli współrzędna x piłki > współrzędna x prawej paletki to:
      1. 5.5.1.
        Zwiększ wartość zmiennej Licznik lewy o 1.
      2. 5.5.2.
        Jeżeli Licznik lewy = 3 to:
        1. 5.5.2.1.
          Powiedz „Zwycięża gracz z lewej”.
        2. 5.5.2.2.
          Zatrzymaj wszystko.
      3. 5.5.3.
        Idź do x: 0 i y:0.

Zadanie 2.1.27.

Wprowadź zmiany w skrypcie, zgodnie z opracowanym przepisem. Sprawdź, czy gra działa zgodnie ze zmienionymi założeniami.
Przykładowy skrypt:

Zadania uzupełniające

Zadanie 2.1.28.

Losowanie początkowego kierunku ruchu piłeczki z zakresu od 0 do 360 powoduje, że przy wylosowaniu wartości 0, 90, 180, 270 lub bliskich im gra staje się nudna bądź niemożliwa. Zastanów się, jakie zmiany wprowadzić, by wylosowany kierunek ograniczyć do wartości, które zapewnią ruch piłeczki bezpośrednio w stronę lewej lub prawej krawędzi. Następnie wprowadź zmiany w swoich skryptach i przetestuj działanie.

Zadanie 2.1.29.

W rzeczywistości na kąt odbicia wpływa np. ruch paletki i jej ustawienie względem piłki. Aby utrudnić przeciwnikowi przewidywanie, w jaki sposób piłeczka zostanie odbita, dodaj np. element losowości. Obliczony kąt odbicia zmodyfikuj losowo np. w zakresie od -10 do 10.

Zadanie 2.1.30.

Dodaj dwa nowe tła sceny, po jednym dla wygranej lewego i prawego gracza. Następnie zmodyfikuj skrypty w taki sposób, by zamiast informacji w komiksowym dymku wyświetlone zostało odpowiednie tło z informacją (tekstową lub obrazkową), kto zwyciężył.

Wskazówka

Tło sceny możesz przygotować korzystając z wbudowanego w środowisko Scratch edytora graficznego. Jednak jeśli chcesz dodać napisy, wygodniej będzie je stworzyć w zewnętrznym edytorze. Pamiętaj, że tło powinno mieć wymiar dokładnie 480 na 360 punktów.

Zadanie 2.1.31.

Może się zdarzać, że podczas gry piłeczka „przykleja” się do paletki. Sytuacja ma miejsce, jeśli po zmianie kierunku ruchu i kolejnym przesunięciu piłeczka nadal dotyka paletki. Spróbuj znaleźć rozwiązanie. Rozważ na przykład wykorzystanie pętli powtarzaj aż … .