Autorské riešenie
[stiahni]

Najprv preskúmajme z akých častí sa skladá výsledný obrázok.

Obrázok mesta pozostáva zo 7 blokov, blok pozostáva zo 4 ulíc, ulica pozostáva zo 6 domov

Mesto je tvorené viacerými blokmi.
V každom bloku je rovnaký počet ulíc.
Na každej ulici je rovnaký počet domov.
Každý dom má náhodné rozmery a zmestí sa na štvorcovú parcelu zadaných rozmerov.

Po tomto rozbore vidíme, že problém nakreslenia mesta vieme rozložiť do menších podproblémov - nakreslenia bloku, nakreslenia ulice, nakreslenia domu.

Poďme postupne vytvárať procedúry, začneme najjednoduchšou - nakreslením domu, potom ulice, bloku a napokon nakreslením celého mesta.

Dom vykresľujeme ako obdĺžnik s náhodnými rozmermi x, y. Pomocou príkazu urobtu “x nahodne :a priradíme do premennej :x náhodnú celočíselnú hodnotu od 0 do :a-1. Najjednoduchší spôsob vyfarbovania domov zabezpečíme pomocou príkazu polygon, pred ktorým musíme použiť príkaz na nastavenie náhodnej farby pera nechFp ?

viem dom :a
  urobtu "x nahodne :a
  urobtu "y nahodne :a
  pd
  nechFp ?
  polygon 
    [opakuj 2 
       [do :x vp 90 do :y vp 90]]          
  ph
koniec

Ulica pozostáva z :d domov s veľkosťou štvorcovej parcely so stranou :a. Vykreslenie ulice zabezpečíme opakovaným vykresľovaním domu s posunom na nasledovnú pozíciu domu. Po vykreslení ulice je potrebné ešte posunúť korytnačku na začiatok ulice.

viem ulica :d :a
  opakuj :d 
    [dom :a 
     vp 90 do 2*:a vl 90]
  vl 90 
  do 2*:d*:a 
  vp 90
koniec

Blok pozostáva z :u ulíc, v každej je :d domov postavených na štvorcových parcelách s rozmerom :a. Podobne ako pri vykresľovaní ulice aj v prípade bloku sa snažíme zabezpečiť návrat na počiatočnú pozíciu t.j. na začiatok bloku.

viem blok :u :d :a
  opakuj :u 
    [ulica :d :a 
     do 2*:a]
  vz 2*:u*:a
koniec

Napokon vykreslíme mesto, ktoré pozostáva z :b blokov, z ktorých obsahuje :u uličiek, v každej s :d domami s náhodným štvorcovým rozmerom (maximálne :a). V cykle opakujeme vykreslenie bloku domov s patričným posunom na ďalší blok domov a patričným natočením. Pri natočení je dôležité si uvedomiť význam výrazu 360/:b, ktorý predstavuje uhol o ktorý sa natočíme pri vykresľovaní ďalšieho bloku domov.

viem mesto :b :u :d :a
  opakuj :b 
    [blok :u :d :a
     vp 90 
     do 2*:d*:a 
     vl 90-360/:b]
koniec

Vaše zaujímavé riešenia a najčastejšie chyby

Niektoré riešenia boli nedokončené a obsahovali behové chyby. Evidentným dôvodom nevyriešenia tejto úlohy bolo, že si riešitelia nevedeli rozložiť problém do menších podproblémov. Úspešnejšie riešenia obsahovali volania procedúr bez parametrov, ktoré síce v Imagine fungujú, ale tieto procedúry bez uvedených parametrov sa nedajú použiť (spustiť) samostatne. Odporúčame, aby pri ďalších kolách si súťažiaci pred odoslaním riešenia skontrolovali, že ich procedúry neobsahujú behové chyby a tiež, aby vymazali zbytočné procedúry, ktoré vytvorili len na otestovanie funkčnosti niektorých príkazov, či čiastkových podproblémov.