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

Podobne dokumenty