Uwaga: Wszystkie pliki zawarte w folderze 17-10
Transkrypt
Uwaga: Wszystkie pliki zawarte w folderze 17-10
1 Projekt „Matematyczne bingo” w Imagine Logo Wiele prostych gier logicznych i planszowych można zaprogramować w Imagine Logo, stosując następujące stopniowanie trudności: 1. Ekran monitora służy do umieszczenia planszy do gry, której pola podlegają zmianom zgodnie z regułami gry. Komputer nie kontroluje poprawności ruchów wykonywanych przez gracza (graczy) oraz momentu zakończenia gry 2. Oprócz korzystania z interaktywnej planszy, komputer kontroluje przebieg gry, sygnalizuje błędy popełnione przez gracza oraz rozstrzyga o zakończeniu gry. 3. Komputer występuje w roli aktywnego gracza, realizuje zaprogramowaną strategię gry. Matematyczne bingo jest odmianą gry w bingo, w której obowiązują następujące reguły: 1. Na planszy 5 na 5 są umieszczone losowe liczby z zakresu od 2 do 20. 2. Komputer losuje liczby z zakresu od 1 do 10 i wyświetla działanie sumowania tych liczb. Wiadomo, że wynik sumowania nie przekracza 20. 3. Zadaniem gracza jest kliknięcie na planszy wartości sumy: – jeśli był to poprawny wynik sumowania, liczba znika z planszy; – jeśli gracz kliknął niewłaściwą liczbę, to liczony jest mu błąd; – jeśli nie ma na planszy wartości sumy, należy wybrać przycisk Pass. 4. Każda z powyższych czynności powoduje wygenerowanie nowego działania. Gra kończy się, gdy na planszy gracz uzyska 5 pustych pól w wierszu lub kolumnie lub na jednej z dwóch przekątnych planszy. Pojawia się wtedy napis "Bingo!" Początkowa i końcowa faza gry Analiza zadania: Aby przeprowadzić rozgrywkę w Matematyczne bingo potrzebujemy: – generować planszę z losowymi liczbami, – generować przykłady działań, – sprawdzać, czy został prawidłowo wykonany ruch gracza i dokonywać odpowiednich zmian na planszy (zniknięcie liczby, zwiększanie licznika pomyłek), – sprawdzać, czy gracz osiągnął bingo. Projektowanie rozwiązania: 1. Plansza jest złożona z 25 przycisków o jednakowych rozmiarach. Napis na przycisku reprezentuje losową liczbę. Do utworzenia planszy przygotujemy procedurę plansza. styczeń 2004 Ewa Kołczyk 2 2. Dodatkowe przyciski to: – „Nowa gra”, z którym jest związane utworzenie nowej planszy oraz wyzerowanie licznika pomyłek, – „Pass”, który umożliwia ominięcie przykładu działania, gdy jego wynik nie jest reprezentowany na planszy. 3. Pola tekstowe: – wyświetlanie wygenerowanego działania, – wyświetlanie licznika pomyłek, – wyświetlanie napisu „Liczba pomyłek”, – wyświetlanie napisu „BINGO!” przy zakończeniu gry. 4. Zdefiniujemy procedurę generujprzykład do wylosowania nowego działania oraz procedurę kontrola, która odpowiada za sprawdzanie poprawności ruchów gracza, za zmiany na planszy oraz za kończenie gry. Implementacja: 1. Wszystkie przyciski na planszy mają cechy wspólne: – rozmiar (ustalamy 40 na 40), – reakcję na zdarzenie gdywciśnięty – wywołanie procedury kontrola. Różnią się natomiast: – położeniem na ekranie, – wyświetlanym napisem, – nazwą. Definiujemy nową klasę pochodną od przycisk o nazwie bingo: nowaklasa "przycisk "bingo [rozmiar [40 40] gdywciśnięty [kontrola]] W oknie pamięci klikamy klasę bingo i dodajemy do niej procedurę kontrola: oto kontrola ustalnapis " już Jest to pierwsza wersja tej procedury, powoduje ona zniknięcie liczby z przycisku, ale nie wykonuje żadnego sprawdzania. 2. Zajmiemy się teraz utworzeniem planszy. Zdefiniujemy w oknie głównym procedurę plansza i wywołamy ją. Powstanie 25 nowych przycisków, co można zobaczyć w oknie pamięci. oto plansza niech "x -140 niech "y 110 powtórz 5 [niech "r npw powtórz 5 [niech "s npw niech "liczba_los 2 + losowa 19 nowy "bingo [nazwa (słowo :r :s) poz (zd :x :y) napis (:liczba_los)] przyp "x :x + 40] przyp "x -140 przyp "y :y - 40] już Nowy przycisk bingo jest tworzony poleceniem nowy "bingo [nazwa (słowo :r :s) poz (zd :x :y) napis (:liczba_los)] Nazwa przycisku określa jego położenie na planszy. Ułatwi nam to później sprawdzanie, czy gracz osiągnął bingo. 3. Utworzymy pole tekstowe pt1 do wyświetlania działania. Zostanie ono wypełnione przez procedurę generujprzykład: oto generujprzykład niech "skl1 1 + losowa 10 niech "skl2 1 + losowa 10 przyp "wynik :skl1 + :skl2 pt1'ustalzawartość (słowo :skl1 "+ :skl2 "=) już W procedurze tej zmienne :skl1 i :skl2 są lokalne, natomiast zmienna :wynik jest globalna, gdyż w niej będziemy przechowywać wynik sumowania, potrzebny nam do sprawdzania poprawności ruchu gracza. styczeń 2004 Ewa Kołczyk 3 Procedura generujprzykład powinna być wywołana w następujących okolicznościach: – po rozpoczęciu nowej gry – tworzymy przycisk "Nowa gra" i jako reakcję na zdarzenie gdywciśnięty wpisujemy plansza generujprzykład – po kliknięciu na liczbę na planszy – w procedurze kontrola dokonujemy zmian: oto kontrola jeśli napis = :wynik [ustalnapis "] generujprzykład już – po ominięciu przykładu – tworzymy przycisk "Pass " i jako reakcję na zdarzenie gdywciśnięty wpisujemy generujprzykład. 4. Procedura kontrola powinna jeszcze: – zwiększać licznik pomyłek, – kończyć grę z napisem BINGO!, gdy zajdzie jedna z poniższych sytuacji: ⇒ w wierszu lub w kolumnie, w której kliknęlismy ostatnio powstało 5 pustych pól, ⇒ liczba, którą ostatnio kliknęłiśmy leży na jednej z dwóch przekątnych i na przekątnej planszy powstało 5 pustych pól. 5. Zdefiniujmy pozostałe pola tekstowe: – napis "Liczba pomyłek" w polu tekstowym pt2 i obok niego pole tekstowe pt3 z wpisaną początkowo liczbą 0, – pole tekstowe pt4 z napisem BINGO!, który początkowo powinien być niewidoczny. Początkowe zawartości tych pól tekstowych są ustalane jako reakcja na wciśnięcie przycisku "Nowa gra" – dodajemy polecenia pt4'ustalwidoczny "fałsz pt3'ustalzawartość 0 6. Ostateczna wersja procedury kontrola. Jeśli gracz osiągnął bingo są wykonywane polecenia: pt4'ustalwidoczny "prawda stop – czyli uczynienie widocznym napisu BINGO! oraz zatrzymanie procedury. oto kontrola ; jeśli została naciśnięta poprawna liczba, to znika, w przeciwnym razie jest zwiększany licznik pomyłek w polu tekstowym pt3 jeżeli napis = :wynik [ustalnapis "||][pt3'ustalzawartość pt3'zawartość + 1] ; 5 trafień w wierszu niech "r pierw mojanazwa niech "jestbingo "prawda powtórz 5 [jeśli proszę słowo :r npw [napis]<> "|| [przyp "jestbingo "fałsz]] jeśli :jestbingo [pt4'ustalwidoczny "prawda stop] ; 5 trafień w kolumnie niech "r ost mojanazwa niech "jestbingo "prawda powtórz 5 [jeśli proszę słowo npw :r [napis]<> "|| [przyp "jestbingo "fałsz]] jeśli :jestbingo [pt4'ustalwidoczny "prawda stop] ; jest na przekątnej głównej jeśli (pierw mojanazwa) = (ost mojanazwa) [niech "jestbingo "prawda ; jest 5 trafień na przekątnej powtórz 5 [jeśli proszę słowo npw npw [napis]<> "|| [przyp "jestbingo "fałsz]] jeśli :jestbingo [pt4'ustalwidoczny "prawda stop]] ; jest na przekątnej drugiej jeśli (pierw mojanazwa) + (ost mojanazwa) = 6 [niech "jestbingo "prawda ; jest 5 trafień na przekątnej powtórz 5 [jeśli proszę słowo npw 6 - npw [napis]<> "|| [przyp "jestbingo "fałsz]] jeśli :jestbingo [pt4'ustalwidoczny "prawda stop]] generujprzykład już Na podstawie tutorialu Imagine Logo Moniki Tomcsanyiovej http://www.edi.fmph.uniba.sk/tomcsanyiova/imagineTutorial/11Bingo/index.htm styczeń 2004 Ewa Kołczyk