Napisz procedurę z jednym parametrem MOTYW :n, która dla danej wartości parametru :n - określającej stopień złożoności rysunku, utworzy na środku ekranu możliwie duży rysunek, podobny do przedstawionych poniżej. Parametr :n może przyjmować wartości od 0 do 8. Skutki polecenia dla wartości 0, 1, 2 oraz 3 możesz zobaczyć na odpowiednich rysunkach:
Pierwszy krok polega na wyodrębnieniu problemu. Jak widać po obrazkach rozmiar błękitnej planszy jest stały, więc istnieje potrzeba dostosowana wielkości elementów do planszy. Ponadto na każdym obrazku w środku jest żółty kwadrat o szerokości i wysokość równej dwóm najkrótszym odcinkom na rysunku. Wzór, który jest rysowana na kolejnych rysunkach począwszy od n większego od dwóch, składa się z powtarzającego się elementu, który jest rysowany 4(n - 1) razy.
Rozwiązanie zadania najlepiej rozpocząć od najprostszego elementu. Są nim 3 połączone kwadraty tego samego koloru. Taki element jest 1/4 większego elementu. Odpowiednie napisanie procedury pozwoli ją wywołać w celu narysowania całości wzoru.
Procedura MOTYW_L przyjmuje cztery argumenty: :a - długość najkrótszego boku, :kRuch - kierunek ruchu czy kolejne linie mają być rysowane do przodu czy do tyłu, z założenia przyjmuje tylko wartości 1 i -1. W podobny sposób działa argument :kSkret - określa kierunek skrętu, dla 1 skręca w prawo, a dla -1 w lewo. Ostatni argument :kolor określa jakiego koloru element zostanie narysowany.
Ustal kolor (2.) pisaka oraz (3.) malowania. (4. - 16.) Narysuj figurę. W przypadku poruszania się wartość pomnóż przez :kRuch, a w przypadku skrętu pomnóż przez :kSkret. (17.) Zresetuj pisak do domyślnego koloru.
Posiadając procedure MOTYW_L można przejść do rysowania pierścienia wzoru. Przyjmuje argumenty: :a - najkrótszy bok elementu oraz :n - ile elementów wzoru koło siebie ma się znajdować.
(3.) Narysuj cztery identyczne części: (4. - 15.) w każdej części rysuj :n elementów składających się z figur rysowanych przez procedurę MOTYW_L. (16. - 17.) Po narysowaniu boku przejdź do rysowania następnego.
Główną procedurę rozpocznij od (2.) ustalenia maksymalnej wielkości i (3.) wyliczenia najkrótszego boku. Następnie (4. - 6.) przejdź do rysowania kwadratu w tle i (7. - 14.) go narysuj. (15.) Zresetuj kolor pisaka.
(16. - 21.) Przejdź do rysowania pierścienia wzoru najbliżej krawędzi i (22. - 30.) narysuj :n - 1 pierścieni. Zakładamy, że :n - ty pierścień to kwadrat, który będzie rysowany w dalszej części kodu.
(31. - 38.) Narysuj żółty kwadrat i (39.) ustal kolor pisaka na czarny.
Napisz procedurę STRZAŁKI, która utworzy na środku ekranu możliwie duży rysunek układu strzałek, taki jak poniżej:
(2.) Ustal maksymalną wysokość i (3.) wylicz długość najkrótszego boku. (4. - 7.) Przesuń do rysowania ramki i (8. - 11.) ją narysuj. Potem (12.) wróć i (13. - 18.) przejdź do rysowania strzałek w lewym górnym rogu.
(19.) Narysuj cztery grupy strzałek po (20.) cztery strzałki: (21. - 37.) Narysuj strzałkę i (38.) obkręć się w prawo. (40. - 44.) Po narysowaniu całej kolejnej grupy przejdź do rysowania kolejnej.
Filharmonia Narodowa w Warszawie - instytucja wielce zasłużona dla polskiej kultury - obchodzi w tym roku jubileusz stulecia istnienia. Napisz procedurę POSADZKA_FN, która tworzy na ekranie możliwie duży rysunek posadzki z holu warszawskiej filharmonii (taki jak poniżej).
Rozwiązanie w pliku do pobrania
Napisz procedurę SIATKA :n :x :y :rd, która tworzy na ekranie możliwie dużą siatkę n x n kwadratów z czarną dziurą.
Węzły - tzn. punkty przecięcia linii siatki - identyfikujemy za pomocą współrzędnych siatkowych. Przyjmujemy, że lewy dolny róg siatki ma współrzędne 0 0, a przeciwległy węzeł w prawym górnym rogu - ma współrzędne n n.
Czarna dziura powinna być kwadratem o lewym dolnym rogu w węźle o danych współrzędnych x oraz y i rozmiarze rd x rd kwadratów jednostkowych - oczek siatki, a w przypadku, gdy taki kwadrat nie mieści się na siatce - jego obcięciem do obszaru siatki.
Poniższy rysunek przedstawia skutki wywołania polecenia SIATKA 6 1 2 3, SIATKA 8 6 5 1, SIATKA 4 2 1 7 oraz SIATKA 8 2 6 5:
Standardowo na początku: (2.) ustal maksymalny rozmiar rysunku i (3.) ustal bok małego kwadratu. Potem (4. - 9.) przejdź do lewego dolnego rogu. (W celu narysowania kwadratu o współrzędnych (0, 0)).
(10.) Narysuj :n poziomów: (11.) zapamiętaj indeks poziomu i (12.) narysuj :n kwadratów. (13.) Zapamiętaj indeks kolumny. (14. - 18.) Sprawdź czy pole ma być zamalowane i na tej podstawie ustala kolor malowania. (19. - 24.) Narysuj kwadrat. (25. - 29.) Przejdź do rysowania kolejnego kwadratu. Po narysowaniu całego rzędu: (31. - 36.) wróć na początek rzędu i przejdź do rzędu wyżej.