Sterowanie żółwiem
Programowanie polega na opisywaniu w postaci procedur (czyli poleceń zrozumiałych dla tego języka) prostych czynności, które ma wykonać żółw.
Najprostsze procedury rozwiązywane są przez polecenia pierwotne (procedury), które żółw zna niejako „od urodzenia”, dzięki czemu możesz ich używać bez konieczności definiowania.
W programie Logomocja istnieje kilkaset procedur pierwotnych, które możemy podzielić na dwie grupy:
Większość procedur i funkcji wymaga podania określonych danych – parametrów.
To, jaką czynność właśnie wykonuje żółw, zależy od trybu jego pracy; może rysować, ścierać lub po prostu się przemieszczać po ekranie. Aby żółw przeszedł do odpowiedniego trybu, korzystamy z następujących komend:
polecenie | skrót | wyjaśnienie | typ |
---|---|---|---|
podnieś | pod | podnieś pisak żółwia – żółw przesuwa się po ekranie nie zostawiając za sobą śladu |
p |
opuść | opu | opuść pisak żółwia – żółw przesuwa się po ekranie zostawiając za sobą linię |
p |
ścieraj | ścier | ścieraj – żółw przesuwa się po ekranie ścierając istniejące elementy |
p |
∗ typ p – polecenie pierwotne f – funkcja pierwotna
Spróbuj posłużyć się najbardziej elementarnymi procedurami:
polecenie | skrót | wyjaśnienie | typ |
---|---|---|---|
pż | pokaż wszystkie aktywne żółwie na ekranie
|
p | |
sż | schowaj wszystkie żółwie |
p | naprzód x
|
np x |
porusza żółwiem o x kroków (pikseli) do przodu |
p |
wstecz x
|
ws x |
porusza żółwiem o x kroków (pikseli) do tyłu |
p |
prawo x |
pw x |
obraca żółwia o x° w prawo |
p |
lewo x |
lw x |
obraca żółwia o x° w lewo |
p |
ustalKierunekkąt skieruj kąt
|
skierkąt |
żółw wykonuje obrót przyjmując kierunek wyznaczony przez dany kąt Kierunek jest wyrażany w stopniach, narasta zgodnie z ruchem wskazówek zegara zaczynając od północy. Na przykład, ustalKierunek 0 ustawia aktywne żółwie w kierunku na północ, a ustalKierunek 90 ustawia je w kierunku na wschód.
|
p |
czyść | cs | czyści ekran i ustawia żółwia na pozycji wyjściowej – zwykle (0,0) w kartezjańskim układzie współrzędnych |
p |
zmaż | Strona lub plansza jest czyszczona, tj. jest wypełniana kolorem tła. Zmaż nie zmienia kierunku ani pozycji ani stanu pisaka żadnego z żółwi. |
p | |
wróć | Przesuwa każdego aktywnego żółwia do jego wyjściowej pozycji – zwykle (0,0) i wyjściowego kierunku. Aktualny stan, kolor, grubość i wzór pisaka nie zmieniają się. Żółw wracając do pozycji wyjściowej nie rysuje linii. Żółw pozostaje widoczny, jeśli wcześniej był widoczny. Ekan nie jest czyszczony. |
p | |
powtórzliczba lista-P |
Powtarza daną listę poleceń daną liczbę razy.
|
p | |
okrąg d |
Żółw rysuje okrąg o podanej średnicy. Środek okręgu jest w miejscu, w którym stoi żółw. |
p | |
koło d |
Żółw rysuje koło o średnicy liczba i środku w aktualnej swojej pozycji. Żółw używa swojego aktualnego koloru, grubości i wzoru pisaka oraz koloru malowania. |
p | |
wielokątkod rysunku |
żółw rysuje wypełniony wielokąt na podstawie kodu rysunku.
|
p | |
ustalPoz [x,y] |
napoz[x,y] |
Przemieszcza żółwia na określoną pozycję bezwzględną na ekranie Argumentem jest lista dwóch liczb, współrzędne X i Y np. napoz [0 0] |
p |
czekaj n |
Powoduje zatrzymanie żółwia na daną liczbę milisekund. czekaj 1000 zatrzymuje żółwia na 1 sekundę. |
p | |
pwk liczba |
Wynikiem jest pierwiastek kwadratowy danej liczby. Dana liczba musi być nieujemna. |
F | |
jld | Nazwa funkcji powstała od „jak los da”.
Wynikiem jest słowo jld , które może być daną wielu poleceń (na przykład naPoz , ustalKolPis itd.) jako zamiennik losowej wartości. Na przykład, ustalGrubość jld jest równoważne z ustalGrubość 1 + losowa 20 ; prawo jld jest równoważne z prawo1 + losowa 90 itd.
|
F |
∗ typ p – polecenie pierwotne f – funkcja pierwotna
Nic trudnego, prawda?
Jak zatem narysować poniższy rysunek?
Nic prostszego! Należy pokazać żółwia, następnie przejść żółwiem o 100 pikseli do przodu, obrócić go o 45° w prawo i przejść nim o 100 pikseli do przodu. Teraz obrót w prawo 90° i znowu 100 pikseli do przodu.Na koniec ostatnie 45° w prawo i 100 pikseli. do przodu. Już.
Zatem Twój „program” będzie wyglądał następująco:
Narysowanie kwadratu o określonym przez Ciebie boku jest stosunkowo łatwe. Musisz postawić cztery kreski obrócone względem siebie o 90°.
Zauważ, że w powyższym zadaniu czterokrotnie wykonałeś tą samą czynność: poruszałeś się naprzód, a następnie obracałeś żółwia o 90° w prawo. Program znacznie by się uprościł, gdyby można było nakazać żółwiowi pewne czynności wykonać kilkakrotnie. Spróbuj:
Zastanów się i pomyśl o jakie skręca żółw? Z matematyki powinieneś wiedzieć ile wynosi kąt wewnętrzny w takim trójkącie. Nieobce ci powinny być też takie pojęcia, jak: kąt pełny, półpełny, kąty dopełniające, przyległe oraz kąty wewnętrzne i zewnętrzne.
Zwróć uwagę, że ponieważ przyjęliśmy założenie, że żółw podczas rysowania figur foremnych obraca się zawsze w prawo to, aby jego podstawa była pozioma – należało przed wydaniem polecenia rysowania trójkąta skierować żółwia na zachód.
Program pamięta polecenia wydawane żółwiowi w trakcie danej sesji (od otwarcia do zamknięcia programu), ale tworzenie bardziej złożonych projektów byłoby praktycznie niemożliwe, gdybyśmy nie mogli zapisać poleceń dla żółwia. W przypadku niedokończenia projektu musielibyśmy wszystko zaczynać od nowa. Dlatego też polecenia dla żółwia łączymy w procedury.
Aktualny kolor, grubość i wzór pisaka żółwia są pamiętane w jego ustawieniach kolpis, grubość i wzórpis. Te ustawienia można odczytać lub modyfikować następującymi procedurami:
polecenie | skrót | wyjaśnienie | typ |
---|---|---|---|
ustalGrubośćgrubość_pisaka |
ugp | Ustala grubość pisaka dla wszystkich aktywnych żółwi – żółw rysuje linie (aktualnym kolorem, grubością i wzorem) tylko wtedy, kiedy pisak jest opuszczony Grubość może wynosić od 1 do 15 pikseli. |
p |
ustalKolPis kolor |
ukp | Ustala kolor pisaka dla wszystkich aktywnych żółwi – kolor może być:liczbą całkowitą od 0 do 15 włącznie, oznaczającą jeden z 16 kolorów podstawowej palety barw nazwą koloru, na przykład czerwony, czerwony11, ciemnoniebieski2 itd. kodem RGB, na przykład [128 128 0] słowem jld oznaczającym losowy kolor |
p |
ustalWzórPiswzór_nr |
uwp uwz |
Ustala wzór pisaka dla wszystkich aktywnych żółwi – używany przy opuszczonym pisaku. Domyślną wartością wzoru pisaka dla nowotworzonych żółwi jest linia ciągła.Jest 7 dostępnych wzorów pisaka i linii tła, ponumerowanych od 0 do 6. Domyślnym wzorem jest 0. |
p |
Wszystkie zamalowania dotyczą aktualnego zakresu żółwia.
polecenie | skrót | wyjaśnienie | typ |
---|---|---|---|
ustalKolMalkolor |
ukm | Ustala kolor malowania wszystkich aktywnych żółwi – ten kolor jest używany przez polecenia zamaluj i wielokąt. |
p |
ustalWzórMalwzór
|
uwm | Ustala wzór malowania wszystkich aktywnych żółwi – ten wzór jest używany przez polecenia zamaluj i wielokąt.Domyślnym wzorem malowania jest wzór 0. |
p |
zamaluj | zam | żółw zamalowuje otaczający go obszar ograniczony najbliższymi liniami, używając koloru malowania. |
p |
Wskazówka: Do narysowania przekatnych kwadratu możesz użyć poleceń: napoz
lub np pwk
wielkość_boku
Wskazówka: Rysunek proponuję zacząć od narysowania zielonego kadłuba żaglówki, wykorzystując polecenie wielokąt
. Wcześniej ustal kolor malowania.
Podczas rysowania żagla zmień wzór malowania z domyślnego 0 (pełny) na 4.
Przeczytasj opis działania procedury pierwotnej napoz. Przeanalizuj algorytm działania procedury kontury przedstawionej poniżej i wykonaj ją, podając jako argument listę dwuelementowych list liczbowych. Zdefiniuj nowe procedury, z których każda, w wyniku wywołania procedury kontury z odpowiednimi parametrami, będzie rysowała różne kształty (np. figury geometryczne, rysunek żyrafy itp.).
oto kontury :dane
jeśli puste? :dane [stop]
napoz pierw :dane
kontury bp :dane
już
? kontury [[100 100][0 200]]
Przykład jednej z takich figur (rysunek obok) możesz zobaczyć wykonując procedurę klepsydra
oto klepsydra
cs
ugp 2 ukp 12
kontury [[100 100][0 200][100 200][0 100]
[100 0][0 0]]
ugp 1 ukp 0
już