Zmiany

Czasomierz lekcyjny

Dodane 2501 bajtów, 11:00, 7 lis 2014
<big>[[Category:Scenariusze Scratch]] [[Category:Mistrzowie Kodowania]]'''Materiały stworzone przez Fundację Coder Dojo Polska w ramach Programu „Mistrzowie Kodowania” finansowanego przez Samsung Electronics Polska</big>== Cel projektu ==Celem projektu jest stworzenie aplikacji, która będzie odmierzała czas npobjęte licencją CC BY 3. lekcji, albo czas przeznaczony na odpowiedź ucznia na pytania i dawała wizualne i dźwiękowe wskazówki mówiącemu, że jego czas się kończy0 PL "Creative Commons Uznanie Autorstwa 3.0 Polska".'''
== Krok 1Informacje ======Cele====Celem projektu jest stworzenie aplikacji, która będzie odmierzała czas np. lekcji, albo czas przeznaczony na odpowiedź ucznia na pytania. Aplikacja, poprzez wizualne i dźwiękowe sygnalizuje, upływający czas.  # Przypomnienie i utrwalenie poznanych wcześniej poleceń i konstrukcji języka Scratch ('''zmienna, nadaj wiadomość, kiedy otrzymam wiadomość'''), # Wykorzystanie opcji dostępnej w Bloku [[Plik: Czasomierz.png]]# Implementacja projektu w środowisku Scratch# Opcjonalnie: '''wykorzystanie możliwości tworzenia własnych bloków''': [[Plik:Wiecej blokow stworz blok.png]] ====Poziom trudności i proponowane wersje==== Gotowy projekt [http://scratch.mit.edu/projects/26833381/ Czasomierz lekcyjny]* Poziom trudności dla klas 4-6 ✪✪✰✰* Poziom trudności dla gimnazjum ✪✰✰✰ Gotowy projekt projekt [http://scratch.mit.edu/projects/26836599/ Czasomierz lekcyjny - wersja B] z opcją tworzenia własnych bloków* Poziom trudności dla klas 4-6 ✪✪✪✰ * Poziom trudności dla gimnazjum ✪✪✰✰  Gotowy projekt projekt [http://scratch.mit.edu/projects/25974535/ Czasomierz lekcyjny - wersja C] z opcją tworzenia własnych bloków oraz zaznaczaniem kolorem upływającego odcinka czasu, uruchamianie odliczania klawiszem ''spacja''* Poziom trudności dla klas 4-6 ✪✪✪✰* Poziom trudności dla gimnazjum ✪✪✰✰ ====Orientacyjny czas realizacji====Orientacyjny czas realizacji jednej z proponowanych wersji: 2x 45minut. == Etapy ===== Interakcja z użytkownikiem ===Jak Scratch radzi sobie z czasem?Do mierzenia czasu w Scratch możemy użyć dwóch klocków z grupy "czujniki":* Klocka "czasomierz", który zlicza sekundy (co do części dziesiętnej),
* Klocka "aktualna godzina / minuta".
W prezentowanym projekcie, do mierzenia czasu wykorzystany zostanie '''czasomierz'''. '''Wskazówka:''' [[Plik:Czasowmierz.png]] Pierwszym etapem budowy jest zaprojektowanie sposobu w jaki użytkownik ustawi ile wprowadzi dane liczbowe odpowiadające wartości czasu , który ma być odmierzoneodmierzony. W tym celu wykorzystane zostaną klocki:# [[Plik:Klocek1a.png]] oraz [[Plik:Klocek1b.png]] aby uzyskać informację # [[Plik:Czasomierz nazewnictwo1.JPG]] aby zgromadzić zebrane dane# [[Plik:Połącz.png]] aby połączyć zebrane dane Przykładowy skrypt może wyglądać w następujący sposób: [[Plik:Czasomierz_01.jpg|ramkapng|Krok 1. - zaprojektowanie sposobu ustawiania czasu do odliczenia]] ==== Radzenie sobie z nietypowymi sytuacjami w interakcji z użytkownikiem ====Co się stanie jeśli użytkownik aplikacji zamiast liczby minut wpisze dla żartu coś, co nie jest liczbą? Nasz program mógłby zacząć funkcjonować w niespodziewany sposób. Do pewnego stopnia chroni nas przed tym sam Scratch, który jeśli spróbujemy wykonać jakieś działanie matematyczne na zmiennej, która przechowuje '''tekst''', zamieni '''tekst''' na liczbę zero. W ten też sposób możemy łatwo sprawdzić czy ktoś podał liczbę (tak, jak chcemy), czy '''tekst''': (uczniowie mogą sami wymyślić ten sposób na bazie podanej właściwości): [[Plik:Czasomierz 02.jpg]] '''Uwaga:''' Opcjonalnie można wykorzystać opcję definiowania nowych bloków, aby przygotować klocek sprawdzania czy podana wartość jest liczbą.  [[Plik:info.png|50px|left]]Czasem warto - w celu poprawy przejrzystości skryptów - często powtarzające się fragmenty połączyć w jeden blok. Wykorzystując zakładkę [[Plik:Wiecej blokow stworz blok.png]] tworzymy kod złożonego działania, zawarty w pojedynczym bloku. W proponowanym scenariuszu skrypt wykorzystujący opcję definiowania własnego bloku wygląda w następujący sposób: [[Plik:Definiowanie.JPG]] === Duszek "Wskazówka" ===* Ustawiamy tło (scenę): rysujemy tarczę czasomierza w trybie wektorowym używając narzędzia elipsa z wciśniętym klawiszem "shift" aby uzyskać okrąg. * Dodajemy duszka - wskazówkę czasomierza. Wygląd jest dowolny, istotne jest to, żeby punkt obrotu duszka był na początku wskazówki:[[Plik:czasomierz_03.png|Ustawianie punktu obrotu duszka (szary plus na końcu wskazówki)]]* Wskazówkę ustawiamy tak, żeby zaczynała się na środku tarczy czasomierza. * W przygotowanym projekcie wskazówka została narysowana w poziomie, co w dalszej kolejności warunkuje ustawienie pozycji startowej (aby wskazówka rozpoczynała ruch od pozycji pionowej, należy ustawić jej kierunek na 0) === Przesuwanie wskazówki ===# Rozpoczęcie ruchu wskazówki inicjowane jest komunikatem nadaj wiadomość "czas-start!" wysyłanym po podaniu przez użytkownika czasu, jaki ma zostać odmierzony.# Wykorzystując wyrażenie mnożenia oraz dodawania, określona zostaje łączna suma sekund do odliczenia; # Wprowadzne przez użykownika dane, zostają przechowane w lokalnej (zdefiniowanej tylko dla tego duszka) zmiennej '''czas-suma'''  Zarys skryptu wygląda następująco: [[Plik:Czasomierz nazewnictwo2.JPG]] * Wykorzystując klocek ''powtarzaj aż'' uruchamiana jest pętla, która ma przesuwać (obracac) wskazówkę, dopóki wskazanie czasomierza nie zrówna się z wyznaczona wartością czasu do odliczenia.  '''Uwaga:''' W programie Scratch czasomierz stale odmierza sekundy, w związku z tym należy wprowadzić opcję zresetowania wartości czasomierza wraz z uruchomieniem odliczania zadanego czasu. W tym celu należy użyć klocka  [[Plik:Zeruj stoper.png]]
=== Radzenie sobie z nietypowymi sytuacjami w interakcji z użytkownikiem ===Co się stanie jeśli użytkownik aplikacji zamiast liczby minut wpisze coś dla żartu* Użycie klocków warunku umożliwia określenie zarówno momentu zrównania wartości czasomierza i wyznaczonego czasu, co nie jest liczbą? Nasz program mógłby zacząć funkcjonować w niespodziewany sposób. Do pewnego stopnia chroni nas jak również dodatkowo zabezpiecza przed tym sam Scratch, który jeśli spróbujemy wykonać jakieś działanie matematyczne na zmiennej, która przechowuje napis, zamieni napis na liczbę zerosytuacją w kótrej czas odmierzony przez czasomierz może "przeskoczyć" wartość pożądaną. W ten też sposób możemy łatwo sprawdzić czy ktoś podał liczbę (jak chcemy), czy napis: (uczniowie mogą sami wymyśleć ten sposób na bazie podabej właściwości):[[Plik:czasomierz_02.jpg|ramka|Sposób na sprawdzenie, czy wprowadzona została liczba, czy tekst]]
== Krok 2: Grafika ==* Ustawiamy tło (scenę): rysujemy tarczę naszego czasomierza z wciśniętym klawiszem "shift" (wtedy uzyskamy dokładne koło).* Dodajemy duszka - wskazówkę czasomierza. Wygląda jest dowolny, istotne jest to, żeby punkt obrotu duszka był na początku Efekt ruchu wskazówki:uzyskujemy przy użyciu klocków [[Plik:czasomierz_03Czasomierz nazewnictwo3.jpg|ramka|Ustawianie punktu obrotu duszka (szary plus na końcu wskazówki)JPG]]
== Krok 3: Przesuwanie wskazówki ==* Wskazówkę ustawiamy tak, żeby zaczynała się na środku tarczy czasomierza* Zarys skryptu wygląda następująco:[[Plik:czasomierz_04.jpg|ramka|Krok 3: Zarys skryptu zliczającego czas i przesuwającego wskazówkę]]# W momencie, kiedy dowiemy się już jaki czas należy odmierzyć nadawana jest wiadomość "czas-start!"# Wskazówka w reakcji na wiadomość pokazuje się w pionie (można oczywiście wystartować z dowolnej pozycji)# Pomarańczowy klocek zlicza sumę sekund jaką należy odmierzyć i przechowuje ją w zmiennej (lokalnej dla duszka-wskazówki) czas-suma# Uruchamiana jest pętla, która przesuwać ma wskazówkę (obracać ją) dopóki czasomierz (który zresetowany został chwilę przed nadaniem wiadomości) nie zrówna się z wartością czasu do odliczenia. Dodatkowo zabezpieczamy się przed tym, że czas odmierzony przez czasomierz może "przeskoczyć" wartość pożądaną - stąd również przekroczenie czasu kończy pętlę# Po zakończeniu odliczania ustawiamy wskazówkę na powrót ponownie w pionie i uruchamiamy efekt efekty dodatkowe, np. odgrywamy dźwięk, duszki mogą coś powiedzieć itd.
Trudniejszym elementem jest zawartość pętli ustawiającej duszka. Wygląda ona następująco:[[Plik:czasomierz_05Czasomierz nazewnictwo 4.jpg|ramka|Krok 3: Skrypt obliczający nachylenie wskazówkiJPG]]* W scratch kierunki ustawia się następująco: góra do kierunek 0 stopni, dół to kierunek 180 stopni (lub -180). Pozycje pośrednie ze strony prawej mają wartość dodatnią, a z lewej wartość ujemną [[//wiki.scratch.mit.edu/wiki/Direction_(value)]]* W związku z tym musimy podzielić skrypt na trzy sekcje: 1) od początku do połowy czasu wskazówka porusz się od -360 stopni do -180 (rośnie), w połowie ustawia się pionowo w dół (180 stopni), po czym w drugiej połowie czasu aż do końca przesuwa się od 180 do 0 stopni (tym razem malejąco).
Alternatywnie możemy skorzystać z prostego hacku==Dodatkowe opcje==Projekt czasomierza można rozwinąć o: okazuje się*start spacją, że Scratch zrozumie również koordynaty od 0 do 360 stopniumożliwiający start w dowolnym momencie*graficzny efekt odmierzania czasu, wówczas skrypt ten można uprościć do jednego klockauzyskany poprzez użycie narzędzia [[Plik:Stempluj.PNG]] [[Plik:czasomierz_06Czasomierz stemplowanie.jpg|ramka|Krok 3PNG]]*wprowadzenie intuicyjnego, zegarowego kierunku obrotu, poprzez zmianę wartości w ustawieniu kierunku: Skrypt obliczający nachylenie wskazówki - uproszczony[[Plik:Czasomierz dodatki.PNG]]