Scenariusz projektu

Twoim zadaniem będzie zaprojektowanie automatu sprzedającego bilety, np. komunikacji miejskiej. Zwykle takie automaty umożliwiają wybór rodzaju biletu, liczbę kupowanych biletów, formę zapłaty (kartą płatniczą lub gotówką), a w przypadku płacenia gotówką wydają resztę. Podczas kupna biletu automat przeprowadza kupującego przez kolejne kroki, od wyboru biletów po płatność.

1
Polecenie 1

Odwiedź stronę internetową przedsiębiorstwa komunikacji miejskiej twojego miasta lub (jeśli mieszkasz w mniejszej miejscowości) najbliższego większego miasta z taką komunikacją. Zapoznaj się z obowiązującym systemem biletowym. Wybierz co najmniej dwa rodzaje biletów, które wykorzystasz w swojej aplikacji. Jeśli są na stronie zdjęcia – wzorce biletów, pobierz je.

Na poniższych obrazkach znajdziesz wzorce kilku przykładowych biletów komunikacji miejskiej w Warszawie pobrane ze strony Warszawskiego Transportu Publicznego według stanu na początek 2023 roku.

https://www.wtp.waw.pl/ceny-i-rodzaje-biletow

R1WBZT31q28Eu
Fotografia przedstawiająca bilet 20‑minutowy normalny w Warszawie
Źródło: ZTM Warszawa, domena publiczna.
R1bmuyLQ9mT7q
Fotografia przedstawiająca bilet 75‑minutowy normalny w Warszawie
Źródło: ZTM Warszawa, domena publiczna.
RGpiSmxBEFVVH
Fotografia przedstawiająca bilet 90‑minutowy normalny w Warszawie
Źródło: ZTM Warszawa, domena publiczna.
R9RZBl8U7RVGy
Fotografia przedstawiająca bilet 20‑minutowy ulgowy w Warszawie
Źródło: ZTM Warszawa, domena publiczna.
R16QPMd61NDaw
Fotografia przedstawiająca bilet 75‑minutowy ulgowy w Warszawie
Źródło: ZTM Warszawa, domena publiczna.
R1HbTO8onS8Jc
Fotografia przedstawiająca bilet 90‑minutowy ulgowy w Warszawie
Źródło: ZTM Warszawa, domena publiczna.

W poniższym polu tekstowym możesz zapisywać swoje notatki związane z ćwiczeniami poniżej.

RvsY66NglpvYZ
Dzienniczek – miejsce, w którym uczeń może sporządzać swoje notatki
Dzienniczek – miejsce, w którym uczeń może sporządzać swoje notatki
Źródło: GroMar Sp. z o.o., licencja: CC BY 3.0.
1
Ćwiczenie 1

Zaplanuj działania, które będą wykonywane na kolejnych ekranach automatu (np. wybór rodzaju biletu – spośród przykładowych biletów można wybierać ze względu na strefę lub pomiędzy biletami normalnymi i ulgowymi, wybór liczby kupowanych biletów itd.). Załóż, że płatność będzie dokonywana tylko gotówką i automat będzie wydawał resztę.

1
Ćwiczenie 2

Zaprojektuj wygląd kolejnych ekranów automatu.

1
Ćwiczenie 2

Zaproponuj wygląd automatu do biletów, z którego będzie można w łatwy i intuicyjny sposób skorzystać.

W przykładowej aplikacji można maksymalnie wybrać 9 biletów, reszta wydawana jest zawsze monetami. Jej działanie można obejrzeć na poniższym filmie.

RKs7YFPWC3PbS
Film przedstawia demonstrację działania programu.

Dalszych kilka podrozdziałów opisuje kolejne kroki tworzenia i oprogramowania interfejsu przykładowej aplikacji według przedstawionego powyżej scenariusza. Pamiętaj, że tworzysz aplikację podobną, ale według własnego scenariusza, więc twoje skrypty sterujące duszkami i ekranami automatu będą prawdopodobnie różnić się od przykładowych.

Zwróć szczególną uwagę na kilka ostatnich podrozdziałów, w których duszka – kota (lub inną postać zaproponowaną przez ciebie) czeka ważne zadanie. Oblicza należność do zapłaty oraz kwotę reszty. W tym celu musi wyznaczyć liczbę monet poszczególnych nominałów jako resztę, którą należy wydać. Algorytm wyznaczenia reszty w twojej aplikacji będzie prawdopodobnie analogiczny jak w przykładowej.

iwePopYOpl_d5e409

Przygotowujemy tła i duszki

1
Ćwiczenie 3

Przygotuj wszystkie potrzebne duszki oraz tła do twojego projektu. Część duszków znajdziesz w galerii Scratcha, inne pobierz z internetu (pamiętaj o przestrzeganiu praw autorskichPHAguK9Zupamiętaj o przestrzeganiu praw autorskich) lub zaprojektuj samodzielnie w edytorze graficznym. Pamiętaj, że duszek może mieć kilka kostiumów, które mogą być wykorzystywane nie tylko do animacji.

2
Ćwiczenie 4

Załaduj do projektu Scratcha przygotowane duszki oraz tła. Ustaw, że domyślnie duszki są niewidoczne. Dla każdego z nich przygotuj także skrypt, uruchamiany po kliknięciu zielonej flagi, ukrywający duszka. Nawet jeśli domyślnie wszystkie duszki są ukryte, to niektóre mogą być widoczne po poprzednim wykonaniu aplikacji (reszta w postaci monet, niektóre duszki po przerwaniu działania aplikacji przyciskiem stop).

Wybieramy rodzaj biletu

Pierwszy ekran przykładowej aplikacji dokonuje tylko wyboru pomiędzy biletem ulgowym a normalnym. Na scenie widoczne są dwa duszki – przyciski UlgowyNormalny. Po kliknięciu jednego z tych przycisków następuje przejście do następnego ekranu – wyboru rodzaju biletu spośród ulgowych lub normalnych. Powinien w związku z tym zostać nadany komunikat informujący pozostałe duszki o wyborze biletu ulgowego lub normalnego, aby mogły być podjęte następne działania. Jeśli jeszcze nie umiesz korzystać z komunikatów, kliknij tutajnadawanie_i_odbieranie_komunikatówtutaj.

2
Ćwiczenie 5

Przygotuj odpowiedni skrypt dla sceny wybierający pierwsze tło i czyszczący scenę.

2
Ćwiczenie 6

Zaplanuj i utwórz skrypty dla przycisku Ulgowy. Ten duszek jest widoczny tylko na pierwszym ekranie, więc może mieć stałą pozycję na scenie. Pamiętaj, że ma zostać ukryty nie tylko po jego kliknięciu, ale także przy wyborze przycisku Normalny.

2
Ćwiczenie 7

Utwórz skrypty dla przycisku Normalny. Będą one analogiczne, jak dla poprzedniego przycisku.

Na kolejnym ekranie (po otrzymaniu komunikatu normalny lub ulgowy) jest wyświetlana grupa trzech biletów do wyboru. Każdy z nich ma dwa kostiumy, wybór kostiumu zależy od odebranego komunikatu (normalny lub ulgowy). Wybrany bilet zmienia swoją pozycję na następnym ekranie, więc należy programowo ustawiać jego pozycję. Aby zapamiętać, jaki bilet został wybrany, posłużymy się zmienną. Będzie ona przyjmowała wartości od 1 do 6, a każda z tych wartości będzie oznaczała inny rodzaj biletu (np. wartość 1 – bilet normalny 20‑minutowy, wartość 2 – bilet normalny 75‑minutowy).

2
Polecenie 2

Utwórz zmienną do pamiętania wybranego biletu, dostępną dla wszystkich duszków. Nazwij ją np. rodzaj. Niech wartości od 1 do 3 określają bilety normalne, a wartości od 4 do 6 – odpowiadające im bilety ulgowe.

blok_stempluj_dymek
Ważne!

Wykorzystaj w swoich skryptach blok Stemplujblok_stempluj_dymekStempluj. Umożliwi Ci on duplikowanie wizerunku duszka na scenie.

2
Ćwiczenie 8

Zaplanuj czynności, które należy przewidzieć dla duszka – biletu. Staraj się tak je zaplanować, aby były uniwersalne niezależnie od rodzaju biletu.

Następnie przygotuj skrypty na podstawie zaplanowanych czynności.

2
Ćwiczenie 8

Zaplanuj czynności, które należy przewidzieć dla skryptu odpowiedzialnego za wybór biletu. Staraj się tak je zaplanować, aby były uniwersalne niezależnie od rodzaju biletu.

2
Polecenie 3

Skopiuj skrypty dla pozostałych biletów i dokonaj niezbędnych poprawek: przypisania odpowiedniej wartości zmiennej rodzaj, położenia na scenie oraz wyboru kostiumu.

nadawanie_i_odbieranie_komunikatów

Wybieramy liczbę biletów

Na kolejnym ekranie (po otrzymaniu komunikatu wybrano bilet) określamy liczbę biletów. Na scenie dostępne są duszki – strzałki do zmiany liczby kupowanych biletów, duszek reprezentujący wybraną liczbę biletów oraz przycisk Kupuję.

2
Ćwiczenie 9

Przygotuj skrypty dla duszków – strzałek. W podpowiedzi znajdziesz algorytmy, według których należy je przygotować.

2
Ćwiczenie 10

Przygotuj skrypty dla duszka reprezentującego liczbę kupowanych biletów. W podpowiedzi znajdziesz algorytmy, według których należy je przygotować.

2
Ćwiczenie 11

Przygotuj skrypty dla przycisku Kupuję. W podpowiedzi znajdziesz algorytmy, według których należy je przygotować.

Projektujemy listy cen biletów, nominałów monet i reszty

Ponieważ automat biletowy ma nie tylko umożliwić wybranie rodzaju biletu, ich liczby, ale także obliczyć wartość kupowanych biletów oraz wydać resztę, potrzebne będą informacje dotyczące cen poszczególnych biletów, nominałów monet, liczby wydawanych poszczególnych monet. Ponieważ w przykładowej aplikacji występuje 6 różnych biletów, mamy także 6 nominałów monet, niewygodne będzie pamiętanie tych informacji w pojedynczych zmiennych liczbowych. Lepiej utworzyć i zapamiętać te informacje na listach. Więcej informacji dotyczących list znajdziesz tutajiwePopYOpl_d1111e54911123tutaj.
Ceny biletów lepiej jest pamiętać jako liczby naturalne, a więc wyrażone w groszach. Wynika to z faktu, że liczby całkowite są w komputerze pamiętane dokładnie, a liczby rzeczywiste - w przybliżeniu. Łatwiej będzie prowadzić obliczenia. Analogicznie nominały monet zapamiętamy w tych samych jednostkach, czyli w groszach (np. 1 zł jako 100 groszy). Więcej o reprezentacji liczb całkowitych i rzeczywistych dowiesz się tutajiwePopYOpl_d1111e427tutaj.

2
Ćwiczenie 12

Utwórz listy do pamiętania cen poszczególnych biletów, nominałów monet oraz liczby wydawanych monet o poszczególnych nominałach. Utwórz bloki inicjalizujące listy. Pamiętaj, że liczba biletów i ich rodzajów musi być zgodna z Twoim projektem.

  • Listę cen biletów zaplanuj zgodnie z wartościami zmiennej rodzaj. Tzn. jeśli zmienna rodzaj przyjmuje wartość 1 dla biletu normalnego 20‑minutowego, to na pierwszym miejscu listy powinna być cena tego biletu.

  • Listę z nominałami monet przygotuj uporządkowaną malejąco: od największego do najmniejszego nominału.

  • Listę z liczbami monet do wydania jako reszta wypełnij wartościami 0 (nie wiemy jeszcze, czy i jaką resztę trzeba będzie wydać).

iwePopYOpl_d1111e54911123
iwePopYOpl_d1111e427
iwePopYOpl_d1111e449

Duszek oblicza należność i prosi o zapłatę

Na kolejnym ekranie (po otrzymaniu komunikatu kupuję) należy pokazać duszka, który nas rozliczy. Powinien on najpierw obliczyć wartość kupowanych biletów, następnie poprosić o zapłatę.

Polecenie 4

Utwórz zmienną, np. o nazwie kwota do zapłaty, której zadaniem będzie zapamiętanie obliczonej wartości kupowanych biletów.  Będzie to wygodne rozwiązanie, dzięki któremu program będzie bardziej przejrzysty.

2
Ćwiczenie 13

Zapisz w postaci listy kroków działanie duszka‑kota na czwartym ekranie. Duszek powinien obliczyć wartość biletów i poinformować, czy zapłacona kwota jest wystarczająca. Jeśli wystąpi konieczność wydania reszty, nadaj komunikat wydaj resztę.

2
Ćwiczenie 14

Utwórz skrypt uruchamiany po otrzymaniu komunikatu kupuję według algorytmu z rozwiązania poprzedniego ćwiczenia.

iwePopYOpl_d1111e498

Duszek oblicza resztę

Kwota reszty to różnica pomiędzy kwotą wprowadzoną przez kupującego a kwotą do zapłaty. Możesz założyć, że twój automat ma nieograniczoną liczbę monet każdego nominału.

2
Ćwiczenie 15

Podaj sposób ustalenia liczby monet poszczególnych nominałów, jakie ma wydać automat jako resztę z wprowadzonej przez kupującego kwoty.

2
Ćwiczenie 16

Zapisz w postaci listy kroków algorytm wydawania reszty minimalizujący liczbę wydawanych monet.

Ważne!

Taką strategię postępowania, w której w najbliższym kroku bierzemy to, co uważamy za najlepsze (w tym wypadku monetę o największym nominale mniejszym od kwoty, która pozostała do wydania), nazywamy metodą zachłannąiwePopYOpl_d1111e536metodą zachłanną.

2
Ćwiczenie 17

Utwórz nowy blokiwePopYOpl_d1111e449nowy blok dla duszka wydającego resztę zgodnie z algorytmem z poprzedniego ćwiczenia. Parametrem bloku będzie kwota reszty wyrażona w groszach. Nie musisz zerować listy reszta, zostało już to zrobione podczas tworzenia listy (po kliknięciu zielonej flagi).

2
Ćwiczenie 18

Zmodyfikuj skrypt dla duszka wydającego resztę, uruchamiany po otrzymaniu komunikatu kupuję. Przed nadaniem komunikatu wydaj resztę wstaw wywołanie bloku Oblicz resztę. Pamiętaj, że parametrem bloku jest liczba całkowita, która jest kwotą reszty w groszach.

iwePopYOpl_d1111e536
iwePopYOpl_d1111e549
iwePopYOpl_d1111e568

Duszek wydaje resztę

Ostatnim elementem oprogramowania automatu będzie wydanie reszty zgodnie z wyznaczoną liczbą monet o poszczególnych nominałach. Odpowiedzialny za to będzie duszek Monety po otrzymaniu komunikatu wydaj resztę. Zwróć uwagę, że duszek jest jeden (ma sześć kostiumów, poszczególne nominały monet), a na scenie należy wyświetlić kilka monet, często także o takich samych nominałach. Umożliwia to mechanizm klonowania duszków. Więcej o klonowaniu duszków dowiesz się tutajiwePopYOpl_d1111e593tutaj.

2
Ćwiczenie 19

Przygotuj dwa skrypty związane z wydawaniem reszty dla duszka Monety:

  1. Uruchamiany po otrzymaniu komunikatu wydaj resztę. Jego zadaniem jest tworzenie/generowanie klonów duszka Monety zgodnie z ustawieniami na liście reszta.

  2. Uruchamiany w wyniku wystąpienia zdarzenia gdy zaczynam jako kloniwePopYOpl_d1111e593gdy zaczynam jako klon (duszek powinien pokazać się na scenie w losowym miejscu i wydać dźwięk wypadającej monety).

W podpowiedzi znajdziesz algorytmy, według których należy przygotować skrypty.

iwePopYOpl_d1111e593