Napisz procedurę KT :bok, która tworzy na środku ekranu rysunek przedstawiony poniżej. Parametr :bok określa długość boku największego, zewnętrznego kwadratu.
Gdyby nie fakt, że w każdym okienku jest inny obrazek to można by napisać funkcję, która powtarza rysowanie 9 identycznych pól poprzez pętle powtórzeń po 3. Nie oznacza to jednak, że w tym przypadku nie można tego zastosować. Wystarczy jedynie na podstawie pozycji pola określić jakie powinno być wypełnienie i takie narysować.
KT jest to procedura, która nie polega na żadnych funkcjach pomocniczych.
Na początek (2.) ustalany jest bok kwadratów w siatce. (3. - 6.) przesuń żółwia do lewego, dolnego kwadratu. Warto zauważyć, że przesunięcie jest do środka tego pola, a nie jego któregoś rogu.
Rozpoczynamy rysowanie pól: (7.) Narysuj trzy wiersze. Za każdym razem (8.) zapamiętaj numer rysowanego wiersza i (9.) narysuj w wierszu trzy pola. Pierwszy etapem rysowania pola jest (10. - 20.) narysowanie obramowania. Należy pamiętać, że żółw przed rozpoczęciem znajduje się w środku obszaru.
Drugi etap rysowania (21.) polega na wyborze co powinno zostać umieszczone w polu. W przypadku, gdy suma numeru wiersza oraz numeru kolumny jest parzysta to obie współrzędne są parzyste, albo nieparzyste. Wtedy należy narysować wiatraczek z kwadratami.
(37.) Jednak w przypadku, gdy pole ma współrzędne o różnej parzystości to wystarczy narysować czarny, obrócony kwadrat. Program, aby poprawnie wykonał rysunek musi jeszcze (49. - 53.) przesuwać żółwia w prawo po narysowaniu każdego pola, a po narysowaniu całego wiersza (55. - 58.) o jeden poziom wyżej i przejść do pierwszej kolumny.
Figury przedstawione na rysunku niżej to przykłady tak zwanych plastrów, o różnych stopniach złożoności: 3, 4 oraz 8.
Napisz procedurę PLASTER :n rysowania plastrów o dowolnym stopniu złożoności :n. Po wywołaniu procedury PLASTER z dowolną wartością parametru :n, nie mniejszą niż 1 i nie większą niż 10, na ekranie powinien powstać rysunek plastra o złożoności :n.
Przed rozpoczęciem pisania głównej procedury warto zastanowić się jakie zależności zachodzą pomiędzy kolejnymi wierszami. Z pewnością nietrudno zauważyć, że w każdym wierszu jest o jeden sześciokąt mniej. Sześciokąt można podzielić na 6 mniejszych, równych trójkątów. Na tej podstawie łatwo stwierdzić, że każdy kolejny wiersz jest przesunięty w prawo względem poprzedniego o wysokość jednego z takich trójkątów.
Powtarzającym się elementem rysunku jest sześciokąt, dlatego warto napisać procedurę pomocniczą PLASTER_el, która narysuje sześciokąt o zadanej długości boku :a.
Procedura rysująca piramidę sześciokątów wygląda następująco:
(2.) Określ wysokość strony. (3.) Oblicz bok sześciokąta i na tej podstawie (4.) wysokość trójkątów w tym sześciokącie. Potem (5. - 8.) przejdź do rysowania pierwszego wiersza.
Drugi etap polega na (9.) narysowaniu :n wierszy. (10.) Oblicz ile plastrów znajdzie się w rysowanym wierszu i (11. - 17.) narysuj wszystkie. (18. - 21.) Po zakończeniu rysowania wiersza przejdź do następnego.
Napisz bezparametrową procedurę KO, która tworzy możliwie duży losowy rysunek, złożony z dwunastu figur. Wewnętrzne figury są okręgami, a zewnętrzne - kwadratami o bokach równoległych do krawędzi ekranu. Co drugi obszar pomiędzy sąsiednimi figurami jest zamalowany na czarno. Obszar wewnątrz najmniejszego okręgu jest biały. Rysunek zawiera co najmniej jeden okrąg i co najmniej jeden kwadrat. Poniżej pokazane są trzy przykładowe rysunki, z wielu jakie mogą powstać po wywołaniu procedury KO. Stosunki wielkości kolejnych figur powinny być takie, jak na przykładowych rysunkach.
Do rysowania kół można użyć polecenie kropka. Problem jednak pojawia się w przypadku rysowania wyśrodkowanego kwadratu, ale wystarczy napisać do tego specjalną procedurę. Poza tym do losowania wystarczy użyć polecenie losowa, a czarny i biały kolor ustalać na podstawie parzystości numeru rysowanej figury.
Procedura wyśrodkowanego kwadratu przyjmuje dwa parametry :a - bok rysowanego kwadratu oraz :kolor - na jaki kolor ma zostać zamalowany kwadrat.
Kod procedury KO wygląda następująco:
(2.) Ustal maksymalną wysokość rysunku i oblicz (3.) różnice pomiędzy kolejnymi figurami. (4.) Wylosuj ile będzie kwadratów pamiętając, że ma być conajmniej jeden, a maksymalnie 11. (5.) Zadeklaruj z jakich kolorów będzie składał się rysunek. (6.) Narysuj 12 figur: (7.) wybierz kolor figury. (8.) Na podstawie numeru powtórzenia: (9.) narysuj kwadrat, albo (11. - 12.) koło. (14.) Po narysowaniu każdej figury zmniejsz szerokość figury o wyliczoną na początku wartość.
Napisz procedurę PLECIONKA, która tworzy możliwie duży poniższy rysunek trójkolorowej plecionki.
Napisz procedurę PASEK :n, która tworzy możliwie duży rysunek plecionego paska. Parametr :n określa liczbę elementów składających się na pasek, analogicznych jak w punkcie A, ale co drugi element ma zamienione kolory. Poniższy, przykładowy rysunek pokazuje, co powstanie po wywołaniu PASEK 4.
Ze względu na fakt, że wzór powtarza się w procedurze PLECIONKA oraz PASEK to pojedynczy element rysować będzie procedura PLECIONKA_wzor, która przyjmie 4 argumenty :a - szerokość kwadratu oraz :kolor1, :kolor2, :kolor3 - kolory odpowiednich elementów. Dzięki temu zmiana kolorów w kolejnych częściach plecionki stanie się prostsze.
Rysowanie wzoru to długa procedura, która nakłada na siebie kolejne warstwy odpowiednich elementów w odpowiednim kolorze. Procedura rozpoczyna się od (2.) podzielenia rysunku na siatkę 3x3 i (3.) wyliczeniu przekątnej powstałych kwadratów. Potem (4. - 11.) rysowany jest kwadrat znajdujący się w tle plecionki.
Następnie rysowane są czarne pasku, które może tego nie widać na pierwszy rzut oka można narysować (12.) powtarzając pewne instrukcje dwa razy. (13. - 23.) Najpierw rysowany jest czarny element wypełniający kwadrat aż do rogu. Potem procedura (24.) przechodzi w róg powyżej i (25. - 34.) rysuje drugi czarny element. Potem (35. - 38.) wystarczy przejść do następnego rogu i wywołać te same instrukcje, aby narysować wszystkie czarne elementy.
Ostatni etap polega na (44. - 57.) na rysowaniu białych kwadratów. (58. - 61.) powrotu do lewego dolnego rogu rysunku i (62.) resecie koloru pisaka.
Mają już napisaną procedurę rysującą wzór wystarczy w procedurze PLECIONKA (2.) ustalić wysokość rysunku, (3. - 6.) przejść do rysowania i (7.) wywołać procedurę rysującą wzór z odpowiednimi parametrami.
Rysowania paska ma podobny schemat do plecionki, ale wymaga pewnych warunków.
Po pierwsze (2.) dla :n = 1 wystarczy narysować PLECIONKA. Jeśli nie to (15., 16.) należy ustalić obszar rysowania. i (17.) wybrać większą z wyliczonych długości. (18.) Przejść do rysowania i (22.) narysować :n elementów plecionki. Jednak należy rozpoznać parzyste i nieparzyste elementy paska, ponieważ rysując z tym samym schematem pasek nie będzie miał jednolitego wzoru.