Zmiany

Czasomierz lekcyjny

Dodane 2537 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.png|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 coś dla żartucoś, 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 napis'''tekst''', zamieni napis '''tekst''' na liczbę zero. W ten też sposób możemy łatwo sprawdzić czy ktoś podał liczbę (tak, jak chcemy), czy napis'''tekst''': (uczniowie mogą sami wymyśleć wymyślić ten sposób na bazie podabej podanej właściwości):[[Plik:czasomierz_02.png|Sposób na sprawdzenie, czy wprowadzona została liczba, czy tekst]]
[[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]] == Krok 2: Grafika = Duszek "Wskazówka" ===* Ustawiamy tło (scenę): rysujemy tarczę naszego czasomierza w trybie wektorowym używając narzędzia elipsa z wciśniętym klawiszem "shift" (wtedy uzyskamy dokładne koło)aby uzyskać okrąg.* Dodajemy duszka - wskazówkę czasomierza. Wygląda 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]]
 
* Użycie klocków warunku umożliwia określenie zarówno momentu zrównania wartości czasomierza i wyznaczonego czasu, jak również dodatkowo zabezpiecza przed, sytuacją w kótrej czas odmierzony przez czasomierz może "przeskoczyć" wartość pożądaną.
 
* Efekt ruchu wskazówki uzyskujemy przy użyciu klocków [[Plik:Czasomierz nazewnictwo3.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.png|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.png|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.png|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]]