Akwarium

Z Wiki Mistrzowie Kodowania
Skocz do: nawigacji, wyszukiwania

Informacje

Cel

Celem projektu jest pokazanie prostego programu symulującego zachowanie rybek w akwarium napisanego w środowisku Scratch.

Uwaga: nie jest istotne, w którym momencie zakończymy pracę nad projektem. Uczestnicy bardziej zainteresowani lub bieglejsi mogą zrobić więcej. Pozostali nieco mniej. Ważne, żeby pokazać zasadę posługiwania się środowiskiem oraz zainteresować samym programowaniem. Po zajęciach uczestnicy powinni między innymi potrafić sami odszukiwać niezbędne klocki - polecenia języka, by z nich budować swoje programy.

Uwagi do realizacji

w przypadku pracy z wieloma osobami jednocześnie, staramy się pokazywać na dużym ekranie/ tablicy co i dlaczego robimy, a uczestnicy wykonują pracę samodzielnie. Przy pracy indywidualnej z pojedynczymi osobami możemy wykorzystać dwa komputery znajdujące się obok siebie - na jednym pokazujemy, na drugim uczestnik wykonuje zadania. Wszystkie kroki najpierw omawiamy (co i jak trzeba zrobić). Następnie pozwalamy odszukać odpowiednie opcje / klocki, dyskutujemy gdzie je zamieścić i dopiero wszyscy to wykonują. Warto również pozwalać eksperymentować i dochodzić do w łasnych wniosków uczestnikom, a następnie omawiać je i ewentualnie korygować lub pokazywać prostsze rozwiązania. W tle należy przemycać ważne pojęcia dla nauki samego programowania, takie jak pętle czy instrukcje warunkowe.

Wprowadzenie

Pracę zaczynamy od wprowadzenia do środowiska Scretch - opowiadamy na czym polega tworzenie programu, o scenie na której będzie odtwarzany nasz program - np. gra komputerowa, o duszkach, czyli postaciach, którymi możemy sterować poprzez stworzenie dla nich odpowiedniego skryptu by reagowały np. na naciśnięcie klawisza czy myszkę komputera. Zwracamy uwagę na klocki podzielone na różne kategorie oraz obszar skryptów, do którego klocki można przeciągać, łącząc je w program. Zwracamy także uwagę na przyciski uruchamiające i zatrzymujące działanie programu.

rys. 1

Następnie zadajemy pytanie, co się dzieje w akwarium, w którym pływa kilka rybek. Czekamy na odpowiedzi. Możemy je zanotować, a w razie potrzeby nakierować uczestnika (lub uczestników), w taki sposób, by wywiązała się krótka dyskusja i byśmy uzyskali odpowiedzi podobne do niżej zapisanych.

  • w środku pływają rybki, sprawiając wrażenie, że robią to dość chaotycznie i bezcelowo,
  • w akwarium często są jakieś roślinki,
  • jak się zapuka w szybkę - rybki uciekają lub poruszają się w stronę puknięcia (myślą, że jest pora karmienia), • czasem widać pęcherzyki powietrza,
  • jak się wrzuci pokarm - płyną w jego stronę.


Wskazówka Można w tym miejscu powiedzieć, że zawsze warto zapisać, co chcemy osiągnąć. W prostym programie wystarczy zapisać punkty, co chcemy oprogramować by o niczym nie zapomnieć. Dla bardziej skomplikowanego - nie tylko co program ma robić, ale także w jaki sposób. Szczegółowy zapis, jak program ma działać, to algorytm.


Poznajemy(środowisko(7(dodajemy(tło(i(duszki(w(postaci(rybek(

Wyjaśniamy, jak zmienić t ło oraz jak dodać duszki, którymi będziemy sterować. Dodajemy tło odpowiednie dla akwarium, oraz trzy rybki i rekina z biblioteki gotowych postaci. Następnie usuwamy domyślnego duszka kota.

Wskazówka Pracę możemy także zacząć od przygotowanej sceny i duszków, tak by pokazać najważniejsze - jak tworzyć skrypty, szczególnie, jeśli mamy do czynienia z uczestnikami potrafiącymi już to zrobić, a więc znającymi nieco środowisko Scratch

A02.jpg

A03.jpg

Wskazówka Możemy także podpowiedzieć, że rybkę mo żna samodzielnie namalować, albo gotowej postaci zmienić kolory. Możemy także dodać zdjęcie rybki - np. pobrane z internetu. Warto jednak zwrócić uwagę na prawa autorskie!

A04.jpg

A05.jpg

A06.jpg

Zadajemy pytanie, czy dodane postaci rybek nie są zbyt duże, a następnie pokazujemy jak je zmniejszyć oraz umieścić w różnych punktach akwarium.

Wskazówka Pokazujemy, że do powiększania i zmniejszania duszka służą ikonki:! A07.jpg

  które należy wybrać, a następnie klikać w duszka, aż uzyskamy żądaną wielkość

Kolejnym krokiem jest zmiana nazw rybek. Nadajmy im imiona zaproponowane przez uczestnika(ów). Duszka rekina możemy nazwać Rekinek.


A08.jpg

Upewniamy się, że mamy wszystkie kroki za sobą, wybieramy pierwszą rybkę a w środkowej kolumnie zakładkę Skrypty.

A09.jpg


Dodajemy(ruch(dla(rybki((

Zaglądamy do naszych notatek, co robią rybki w akwarium i wybieramy punkt dotyczący ich ruchu. Na początek będziemy chcieli, żeby rybki zaczęły pływać. Prosimy, by uczestnik(cy) odnaleźli kategorię dotyczącą ruchu i odpowiedni klocek.

A10.jpg

Zwracamy uwagę, że mogą zmienić liczbę kroków, o jaką duszek będzie się przysuwał - np. na 20. Prosimy, aby kliknęli go parę razy i sprawdzili co się dzieje (przesuwa się). Następnie prosimy, żeby klocek przesuń o (10) kroków przesunięty został w obszar skryptu. Pytamy, co trzeba zrobić, aby uruchomić program (kliknąć znaczek zielonej flagi). Pytamy, czy rybka teraz się porusza? (nie). Zadajemy pytanie, czy czegoś nam brakuje? (klocek nie jest z niczym połączony - ani od góry, ani od dołu - a jego wygląd sugeruje, że powinien). Prosimy, by uczestnik(cy) odnaleźli odpowiednie klocki pasujące z obu stron. Najpierw klocek reagujący na kliknięcie zielonej flagi.

Wskazówka W razie potrzeby, podpowiadamy, gdzie ich szukać (w jakich kategoriach - odpowiednio Zdarzenia oraz Kontrola.

A11.jpg

Prosimy, aby przesunęli i połączyli klocek z wcześniej dodanym.

A12.jpg

Następnie prosimy o odnalezienie klocka kończącego program, którego nie da się połączyć od do łu z żadnym innym klockiem. Podpowiadamy, że czasem nie widać wszystkich klocków i trzeba skorzystać z możliwości przewijania listy, na której się znajdują. Uczestnicy powinni odnaleźć klocek zatytułowany zatrzymaj wszystko oraz zauważyć, że można go przestawić na tryb zatrzymaj ten skrypt, lub zatrzymaj inne skrypty duszka.


A13.jpg

Wskazówka Klocek zatrzymaj wszystko zatrzymuje wszystkie skrypty stworzone przez programistę. Klocek zatrzymaj ten skrypt zatrzymuje działanie skryptu, w którym został użyty, zaś zatrzymaj inne skrypty duszka zatrzymuje pozostałe skrypty z wyjątkiem tego, w którym został użyty. Przyda się to w dalszej części zajęć.

Prosimy, aby przesunęli i połączyli klocek z wcześniej dodanym.

A14.jpg

Następnie prosimy o przetestowanie programu, tj. kliknięcie zielonej flagi. Rybka porusza się tylko o wpisaną liczbę kroków. Dyskutujemy, że my byśmy chcieli, by poruszała się cały czas.

Proponujemy odszukanie odpowiedniego klocka, który mógłby spowodować, że rybka będzie się poruszała cały czas - inaczej mówiąc zawsze.

Wskazówka W razie potrzeby, podpowiadamy, gdzie go szukać (w jakiej kategorii - Kontrola)

A15.jpg

Prosimy, aby przesunęli i połączyli klocek z wcześniej dodanymi. Pokazujemy jak rozłączać i łączyć klocki. Zauważamy, że jeden z klocków - Zatrzymaj ten skrypt nie da się (sensownie) ponownie połączyć, więc możemy go wyrzucić przesuwając nad klocki znajdujące się w środkowej kolumnie.

A16.jpg

Następnie prosimy o przetestowanie programu, tj. kliknięcie zielonej flagi. Rybka porusza się, aż dotrze do krawędzi sceny. Podpowiadamy, że możemy ją chwycić myszką i przesunąć w inne miejsce, ale zawsze będzie podążała do krawędzi sceny w tą samą stronę.

Proponujemy by odszukać w kategorii Ruch klocek, który umożliwił by jej zmianę kierunku ruchu po dotarciu do krawędzi sceny, czyli odbicie od krawędzi sceny.

A17.jpg

Zadajemy pytanie, gdzie powinniśmy wstawić ten klocek, a następnie prosimy by uczestnicy przetestowali jego działanie - jeżeli program nie był wcześniej zatrzymany - klocek zacznie działać automatycznie.

A18.jpg

Zauważamy, że rybka pływa bardzo szybko - zadajemy pytanie, co zrobić, by ją zwolnić (zmienić liczbę kroków, o jaką się przesuwa przy każdym wykonaniu polecenia - np. na 5).

Prosimy o spowolnienie rybki i przetestowanie programu.

Następnie zauważamy, jeżeli uczestnicy sami tego nie zrobili, że po odbiciu rybka płynie na plecach - brzuszkiem do góry. Prosimy by odnaleźli odpowiedni klocek w kategorii Ruch, który pozwoliłby zmienić sposób obracania się rybki.

A19.jpg

Dyskutujemy, gdzie należy umieścić ten klocek. W razie potrzeby tłumaczymy, że wystarczy go zamieścić przed pętlą zawsze, bo nie ma potrzeby za każdym razem powtarzać tego ustawienia. To jest także okazja, do wytłumaczenia pojęcia pętli oraz jak działa pętla zawsze (znajdujące się w niej polecenia są powtarzane po kolei bez końca - jak wykonane zostanie ostanie polecenie znajdujące się wewn ątrz pętli, wracamy do pierwszego z nich).

A20.jpg

Dyskutujemy, czego nam teraz brakuje w ruchu naszej rybki (żeby pływała bardziej chaotycznie - trochę do góry, trochę na dół).

Prosimy o odnalezienie klocka, który pozwoliłby na obrócenie rybki - czyli zmianę kierunku jej ruchu.

Plik:A21.jpg

Uczestnicy powinni znaleźć klocki obróć o 15 stopni. Zwracamy uwagę, że jeden obraca duszka zgodnie z ruchem wskazówek zegara, drugi w przeciwną stronę. Mogą zauważyć także inne klocki związane z kierunkiem ruchu np. ustaw kierunek na 90 stopni lub ustaw w stronę. Tłumaczymy jednak w razie potrzeby, że te klocki także można wykorzystać, lecz na razie zależy nam na obróceniu rybki. Różnica polega na tym, że w przypadku klocka obróć o 15 stopni, obrót nastąpi w zależności od aktualnego kierunku. W przypadku pozostałych klocków postać ustawi się niezależnie od niego.

Uwaga !!! W tym miejscu, w zależności od wieku uczestników, możemy wyjaśnić co to są stopnie, że pełny obrót to 360 stopni, więc 15 stopni, to niewielki obrót. Nie wdajemy się jednak w zbyt wiele szczegółów - możemy to wyjaśniać na dalszym etapie, gdy dodamy klocek obróć o 15 stopni i rybka będzie kręciła się w kółko. 

Dyskutujemy, gdzie należy umieścić ten klocek (wewnątrz pętli zawsze). Prosimy o jego zamieszczenie i sprawdzenie, jak zachowuje się rybka.

A22.jpg

Rybka porusza się po okręgu - mniejszym lub większym, w zależności od liczby kroków podanej w klocku przesuń o (10) kroków. Możliwy jest również przypadek, gdzie rybka będzie odbijała się od brzegu - wówczas jej ruch będzie odbywał się „wężykiem” tuż przy krawędzi sceny.

Dyskutujemy, co by należało zmienić, by rybka zachowywała się bardziej losowo? Odpowiedzi mogą być różne - w razie potrzeby naprowadzamy uczestników, że rybka powinna zmieniać kierunek swojego ruchu o losowy kąt - inny za każdym wykonaniem pętli.

Prosimy by uczestnicy w kategorii Wyrażenie odnaleźli odpowiedni klocek, pozwalający wylosować wartość kąta, o jaki rybka zmieni kierunek ruchu po każdym przesunięciu się.

Plik:A23.jpg

Prosimy by wstawili go w odpowiednie miejsce i przetestowali działanie.

Plik:A24.jpg

Jest nieco lepiej, ale rybka porusza się dość monotonnie, a tor jej ruchu jest zawsze związany z pętlami zataczanymi w jedną stronę.  

Wspólnie z uczestnikami zastanawiamy się, co powinniśmy zmienić, żeby ruch był jeszcze bardziej przypadkowy, a więc odpowiadał zachowaniu prawdziwej rybki w akwarium. Powinniśmy wspólnie dojść do wniosku, że rybka po każdym przesunięciu się, powinna losowo skręcić w lewą lub prawą stronę.

W zależności od wieku uczestników, możemy podać jedno z rozwiązań: - dostawienie drugiego klocka obrotu, ale o przeciwnym zwrocie np. klocka obróć w lewo o (losuj od 1 do 10) - zmienić wartości w dotychczas wstawionym klocku, by losowanie odbywało się między wartością -10 a 10.

Dość łatwo wyjaśnić, że obrót o -10 stopni, to obrót w przeciwnym kierunku, niż wskazuje strzałka na klocku obrotu. Warto o to zapytać uczestników i w razie potrzeby naprowadzić ich na prawidłową odpowied ź. Najlepiej poprosić by działanie liczby ujemnej wypróbowali w swoim programie, umieszczając taką wartość w odpowiednim klocku.

Oba rozwiązania będą miały podobne działanie.

Plik:A25.jpg

Wskazówka Niezależnie od wybranego rozwiązania warto poprosić uczestników o poeksperymentowanie ze zmianą wartości losowanych i obserwowanie zmian w zachowaniu rybki.

Uwaga do realizacji zajęć !!! W tym miejscu możemy zakończyć etap tworzenia skryptu rybek i przejść do skopiowania go dla pozostałych duszków lub rozwijać dalej, w zależności od zainteresowania uczestników i czasu, jaki mamy do dyspozycji


Dodanie(reakcji(na(„puknięcie(w(ściankę(akwarium”(

Wspólnie zastanawiamy się, jak rybka ma reagować na pukanie w ściankę akwarium, czyli klikniecie myszką w dowolny punkt sceny. Reakcje mogą by ć dwie, zgodnie z zapisanymi wcześniej punktami. Rybka może uciekać lub potraktować to jako coś interesującego (np. sygnał karmienia) i podpłynąć w kierunku pukania. Prostsze na tym etapie będzie skierowanie rybki w kierunku kliknięcia, więc takie rozwiązanie powinniśmy zasugerować uczestnikom.

Prosimy, by uczestnicy poszukali klocka reagującego na wciśnięcie klawisza myszy w kategorii Czujniki.

A26.jpg

Prosimy, by uczestnicy przenieśli znaleziony klocek do obszaru skryptów, ale na razie nie łączyli go z innymi.

Zadajemy pytanie, czy ten klocek możemy połączyć z jakimś innym, znajdującym się w naszym skrypcie (nie, sadząc po kształcie).

Prosimy, by w kategorii Kontrola uczestnicy odnaleźli klocek, pozwalający wykonać 

! Wersja beta instrukcji Strona 12 z 16! jakieś polecenie, pod warunkiem, że został wciśnięty klawisz myszy? Sugerujemy, by kierowali się jego nazwą oraz możliwością połączenia z klockiem wciśnięty klawisz myszy? - wcześniej znalezionym.

A27.jpg

W razie potrzeby nakierowujemy uczestników na prawidłowe rozwiązanie.

Wskazówka W zależności od wieku uczestników możemy wyjaśnić, że znaleziony klocek jest tzw. instrukcją warunkową, pozwalającą wykona ć okre ślone polecenia, pod warunkiem, że zaistniały określone okoliczności, czyli został spełniony określony warunek. W tym wypadku chodzi o skierowanie rybki w kierunku kursora myszki, gdy wykonane zostało kliknięcie - wciśnięcie lewego klawisza myszy, odpowiadające puknięciu w szybę akwarium.

Prosimy, by uczestnicy przenieśli znaleziony klocek do obszaru skryptów, ale na razie nie łączyli go z innymi.

Następnie prosimy, by odnaleźli klocek pozwalający skierować rybkę w stronę kursora myszy. Uczestnicy mogą odnaleźć dwa klocki. W razie potrzeby należy wyjaśnić różnicę między nimi.

A28.jpg

Wskazówka Jeśli ktoś wybra ł klocek idź do <wska źnik myszy>, należy omówić różnicę w efekcie dzia łania skryptów. W tym wypadku duszek rybki znajduje się dok ładnie tam, gdzie wskaźnik myszy komputerowej. Nie możemy więc nadać mu prędkości (ta zależy od tego, jak szybko poruszamy myszą komputerową). Duszek nie obraca się również w kierunku wskaźnika.

Prosimy, by uczestnicy zastanowili się, jak: - połączyć znalezione klocki, Plik:A29.jpg w którym miejscu je wstawić w skrypcie.

Plik:A30.jpg


Najlepiej umieścić polecenie jeżeli wciśnięty klawisz myszy jako ostatnie w pętli zawsze. Można poprosić by uczestnicy przetestowali różne umiejscowienie i odpowiedzieli na pytanie - co się zmienia?

Wskazówka Jeżeli chcielibyśmy, by rybka uciekała, to powinniśmy ją ustawić w stronę puknięcia, czyli wskaźnika myszy, a następnie obrócić o 180 stopni - czyli w kierunku przeciwnym.

A31.jpg

Skopiowanie(skryptu(dla(pozostałych(rybek(duszków((=

Podpowiadamy, że przygotowany skrypt możemy skopiować dla pozostałych rybek poprzez jego przeciągnięcie i upuszczenie na ich postaci w obszarze duszków pod sceną.

Po skopiowaniu skryptów powinniśmy zatrzymać i ponownie uruchomić program - wówczas wszystkie rybki powinny zacząć pływać.

Plik:A32.jpg

Dodanie(interakcji(między(rekinem(a(jedną(z(rybek((

Kolejnym rozszerzeniem projektu może być zmodyfikowanie skryptu rekina w taki sposób, by reagował na spotkanie z jedną z rybek próbą zjedzenia jej. Możemy zwrócić uwagę, że rekin ma kilka kostiumów. W tym celu możemy poprosić o wybranie Rekinka i przejście następnie do zakładki Kostiumy w środkowej kolumnie.

Plik:A33.jpg

Sprawdzamy, że rekin ma trzy kostiumy. Dyskutujemy, co się stanie, jeśli zmienimy szybko trzykrotnie kostium rekina na następny (powstanie wrażenie, że rekin próbuje coś ugryźć, na koniec wracając do pierwszego kostiumu - czyli pierwotnego wyglądu).

Wspólnie zastanawiamy się w jaki sposób powinien wyglądać fragment skryptu powodującego, że jeśli rekin napotka inną rybkę (np. nazwaną Kasia) to będzie próbował ją ugryźć. Zapisujemy wnioski np.: Jeżeli dotyka Kasi, to trzykrotnie zmień kostium.

Uwaga do realizacji zajęć !!! W tym miejscu możemy pozwolić na realizację zadania w sposób wymyślony przez uczestników, pomagając jedynie odnaleźć prawidłowe klocki i rozwiązać ewentualne problemy

Następnie prosimy kolejno o odnalezienie i połączenie klocków, które pozwolą:

  • sprawdzić, czy Rekinek dotyka Kasi
  • powtórzyć jakąś operację określoną liczbę razy
  • zmienić kostium

A34.jpg

Po przetestowaniu, okaże się, że animacja zachodzi bardzo szybko, więc dobrze jest ! Wersja beta instrukcji Strona 16 z 16! dodać klocek nieco ją spowalniający - np. wymuszający czekanie przed kolejną zmianą kostiumu np. przez 0.2 sekundy.

Kolejnym problemem może się okazać, że Rekinek próbuje zjeść rybkę b ędąc odwróconym do niej ogonem. W tym celu, przed wykonaniem animacji, możemy zmienić styl obrotu rekina na wszystko dookoła a następnie przed zmianą kostiumu ustawiać go w stronę rybki, którą próbuje ugryźć. Należy pamiętać, by po animacji ustawić ponownie styl obrotu na lewo-prawo.


A35.jpg

Możliwe dalsze modyfikacje projektu:

  • dodanie licznika, ile razy rekin próbował zjeść rybkę (wymaga wprowadzenia pojęcia zmiennej)
  • zmodyfikowanie skryptu rybki zjadanej przez rekina w taki sposób, by po zjedzeniu znikała i pojawiała się dopiero po pewnym czasie