You are on page 1of 68

kola pre Mimoriadne Nadan Deti a Gymnzium, Teplick 7, 831 02 Bratislava

Mgr. Anino BELAN

uebn text pre terciu osemronho gymnzia

IMAGINE

BRATISLAVA 2004

Obsah
Pasieme korytnaku..............................................................................................................................5 Vzdelvanie korytnaky.......................................................................................................................7 Korytnaka s pamou..........................................................................................................................9 Korytnaka a parametre......................................................................................................................11 Rozhodn korytnaka.........................................................................................................................13 Korytnaka s perspektvou.................................................................................................................15 Vytrval korytnaka...........................................................................................................................17 Vnmav korytnaka...........................................................................................................................20 Vypotav korytnaka.......................................................................................................................22 Korytnaka a my...............................................................................................................................25 Korytnaky.........................................................................................................................................28 Korytnaka a rekurzia.........................................................................................................................30 Korytnaka a zoznamy.......................................................................................................................33 Korytnaka mnohch tvr.................................................................................................................35 Korytnaka a umenie..........................................................................................................................37 Korytnaka a tlaidl..........................................................................................................................40 Korytnaka a posvatka.....................................................................................................................42 Korytnaka a alie rafinovan funkcie.............................................................................................45 Korytnaka a hodiny...........................................................................................................................49 Korytnaka a potomkovia...................................................................................................................51 Rozpohybovan korytnaky ..............................................................................................................54 Explodujce korytnaky ....................................................................................................................57 Korytnaky a asomiera.....................................................................................................................59 Korytnaka a strnky..........................................................................................................................61 Korytnaka a kalkulaka....................................................................................................................66

Varovanie pre pedaggov: Napriek tomu, e sa tento text pouva v tercich gymnzia koly pre nadan deti, treba ma na pamti, e iaci naej koly maj informatiku od prvho ronka Z a nie s plne nesksen programtori. Niektor kapitoly s aj pre nich pomerne nron, rove vyadovanej abstrakcie a algoritmickej zrunosti je v nich vysok a v plnom rozsahu s ich schopn pochopi iba niektor. Texty je pokojne mon poui aj pri vyuovan informatiky vo vych ronkoch gymnzia. Pre zaiatonkov, alebo deti nich vekovch kategri mu sli ako vtan inpircia, ale vdy treba opatrne zvi, i je dan text pre dan skupinu iakov vhodn. Toto ponechvame na V pedagogick cit a majstrovstvo. Varovanie pre iakov: Programovanie je niekedy ak. Ale m t vhodu, e ak spravte hlpos, nsledky vinou vidte rchlo. A aliu, e maina rob presne to, o jej poviete (aj ke zaleka nie vdy to, o by ste chceli). A programovanie (okrem toho, e je ak) je aj pekn a ak mu prepadnete, u sa toho nezbavte. Anino

Prv kapitola

Pasieme korytnaku
Dvno pradvno, ke sa voda sypala, piesok lial a potae skoro ete ani neboli, vymyslel ktosi programovac jazyk a nazval ho LOGO. Prelo pr rokov, jazyk sa mal uteene k svetu a kadekto ho pouval a tak sa dala dokopy parta ud z bratislavskho Matfyzu a spravila prostredie, zvan Comenius Logo. I mnoh premnoh sa v tomto prostred vyteova mohli, svoje projekty v jazyku LOGO psali a na svete im blaene bolo. Ale as plynul neprosne alej, procesory zvovali svoju rchlos aj kapacitu a nereentrantn estns bitov aplikcie zhadzovali operan systmy a tak sa al vvojri rozhodli, e urobia prostredie nov, Imagine nazvan. A uinili tak. Objektov strnku jazyka LOGO posilnili, kresliace nstroje povylepovali, syntax pomenili a benm uvate om k dispozcii za rozumn cenu dali. Jazyk LOGO m od potaovho praveku a doteraz stredn postavu. Je ou korytnaka v naich zemepisnch rkach a d kach nazvan ofka. V zvislosti od verzie sa podob na trojuholnk, strelu krtkeho doletu, skuton korytnaku alebo nieo plne in. V prpade Imaginu sa (aspo zo zaiatku) bude na korytnaku celkom aj podoba . (Pozri obrzok 1.) Na obrzku okrem korytnaky vidte aj jednu nramne uiton vec: prkazov riadok. (To je ten biely obd nik na spodku.) To je riadok, cez ktor mete korytnake hovori , o m robi . Zadan prkazy sa objavia v edej ploche vyie. Na obrzku je vidie posledn zadan prkaz zmaz. Take hor sa pilotova korytnaku. Skste zada Obrzok 1: ofka prkaz vpravo 90 Korytnaka sprav vpravo-bok a pooto sa o 90 stupov. Bude vyzera takto: Podobne po zadan prkazu vavo 60 sa ofka oto do ava o 60 stupov a bude vyzera takto: Vyskajte si to.1 loha .1: Natote korytnaku tak, aby po vaich pokusoch zase smerovala hore. Ke u viete korytnaku otoi sprvnym smerom, mete ju posla do sveta. Zadajte jej prkaz dopredu 100.2 Korytnaka popolezie o 100 korytnach krokov (korytnaie kroky s mal, zodpovedaj jednotlivm bodom na obrazovke). A zanech za sebou stopu, ak vidte na obrzku. Vli toti so sebou atramentov pero a to arbe, kadia korytnaka chod. Zadajte teraz prkaz vpravo 90 (korytnaka sa oto) a potom stlate ipku hore. V prkazovom riadku sa vm znovu objav posledn zadan prkaz. Ak ipku stlate ete raz, objav sa prkaz, ktor ste zadali predtm (no, bolo to dopredu 100). Stlate <Enter> a prkaz sa vykon. Nieko kokrt za sebou pootote korytnaku o 90 stupov a polite ju o 100 krokov dopredu. Korytnaka vm nakresl tvorek a vy sa mete tei . Ak nieo pokazte, zadajte prkaz znovu a cel plocha sa uvedie do pvodnho stavu. loha . 2: Nakreslite tvorek. Prkazom znovu si zmate plochu.
1 Rada pre lenivch: V tomto prpade funguj aj skratky. Namiesto vpravo 90 sta psa vp 90. Podobne sa d vavo 60 skrti na vl 60. Ak ale pete prkazy, ktor m po vs ta niekto in, odporame pouva pln nzvy, aby sa v tom dotyn vyznal. 2 Skratka je do 100.

Ven prepisovanie prkazov a preklikvanie sa k nm s pomocou ipiek me by po ase navn a me liez na nervy. Preto je uiton vedie korytnake prikza , aby nejak innos nieko kokrt zopakovala. Ak naprklad chceme nakresli tvorec, musme tyrikrt zopakova prkazy dopredu 100 vpravo 90. Meme to spravi takto: opakuj 4 [dopredu 100 vpravo 90] Za prkaz opakuj napeme, ko kokrt to treba zopakova a do hranatch ztvoriek napeme prkazy, ktor treba zopakova . loha . 3: Vyskajte, o spravia prkazy opakuj 36 [dopredu 100 vpravo 70] opakuj 180 [dopredu 150 vpravo 178] Ak chcete, aby korytnaka za sebou iaru nerobila, zadajte prkaz peroHore, ak chcete, aby ju zase zaala robi , zadajte prkaz peroDolu.3 Ak chcete vymeni atrament v pere, napte prkaz nechFarbaPera erven (Pozor! Nzov farby zana uvodzovkami, ale nekon nimi.) Samozrejme mete zvoli aj in farby. Ak chcete zmeni hrbku pera, napte nechHrbkaPera 6 a hrbka pera bude 6 bodkov. 4 loha .4: S pomocou znmych prkazov nakreslite nasledujce obrzky:

3 Skratka pre peroHore je ph a pre peroDole je pd 4 Skratka pre nechFarbaPera je nechFP a pre nechHrbkaPera je nechHP

Druh kapitola

Vzdelvanie korytnaky
Ako sa dalo v prvej kapitole zisti , korytnaka ofka je ve mi poslun zviera. Vykon, o vm na prkazovom riadku uvid. V tomto je samozrejme problm. Korytnaka by isto rada vykonala aj to, o vm na srdci uvid, ale zatia ete nebolo vyvinut dostatone spo ahliv rozhranie, ktor by vedelo preta vae tby, take je to na tom prkazovom riadku. A o si do neho napete, to korytnaka (ak tomu porozumie) naozaj urob. To, e korytnaka nesprav to, o chcete, me ma dve priny. Bu porozumie vetkm vaim prkazom a vykon ich. A vy pozerte na vsledok a hovorte si: F ha, toto som naprogramoval ja ?!?!? To som tak teda nemyslel! Vtedy treba zada prkaz znovu a zada prkaz znovu, ale nejak inak, aby korytnaka spravila to, o chcete. Druh monos je t, e korytnake zadte prkaz, ktor nepozn. Naprklad chcete, aby korytnaka nakreslila tvorec a tak napete tvorec. Korytnaka je samozrejme cel zmten, v ivote o takom, e tvorec nepoula, a tak nape: Neviem ako sa rob tvorec Bu si sa pomlil v mene procedry alebo si ju ete vbec nedefinoval Skrtka, sna sa ako vldze, v nhlivosti ani iarky, ani bodky za vetou nepe, ale nevie. A v tejto kapitole sa dozviete, ako ju to naui . Je to jednoduch. Ak korytnaku chcete naui kresli tvorce, napte jej do prkazovho riadku toto: viem tvorec dopredu 70 vpravo 90 koniec Akonhle napete prkaz viem tvorec, prepne sa prkazov riadok do uiaceho reimu. Miesto znaku ? Sa na zaiatku zane objavova znak > a iaden z prkazov, ktor zadte sa nevykon. Vetky prkazy sa ale bud zaznamenva a pridva do prkazu tvorec. Tento stav bude trva a dovtedy, km nezadte prkaz koniec. Ke teraz napete prkaz tvorec, u sa neobjav chybov hlka. loha .1: Naute korytnaku prkaz tvorec pod a nvodu a vyskajte ho. Ak ste postupovali presne pod a nvodu, zistili ste, e ofka prkaz sce vykonala, ale e na tvorec sa to ve mi nepodob. Dvod je jednoduch uveden prkazy sme zabudli tyrikrt zopakova . Tto chybu treba napravi . D sa to spravi dvoma spsobmi. Ten komplikovanej je, e korytnaku naume cel prkaz odznova a tentokrt sprvne. Ten jednoduch je, e Imaginu siahneme do pamte a zmenme prkaz priamo tam. Najprv si treba zapn okno Pam. Urobte to tlaidlom vyznaenm na obrzku. Okno Pam nm uke cel vntro Imaginu. Njdete tu informcie o vetkch objektoch, ktor sa v om nachdzaj, o korytnakch, udalostiach, plochch a inch veciach o ktorch sme sa zatia nezmienili. A samozrejme je tam aj prkaz, ktor sme prve vytvorili. Ke si teda otvorte okno Pam a rozbalte chlievik s npisom Procedry, uke sa vm to, o vidte na obrzku v avo. Medzi procedrami sa vynma naa nov procedra tvorec. (Bodaj by sa nevynmala, ke je tam zatia jedin.) Ke na u dvojkliknete, otvor sa vm editor, v ktorom mete procedru upravi . loha . 2: Upravte procedru v editore tak, aby skutone nakreslila tvorec. Vyskajte, i to naozaj funguje. 7

Ke ste upravovali procedru tvorec, isto ste si vimli, e na okne editora je v avo dole tlaidlo s npisom Pridaj. S jeho pomocou mete rovno pridva nov procedry a psa ich v editore. Je to pohodlnejie, ako pridva procedry s pomocou prkazu viem z prkazovho riadku. Procedru tvorec teraz mete pouva rovnako ako ktorko vek in prkaz z Imagine. Me by dokonca pouit aj v inch zloitejch prkazoch. Vyskajte naprklad napsa prkaz opakuj 24 [tvorec vpravo 15] Korytnaka zmdrela a procedru vykon bravrne, rchlo a bez problmov. loha . 3: S pomocou prkazu tvorec nakreslite nasledovn tvary:

loha . 4: Napte procedry Trojuholnk a es uholnk a s ich pomocou nakresite nasledovn tvary:

a vyskajte prkaz opakuj 3 [ opakuj 10 [ esuholnk dopredu 10 ] vpravo 120 ] loha . 5: Napte prkaz Domek, ktor nakresl nasledovn tvar:

Tretia kapitola

Korytnaka s pamou
Kad lepia kalkulaka m aspo jednu pam . Imagine m dokonca okno pam .5 A ako uvidte v budcnosti, aj jednotliv korytnaky si mu velio pamta . Kalkulaka si pamt iba sla. Pam Imagine je vestrannejia. Me si pamta sla, slov alebo obrzky. A v tejto kapitole sa dozviete, ako do pamte nieo vloi a ako to zas vybra von. Predstavte si, e trpte neprekonate nou sklerzou a chcete, aby si Imagine niekde zapamtal slo 5, lebo ak si ho nezapamt on, vy ho okamite zabudnete. Muste si na to slo vyrobi krabiku (potaov guru by povedal rezervova pam alebo zavies premenn) a t krabiku nejak pomenova . D sa to spravi prkazom urob. Predpokladajme, e t naa krabika sa bude vola selko. Ak napete prkaz urob "selko 5 udej sa naraz dve veci. Imagine sa pozrie, i existuje premenn, ktor sa vol selko a ak nie, tak ju vytvor. Ak sa pozriete do okna pam , tak ju tam njdete v chlieviku s nzvom Globlne premenn. Druh vec, ktor sa udeje je, e Imagine do premennej selko vlo p ku. Mete sa o tom presvedi tak, e dvojkliknete na jej ikonu. Na uvedenom prklade je jedna nezvykl vec (aspo zo sloveninrskeho h adiska). Nachdza sa tam toti len jedna vodzovka. V Imagine bolo toti potrebn rozli nzvy prkazov od normlnych slov. Ak to zana vodzovkou, je to normlne slovo (a prkaz urob ho me poui ako nzov novej premennej). Ak by sme tam t vodzovku nedali, Imagine by si myslel, e sa jedn o prkaz selko a s aoval by sa, e tak nepozn. Ak chcete, mete si to vyska . Dobre. S vynaloenm istho silia sme vyrobili nau prv premenn. Ako teraz vyui to, o je v nej uloen? Na to, aby sme sa dostali k hodnote, ktor je do premennej (po starom do pamte) vloen, potrebujeme al pecilny uvdzac znak dvojbodku. Take ak naprklad zadme prkaz p :selko Imagine vm vype 5. A ak to sksite s prkazom dopredu 10 * :selko korytnaka sa posunie dopredu o 50 korytnach krokov. (Hviezdika znamen krt.) Pod a dvojbodky Imagine spozn, e m poui hodnotu premennej, ktorej meno za dvojbodkou nasleduje. Do premennch meme okrem sel uklada aj mnoh in veci (zoznamy, obrzky, ...) Ak naprklad zadme prkaz urob "zviera "mamut do premennej zviera sa ulo slovo mamut. Ukladanie obrzkov do premennch je troka zloitejie. Najprv si vytvorme premenn, v ktorej bude przdny obrzok. (Przdny obrzok je tak obrzok, v k torom ni nie je nakreslen, take to vlastne skoro ani nie je obrzok. Hlavn je, e sa Imagine k nemu ako k obrzku bude chova .) Spravme to prkazom urob "obrzoek przdnyObrzok
5 Na rozdiel od Imagine m lovek bu pam, alebo okno. Ke maj okno Windows, vol sa to BSOD (Blue sreen of death).

V okne pam nm pribudne premenn obrzoek, ale zatia v nej ni nie je. Ke na u dvojkliknete, otvor sa okno so vetkmi globlnymi premennmi a uvidte, e rmek ved a nej je przdny. A teraz nastala vaa chv a. Dvojkliknite do toho przdneho priestoru. Objav sa vm program LogoMotion, ktor je uren na kreslenie. V kolnke Sbor si vyberte Nov (Alebo stlate Ctrl-N) a mete kresli . Ke ste hotov, zavrite LogoMotion a na otzku, i v vtvor do premennej uloi odpovedzte no. To, o ste nakreslili, sa stalo obsahom premennej obrzoek. Tto premenn mete pouva v prkazoch, ktor s obrzkami vedia pracova . Mete naprklad zmeni tvar korytnaky prkazom nechTvar :obrzoek loha .1: Zmete tvar korytnaky opsanm spsobom. Nasledujce lohy s zameran na manipulciu s premennmi. loha .2: Ak hodnota bude uloen v premennej hausnumero po kadom z uvedench prkazov? (Najprv si rozmyslite odpove, a potom skajte.) urob "hausnumero 3 urob "hausnumero :hausnumero + 4 opakuj 10 [ urob "hausnumero :hausnumero + 2 ] urob "hausnumero :hausnumero / 9 p :hausnumero loha .3: spravia nasledujce prkazy? (Znovu si najskr premyslite odpove.) Ak hodnota o bude na konci v premennej a? urob "a 1 opakuj 400 [ dopredu :a vpravo 90 urob "a :a + 1] loha .4: Vytvorte premenn hihi a hoho, do oboch vlote slo 1. Potom do hihi vlote set sel, ktor sa prve v tchto premennch nachdzaj a hne nato vlote do hoho sin sel v oboch premennch. Toto vkladanie zopakujte p krt. Ak hodnoty bud v oboch premennch? loha .5: S pouitm premennch a finty z lohy . 3 skste nakresli nasledujci obrzok:

10

tvrt kapitola

Korytnaka a parametre
U viete, ako korytnaku naui nov prkaz. Rovnako si viete vytvori a poui prmenn krabiku v pamti, do ktorej mete uklada o potrebujete. V tejto kapitole sa dozviete, ako procedry a premenn svisia. Ke sme zaali s vytvranm procedr, mono niekto zvistlivo pokukoval po systmovch procedrach takmu prkazu dopredu je sveta i . Ke napeme dopredu 50, korytnaka ide dopredu o 50 bodkov, ke napeme dopredu 140, ide dopredu o 140. Nae procedry vykonali o mali a vdy to vyzeralo rovnako. Zato procedra dopredu si pok, ak slo za u zapete a zachov sa pod a toho. A o viac ak napete iba dopredu a stlate <Enter>, tak sa... o sa vlastne stane, si vyskajte sami. Tak vec, ako procedra s parametrom6 je ve mi praktick. Nemuseli by sme robi ve a rznych procedr na kreslenie tvorcov rznych ve kost. Staila by jedna. Parametrom by sme jej povedali, ak ve k tvorec potrebujeme a korytnaka by nm tak nakreslila. No a v tomto momente prichdzaj k slovu premenn. Nebud to globlne premenn na ktor by sme sa mohli pozrie v okne pam . Bud to loklne premenn, ktor bud vidite n len pre procedru a do ktorch si bude uklada vstupn hodnoty. Univerzlnu procedru tvorec urobme takto: viem tvorec :DkaStrany opakuj 4 [ dopredu :DkaStrany vpravo 90 ] koniec Tto procedra zana klasicky k ovm slovom viem po ktorom nasleduje meno procedry. Lene po mene procedry je tam novinka procedre sa dva na znmos , e bude nasledova obsah premennej, ktor sme si nazvali DkaStrany. (Mohli sme ju k udne nazva ZlostnakalVyjciNaMesiac alebo x, ale je dobre voli nzov tak, aby vypovedal o tom, o do premennej ukladme.) Obsah premennej DkaStrany potom pouijeme pri kreslen tvorca. Ke naute Imagine uveden procedru, mete napsa tvorec 100. slo 100 sa ulo do premennej DkaStrany a procedra vm nakresl pekn tvorek so stranou 100. loha .1: urobte si procedru tvorec a s jej pomocou nakreslite to, o vidte na obrzku. Parametre sa v procedrach daj vyuva mnohmi rznymi spsobmi. Meme ich poui na urovanie d ok, uhlov, mien, tvarov, potu opakovan a inch vec. O tom svedia aj nasledujce lohy: loha .2: Urobte si nasledujcu procedru a spustite ju s parametrami 1 a 10. to bude robi ? o Preo? viem chaos :n opakuj 11 [ dopredu 100 vpravo :n * 360 / 11 ] koniec
6 Parameter je to slo, ktor za procedrou nasleduje a ktor uruje, ako sa procedra bude chova. S procedry, ktor mu ma parametrov viacero naprklad procedra urob m dva. Meno premennej a jej nov hodnotu.

11

loha .3: Urobte si nasledujcu procedru a spustite ju s nejakmi vhodnmi parametrami. to o bude robi ? Preo? viem divdivuci :n :d opakuj :n [ dopredu :d vpravo 360 / :n ] koniec loha . 4: Napte procedru schody s jednm parametrom, ktor bude udva poet schodov, ktor m korytnaka nakresli . Ak bude ma parameter hodnotu 3, bude to vyzera takto:

loha . 5: Napte procedru domek, ktor nakresl domek urenej ve kosti. Take naprklad domek 80 nakresl toto:

loha . 6: Napte procedru hviezdika, ktor nakresl iarkov hviezdiku s to kmi iarkami, ko ko jej poviete s pomocou parametra. Naprklad hviezdika 25 urob

(Mono sa vm bude hodi prkaz vzad. Korytnaka m aj spiatoku, len jej treba poveda , o ko ko m cvnu . Teda naprklad vzad 35.) loha . 7: Upravte prkaz hviezdika tak, aby mal dva parametre. Druh parameter bude urova , ak dlh maj by iarky. (Predol obrzok by sa nakreslil prkazom hviezdika 25 100 .)

12

Piata kapitola

Rozhodn korytnaka
Doteraz sme od korytnaky ofky vyadovali bezpodmienen poslunos . Povedali sme jej, ak prkazy m vykona a ona ich ako sa na cvien zviera patr poslune vykonala. Tm sme ale hrubo podcenili jej potencil. Korytnaka toti nie je plne slaboduch a ak jej nechme podrobn pokyny, nemus vdy vykonva prkazy jeden za druhm, ale vie sa zariadi pod a okolnost. Dokonca vie nejak veci necha na nhodu. A v tejto kapitole si ukeme, ako tieto jej vlastnosti vyui . Zaneme s tou nhodou. Korytnaka pozn prkaz nhodne. Ak jej niekde napem nhodne 100, znamen to vymysli slo, ktor je nezporn a menie ako sto. Vyskajte jej nieko kokrt za sebou zada prkaz p nhodne 100 a pozerajte, ak sla bude psa . Nhodn sla sa daj vyui rznymi spsobmi, z ktorch si nieko ko ukeme. Skste naprklad zada prkaz opakuj 5000 [ vpravo nhodne 360 dopredu 10 ] Ke napete nieo ako vpravo nhodne 360, korytnaka sa oto v pravo o nejak nhodn slo od 0 do 359 a zska tak plne nhodn smer. A ke ju vdy pred alm krokom takto zmtiete, jej cesta bude pripomna cestu opilca cez tadin (ako uvidte, ke si uveden prkaz vyskate). Dobre. Teraz u nemme vetko tak plne pod kontrolou, korytnaka si nejak sla vym a. Ete ju treba naui , ako zareagova na nejak vonkajie podmienky. A na to sli prkaz ak. Pouva sa naprklad takto: ak :a = 1 [ p [V premennej a je jednotka.] ] Za slovkom ak nasleduje podmienka a po nej hranat ztvorka s prkazmi. Ak je podmienka splnen (teda v naom prpade, ak je v premennej a skutone 1), prkazy v hranatej ztvorke sa vykonaj a objav sa npis. Ale ak podmienka splnen nie je, hranat ztvorka sa presko a pokrauje sa a za ou. (V naom prpade nie je kde pokraova a prkaz nevype ni.) Prkaz ak teraz vyuijeme na rafinovan nhodn kreslenie. Prkaz nhodne 2 nm vrti bu 0 alebo 1. A n prkaz vymyslme tak, aby vtedy, ke to bude jednika, korytnaka zahla vpravo, inak ila rovno. Bude to vyzera takto: opakuj 500 [ ak nhodne 2 = 1 [ vpravo 90 ] dopredu 10 ] Obrzok, ktor teraz korytnaka nakresl, bude sce tie nhodn, ale ove a usporiadanej (asi ako ulice v New Yorku). Ak chceme, aby sa korytnaka toila nielen vpravo, ale aj v avo, musme prkaz trochu pozmeni . Jednak musme poui nhodne 3 miesto nhodne 2, pretoe u mme tri monosti: 0 rovno, 1 vpravo a 2 v avo. Okrem toho si vsledok funkcie nhodne budeme uklada do premennej. A nakoniec, kee je to v prkaz, spravme si z neho samostatn procedru. viem NewYork opakuj 500 [ urob "nhoda nhodne 3 ak :nhoda = 1 [ vpravo 90 ] 13

ak :nhoda = 2 [ vavo 90 ] dopredu 10 ] koniec loha .1: Vyskajte si vetky uveden prklady. to sprav, ke v procedre NewYork o nahradte prkazy vpravo 90 a vavo 90 prkazmi vpravo 120 a vavo 120 ? loha .2: Napte procedru kocka, ktor vm vype nhodn slo od 1 do 6. loha .3: Nasledujca procedra zist, i slo, ktor dostala ako parameter je prne, a ak je, vype to. viem parita :n ak zvyok :n 2 = 0 [ (p [slo ] :n [ je prne.] ) ] koniec Funkcia zvyok x y vypota zvyok po delen sla x slom y, take naprklad zvyok 14 3 bude 2 (pretoe 14 : 3 = 4 zvyok 2.) Upravte procedru parita tak, aby vedela rozozna prne sla od neprnych a aby pri kadom sle vedela napsa , ak vlastne je. loha .4: bude robi nasledujca procedra? o viem udo :poet urob "iks 1 opakuj :poet [ ak zvyok :iks 2 = 0 [ vpravo 90 ] ak zvyok :iks 2 = 1 [ vavo 90 ] dopredu 20 urob "iks :iks + 1 ] koniec Skste spusti udo 7 alebo udo 12. Ako to funguje? Urobte podobn procedru, ktor ak dostane na vstupe 9, nakresl toto:

loha .5: bude robi nasledujca procedra? o viem zhada :a ak :a <= 0 [ ukoni ] dopredu :a vpravo 90 zhada :a 1 koniec Spustite ju naprklad zhada 20 alebo zhada 200. Ako to vlastne funguje? 14

iesta kapitola

Korytnaka s perspektvou
Korytnaka ofka sa stva oraz zodpovednejou. Vie si zisti stav vec okolo seba a s pomocou prkazu ak vie na zareagova . Prkaz ak je ale relatvne jednoduch. Vieme s jeho pomocou korytnake vysvetli , e ak sa nieo udeje, m sa sprva uritm spsobom. Ale nevieme do prkazu zahrn , ako sa m sprva , ak sa to nieo neudeje. Korytnaka me ma pred sebou ve k mnostvo monost a z nich si me chcie vybra len jednu. V tejto kapitole si ukeme niektor vylepenia prkazu ak s pomocou ktorch bude dorozumievanie s korytnakou jednoduchie. Prvm z tchto vylepen je prkaz ak2. Ak ste pouili normlne ak, musela po om nasledova podmienka a potom v hranatch ztvorkch prkazy, ktor sa maj vykona , ak je podmienka splnen. Ak pouijete prkaz ak2, po podmienke musia nasledova dve sady prkazov. Kad mus by uzavret v hranatch ztvorkch. Prv z nich sa vykon, ak je podmienka splnen, druh sa vykon, ak podmienka splnen nie je. Ako to funguje, si ukeme na procedre mnk (mimoriadne nadan korytnaka). viem mnk p [Nap slo:] urob "selko tajSlovo ak2 zvyok :selko 2 = 0 [ (p [selko ] :selko [je prne.]) ] [ (p [sliko ] :selko [je neprne.]) ] koniec Tto procedrka pouva niektor nov prkazy. Prkaz tajSlovo pok, km niekto nenape nieo do riadku a nestla <Enter>. To si ulome do premennej selko. Funkcia zvyok vie vypota zvyok po delen. Ke naprklad napete p zvyok 4275 7, dozviete sa zvyok po delen sla 4275 siedmimi. Tto funkciu pouijeme na to, aby sme zistili, i je slo uloen v premennej selko prne. (Prne sla dvaj pri delen dvoma zvyok 0.) Ak slo prne je, korytnaka oznmi, e prne bolo. Inak d vedie , e prne nie je. Skrtka mimoriadne nadan korytnaka. loha .1: Vyskajte si to. Druh vylepenie prichdza ku slovu, ak mme monost viacero. Predstavte si, e primitvny africk kme si u vs objednal software na prevod z veobecne pouvanej selnej sstavy do tej ich. Tento kme pozn ale iba tri sla jeden, dva a tri. Akko vek in slo je pre nich ve a. Siahneme po Imagine, dohodneme sa s autormi na provziach a vytvorme nasledujcu procedru: viem zulukafer :s akJe :s [ 1 [p "Jeden] 2 [p "Dva] 3 [p "Tri] [p "Vea] ] koniec 15

Po prkaze akJe tentokrt nenasleduje podmienka, ale hodnota. A v hranatch ztvorkch s potom vymenovan vetky prpady, ktor pripadaj do vahy. Kad prpad m pri sebe pribalen svoje vlastn mal hranat ztvoriky, v ktorch je kd, ktor sa m vykona , ke dan prpad nastane. Na koniec meme uvies hranat ztvorku s kdom, ktor sa vykon, ak iadna z monost nenastala. Tak, a meme v danom kmeni otvori poboku naej softwarovej firmy. loha .2: Vyskajte si to. (To programovanie, nie otvranie poboky.) Elegantnejie vyuitie prkazu akJe mete vidie na nasledujcej procedrke:
viem behaj akJe klves [ vpravo [ vpravo 5] vavo [ vavo 5] hore [ dopredu 5] Esc [ ukoni ] ] behaj koniec Funkcia klves pok na stlaenie klvesu a povie, ktor to bol. Ak to bola ipka vpravo, korytnaka sa pooto doprava o 5 stupov. Ak to bola pka v avo, oto sa do ava. Ak pka hore, pohne sa a ak stlate klvesu <Esc>, procedra sa skon. Inak sa funkcia klves zavol znova a tak sa stle opakuje. Po spusten tejto funkcie mete korytnaku pilotova z klvesnice. loha .3: Dorobte do tejto procedry ale ovldacie klvesy na zmenu hrbky alebo farby iary, na zdvihnutie a poloenie pera, na cvanie...

Aby korytnaka nemala tej slobody zas prli, postavme jej ohradu (teda postav si ju sama). Urobte jej na u procedrku (ohrada by mala by erven a vyzera ako na obrzku) a pres ahujte korytnaku do nej. Nezabudnite potom zmeni hrbku a farbu pera na pvodn. Predstavte si, e chceme pouva n kresliaci program, ale pri tom nechceme, aby nm korytnaka ula z ohrady. Musme preto prkaz dopredu 5 z procedry behaj nahradi nieim opatrnejm, niem o d pozor, aby sme si ohradu nepomrali, ani z nej nevybehli. Najprv sa pjdeme pozrie , i na tom mieste, kam sa chystme, nie je u nhodou erven teda ohrada. (Samozrejme predtm zrume kreslenie.) Ak zistme, e tam, kam sa chystme, je bezpeno, vrtime sa nasp a potiahneme tam iaru. Ak tam bezpeno nie je, iba sa vrtime nasp . Na zistenie farby bodu na ktorom korytnaka stoj, sli prkaz farbaBodu. Take varianta hore z prkazu behaj bude teraz vyzera takto: hore [ ph dopredu 5 ak2 farbabodu = "erven [vz 5 pd] [vz 5 pd do 5] ] loha .4: Vyskajte si to. loha .5: Upravte program nhodnho pohybu korytnaky z minulej lekcie tak, aby korytnaka neula z ohrady loha .6: sprav prkaz o opakuj 4000 [ ak2 nhodne 2 = 0 [vp 90] [vl 90] do 10 ] loha .7: Napte procedru, ktor si vypta s pomocou tajSlovo z klvesnice slo a slovne vype jeho zvyok po delen tromi (teda nape nula, jeden alebo dva). Pouite prkaz akJe. 16

Siedma kapitola

Vytrval korytnaka
Isto je vm znmy prbeh o Minotaurovi, ktor sdlil v Labyrinte na Krte. Jeho likvidcia v sebe zah ala dva problmy. Prv bol samotn zlikvidovanie prery, ktor bola napolo lovek, napolo hovdz dobytok. Druh problm nastal hne vzpt. A to dosta sa z Labyrintu zase von. Grcke bje tvrdia nieo o princeznej Ariadne a o klbku. Tto verzia m ale svoje slabiny. Sta si len predstavi klasickho grckeho bojovnka akm urite bol Thseus v avej ruke tt, v pravej me, v zuboch klbko, ako vzdoruje stranmu netvorovi. Poriadna akn scna, akou bolo zabjanie obludy v sebe zah a skoky z vok, prenasledovanie a ukrvanie sa v tmavch chodbch a vklenkoch. Je ak uveri , e popri tom vetkom m kladn hrdina ete as rozmotva pagt. Ove a pravdepodobnejie je, e Thseus mal skrtka astie a dos vytrvalosti na to, aby naiel cestu von. Predstavme si na chv u, e sa do podobnej situcie dostala korytnaka ofka. S Minotaurom si hravo poradila a teraz h ad cestu. Aby sme tto situciu znzornili o najdokonalejie, naitame si nejak vhodn pozadie. To pozadie najprv musme ma . Pouijeme obrzok bludisko.bmp, kto ulome do patrinho adresra (podadresr Obrzky adresra s Imaginom). Obrzok do pozadia strnky . 1 (to je t strnka, s ktorou sme doteraz vdy pracovali) vlome prkazom Strnka1'nechPozadie "bludisko.bmp Korytnaka nebude celkom presne v strede labyrintu, tak na u klikneme pravm tlaidlom myi, vyberieme monos Presvaj a potiahneme ju tam. Situcia by mala by podobn, ako na prvom obrzku. Steny labyrintu tvor erven farba. Na bldenie teda meme poui fintu z predolej kapitoly urobme opatrn krok bez kreslenia nhodnm smerom, ak je tam erveno, ujdeme odtia , inak sa tam presunieme. Toto budeme opakova stle dokoleka. Problm ale je, dokedy to mme opakova . Doteraz pouvan prkaz opakuj sa do tejto situcie rozhodne nehod. Nikde nemme zaruen, e korytnaka dosiahne zelen prah bludiska po presne tisc alebo presne milin krokoch. Nevieme, ko kokrt to treba zopakova , ale chceme to opakova dovtedy, km sa nieo nestane. A na to presne je uren nov typ cyklu riadenho podmienkou prkaz km. Za prkazom km nasleduj dva seky uzavret v hranatch ztvorkch. Prv je 7 podmienka. Druh s prkazy, ktor sa bud opakova , km je podmienka splnen. Take procedra na bldenie bludiska by mohla vyzera takto: viem Bl urob "smeDoma "nie km [ :smeDoma = "nie ] [ vpravo nhodne 360 peroHore dopredu 10
7 Prkaz km m okolo podmienky hranat ztvorky. Prkaz ak ma hranat ztvorky okolo podmienky nesmie!!!

17

ak farbaBodu = "zelen [ urob "smeDoma "no ] ak2 farbaBodu = "erven [ vzad 10 ] [ vzad 10 peroDolu dopredu 10 ] ] koniec Cel cyklus sa bude opakova dovtedy, km premenn smeDoma bude ma hodnotu nie. Korytnaka sa bude nhodne potulova po labyrinte dovtedy, km nenaraz na zelen farbu. Vtedy sa hodnota premennej smeDoma zmen na no, podmienka prestane by splnen a cyklus sa skon. loha .1: Vyskajte to. V tomto prpade m ofka oproti Thseovi jednu nevhodu a jednu vhodu. Jej nevhodou je, e je pomerne hlpuk (alebo nie dos ikovne naprogramovan). Potca sa po labytinte ako slep a nijako sa nesna s sprvnym smerom. Vetko nech na nhodu. Jej vhodou je, e je ve mi rchla. Take aj s takmto mizernm algoritmom raz k cie u djde. loha .2: bude robi nasledujca procedra? o viem otravka p [ Zadaj heslo: ] urob "vstup tajSlovo km [ :vstup <> "orangutan ] [ p [ Nesprvne heslo. Zadaj heslo: ] urob "vstup tajSlovo ] p [ Vitaj. ] koniec loha .3: bude robi nasledujca procedra? Skste na to prs napriek tomu, e obsahuje o viacero novch funkci korytnaky. Prkaz bodka sprav na danom mieste nastavenou farbou a perom bodku. Podmienka klves? je splnen, ak bol stlaen niektor klves, ktor ete nebol spracovan. Kontrolujeme to, aby nm program nezastal na prkaze klves a neakal, km sa nieo stla, ale aby beal alej. (Mete t kontrolu sksi vynecha a pozrite sa, o to bude robi potom.) Prkaz akaj 1 spsob, e program zastane na jednu tiscinu sekundy.

viem beh nechFp "zelen nechHp 10 bodka peroHore vpravo nhodne 360 km [ farbaBodu = "zelen ] [ dopredu 1 ]

18

km [ farbaBodu <> "zelen ] [ ak klves? [ akJe klves [ vpravo [ vpravo 3 ] vavo [ vavo 3 ] esc [ ukoni ] ] ] dopredu 1 akaj 1 ] koniec loha .4: Napte procedru, ktor nebude robi ni a km nestlate ipku hore. Vtedy odtartuje korytnaku a posunie ju o 1000 krokov dopredu. loha .5: Kdesi nhodne na obrazovke urobte zelen bodku. Potom korytnaku polite domov a natote o jeden stupe vpravo. Vymyslite procedru, ktor nech korytnaku s dopredu a dovtedy, km t zelen bodku nenjde. Tam korytnaka zastane. (D sa to spravi aj s pomocou km, aj s pomocou procedry, ktor zavol sama seba. Vyskajte obe monosti.)

19

sma kapitola

Vnmav korytnaka
Korytnaka ofka sa vie oraz lepie prispsobi akm poiadavkam, ktor sa na u klad. Vie reagova na okolit podmienky, vie sa rozhodova , je vytrval a jej inteligencia a rchlos jej dvaj ve k predpoklady prei v dnench akch asoch (aj za t cenu, e bludisko, ktor by kad prvik vybldil za dvadsa seknd, bldi ofka hodinu). Korytnakine monosti vak zaleka nie s vyerpan. Korytnaka okrem toho, e vykonva nejak prkaz, me dva pozor, i sa jej neprihodila nejak zvltna udalos . Vie si zisti , e ponad u prela my, e na u klikli niektorm tlaidlom myi, e niekto stla stre bu na joysticku alebo e sa zrazila s inou korytnakou.8 A my jej meme poveda , aby v prpade, e nejak udalos nastala, vykonala urit innos . Otvorte si okno pam , rozba te strnku Strnka1, njdite v nej korytnaku (pravdepodobne m prozaick meno k1) a dvojkliknite na u. Rozbal sa vm dialgov okno, v ktorom sa daj njs vetky daje o korytnake. Vy si vyberiete kolnku udalosti. V tejto kolnke toho zatia ve a nenjdete stlate teda tlaidlo Pridaj. Imagine na vs vychrl vetky mon udalosti, na ktor vie korytnaka zareagova . Vyberte si udalos priPrchodeMyi a stlate OK. Udalos sa nm objav v okne udalost. Znamen to, e korytnaka odteraz dva pozor, i nad u my neprde. Akonhle sa tak stane, korytnaka vykon prkazy, ktor jej napeme ved a udalosti. My jej tam dme vpravo nhodne 360 dopredu 100 Od tejto chvle korytnaka zane by alergick na my. Akonhle nad u prdeme s kurzorom myi, naberie nhodn smer a usko o 100 krokov. loha .1: Vyskajte si to. Ak chceme korytnaku z tejto alergie vyliei , treba sa v okne Udalosti nastavi na patrin udalos a stlai tlaidlo Zru. Cel opsan proces nemusme robi len tak, e otvrame okienka a nieo tam vypisujeme. Obsluhu udalost meme nastavova aj z prkazovho riadku a o je dleitejie aj priamo z niektorej procedry vho programu. Ak by sme chceli zmeni paniku korytnaky tm spsobom, e pred mykou bude uteka dookola do tvorca, meme zada prkaz k1'nechUdalos "priPrchodeMyi [ vpravo 90 dopredu 100 ] A tmto sme sa dostali k aliemu dleitmu znaku Imaginu. Po vodzovkch ("), ktormi sa zanaj re azce a dvojbodke (:), ktor treba da pred meno premennej, aby sme sa dostali k tomu, o je v nej uloen je to apostrof ('). Pouva sa vtedy, ak potrebujeme poveda , e nieo sa netka hlavnho okna, ale niektorho inho objektu. Keby sme napsali iba nechUdalos "priPrchodeMyi [ vpravo 90 dopredu 100 ] Imagine by si myslel, e m akciu [ vpravo 90 dopredu 100 ] vykona pri prchode myi nad
8 Nebojte sa, korytnaka vm do susednho potaa neujde, aby sa tam zrazila s tamojou. Ale korytnaka nemus by na ploche jedin me ich by viacero. O tom ale niekedy nabudce.

20

hlavn okno a bol by zmten, lebo naprklad prkaz dopredu 100 je uren pre korytnaky a nie pre okn. Treba mu preto poveda , e prkaz nechUdalos, ktorm sa nastavuje, o sa m pri danej udalosti vykona sa netka hlavnho okna, ale korytnaky k1. A to sa sprav prve tak, e sa zavol procedra k1'nechUdalos. Nezabudnite na vodzovky pred menom udalosti. Ke sme u raz otvorili okno s dajmi o korytnake, pome sa pozrie aj na aliu kolnku premenn. Doteraz sme pracovali iba s premennmi, ktor boli globlne. Kad procedra s nimi mohla narba a boli vidite n odvadia . Ale korytnaka me ma svoje vlastn premenn, ktor o nej bud vo ao hovori . Ak chceme korytnake k1 zriadi premenn Rchlos, spravme to prkazom nechVlastn: k1'nechVlastn "Rchlos 5 V okne pam sa pri korytnake objav chlievik s premennmi a nau nov premenn si tam meme njs . Teraz korytnake povieme, aby si vdy, ke na u klikneme, zmenila rchlos o 1 a zmenila nhodne farbu pera. k1'nechUdalos "priKliknut [ nechRchlos Rchlos 1 nechFp nhodne 16 ] Isto ste si vimli, e skromn premenn s istm spsobom privilegovan nepu sa pri nich dvojbodky a ke chceme zmeni hodnotu v premennej Rchlos, mme na to dokonca nov pecilny prkaz nechRchlos. Na druh stranu musme dva pozor, aby sme premenn pouvali bu vo vlastnch procedrach korytnaky alebo sa na ne odvolvali s pomocou apostrofu. Meme teda vytvori takto procedru viem chyMa k1'nechRchlos 5 km [ k1'Rchlos > 0 ] [ dopredu k1'Rchlos vpravo nhodne 360 akaj 5 ] koniec Keby korytnaka nezniovala svoju rchlos pri kliknut, cyklus z tejto procedry by nikdy neskonil a korytnaka by pobehovala po ploche km by nevypadli poistky. Na astie korytnaka na klikanie pozor dva. Treba na u klikn myou p krt, aby sa zastavila plne. Prajeme prjemn zbavu.9 loha .2: Vyskajte to. loha .3: Vylepite korytnaku tak, e ke na u dvojkliknete, sprav okolo seba zelen tvorec. loha .4: s korytnakou k1 sprav nasledujci prkaz? o k1'nechUdalos "priKliknut [ ak2 pero = "pd [peroHore] [peroDole] ] loha .5: Zriate korytnake skromn premenn Odpoet v ktorej bude na zaiatku slo 10. Pri kadom prejden myi nad korytnakou sa hodnoda v nej buzmen o jedna, alebo ak je u nulov, korytnaka vyraz nhodnm smerom o 300 korytnach krokov a Odpoet sa znovu nastav na 10. loha .6: Vyrobte korytnake skromn premenn Strana. Ke na korytnaku kliknete avm tlaidlom, nakresl tvorec so stranou d ky Strana. Ke kliknete pravm tlaidlom, Strana sa zv o 10 a ke strednm (alebo kolieskom), Strana sa o 10 zmen.
9 Ak ste nhodou zabudli zrui to, e korytnaka pred myou utek, spravte to teraz. Inak sa vm nepodar na korytnaku klikn.

21

Deviata kapitola

Vypotav korytnaka
V tejto kapitole sa ete nakrtko vrtime k procedram. Vetky procedry, ktor sme doteraz napsali, boli uren na to, aby nieo robili. Ale existuj aj in procedry. Naprklad procedra zvyok, ktor sme tak asto a s spechom pouili, nem za lohu nieo robi , ale nieo vypota . Dleit nie je vonkaj efekt, ale vsledok, ktor z procedry vypadne. Ako sa takto procedry robia, si ukeme na nasledujcom prklade, ktor je sce nezmyseln, ale zato poun. viem set :a :b vsledok :a + :b koniec Prkaz vsledok10 zoberie to, o mu predhodte ako parameter a vyhlsi to za vsledok celej procedry. Take ak by ste zadali prkaz p set 1 1 Imagine vm nape 2. (Pozor! Prkaz p je tam dleit. Keby ste napsali iba set 1 1, Imagine by sce vypotal, e 2, ale nevedel by, o s tou dvojkou m robi a s aoval by sa.) Akonhle sa procedra dopracuje k prkazu vsledok, tak skon. Take ak by ste vyie uveden procedru upravili nasledujcim spsobom: viem set :a :b vsledok :a + :b p "Kikirik koniec k iadnemu kikirkaniu nedjde. Prkaz vsledok m rovnak efekt, ako prkaz ukoni. Predstavte si, e chceme napsa procedru, ktor nm njde najmeieho rozumnho delite a danho sla. (Najmen delite je vdy slo 1, take rozumn delite bude tak ktor je aspo 2.) Zaneme tak, e si do premennej b vlome dvojku. Pozrieme sa, i je kontrolovan slo delite n b-kom.11 Ak je, povieme, e je to vsledok. Ak nie je, zvime b-ko o 1 a zase skontrolujeme. Tak budeme b-ko stle zvyova a ska a dovtedy, km nejak vhodn slo nenjdeme. Take procedra by mohla vyzera naprklad takto: viem delite :a loklne "b urob "b 2 km [ :b <= :a ] [ ak zvyok :a :b = 0 [ vsledok :b ] urob "b :b + 1 ] koniec V tejto procedre s povimnutiahodn dva detaily. Prv je podmienka cyklu km. Cyklus sa bude
10 Skratka pre prkaz vsledok je vy. 11 Najlepie to zistme tak, e vypotame zvyok kontrolovanho sla pri delen b-kom a ak je ten zvyok nula, slo delite n je.

22

opakova (a b-ko zvova ) iba dovtedy, km je b-ko menie alebo rovn ako kontrolovan slo. Vzh adom na to, e kontrolovan slo bude urite delite n aspo samo sebou, sta ska iba po neho. Druh zaujmav detail je prkaz loklne "b. Isto ste si vimli, e ke v procedre pouvate nejak premenn, objav sa vm v okne pam medzi globlnymi premennmi. To je niekedy uiton. Ale niekedy (ako naprklad v tejto procedre) potrebujeme poui nejak premenn len na pomocn vpoet a medzi globlnymi premennmi by nm zavadzala. Tak na zaiatku povieme, e t premenn je loklna, teda, e je vytvoren iba pre dan procedru. Nikto in okrem danej procedry tto premenn nevid a neme spravi iadnu kodu tm, e by omylom zmenil jej hodnotu. loha .1: Napte procedru delite a vyskajte ju (naprklad p delite 221) alia vec, ktor si na vypotavch procedrach ukeme, je finta, ktor sa vol rekurzia. Tto fintu sme u nieko kokrt pouili, ale neupozorovali sme na to. V budcnosti o nej bude cel kapitola. Predstavte si, e chcete napsa procedru faktoril, ktor vypota uduj sa svete faktoril danho sla. (Pre nezasvtench ak chcem vypota naprklad 7 faktoril, musm vypota 1.2.3.4.5.6.7 = 5040, 5 faktoril je 1.2.3.4.5 = 120) Vyuijeme na to t vlastnos , e ak poznm naprklad 7 faktoril, tak vypota 8 faktoril je u relatvne jednoduch. Sta 7 faktoril vynsobi smimi. Take procedru napeme nasledujcim ulievckym spsobom: viem faktoril :n ak2 :n = 1 [ vsledok 1 ] [ vsledok :n * faktoril (:n - 1) ] koniec to sprav, ak zadme prkaz p faktoril 3 ? o Zavol sa funkcia faktoril 3. Skontroluje sa, i je :n jednotka (nie je, lebo je tam trojka) a tak vsledok funkcie bude 3 faktoril 2. Problm je, e Imagine zatia netu, omu sa rovn faktoril 2. A tak funkciu faktoril zavol znovu. Zavol sa funkcia faktoril 2. Skontroluje sa, i je :n jednotka (stle nie je, je tam dvojka) a tak vsledok funkcie bude 2 faktoril 1. faktoril 1 vak stle nevieme, o je. A tak funkciu faktoril volme ete raz. Zavol sa funkcia faktoril 1. Skontroluje sa, i je :n jednotka. Je. Take vsledok bude 1. Teraz u Imagine vie, e faktoril 1 je 1. Me teda vypota 2 faktoril 1 (bude to 2) a vrti to ako vsledok faktoril 2. Teraz u Imagine pozn aj faktoril 2. Me teda vypota 3 faktoril 2 a vrti 6 ako vsledok faktoril 3 Funkcia p t estku vype. Keby sme zadali prkaz p faktoril 8, tak sa funkcia faktoril zavol sama seba podobnm spsobom osemkrt. Takto procedra to u je nieo, o u je dos elegantn na to, aby ste sa tm mohli pochvli pred prbuzenstvom. Vina sce nebude rozumie , ale znalci ocenia. loha .2: Vyskajte to. (Nie to chvlenie sa. T procedru.) loha .3: Napte procedru menie :a :b, ktor dostane na vstupe dve sla a ako vsledok vrti to menie z nich.

23

loha .4: Napte procedru kocka2, ktor ako svoj vsledok bude dva nhodn slo od 1 do 6 (no, dobre sa pamtte, tak podobn procedra u bola.) S aen varianta pre machrov napte procedru nhoda :u :v s dvoma vstupnmi parametrami, ktor vrti nhodn slo od :u do :v. loha .5: Napte procedru priemer :a :b, ktor vypota priemer dvoch sel. loha .6: Napte procedru set2 :a, ktor spota vetky sla od 1 do :a. Take naprklad set2 5 bude 1 + 2 + 3 + 4 + 5 = 15. loha .7: Napte procedru set3 :a, ktor spota vetky neprne sla menie alebo rovn :a. Take naprklad set3 9 bude 1 + 3 + 5 + 7 + 9 = 25. loha .8: ( ak pre ak) S pomocou procedry delite napte procedru, ktor rozlo zadan slo na prvosla.

24

Desiata kapitola

Korytnaka a my
Kapitola, do ktorej ste sa prve zatali, pojednva o vz ahu dvoch zvierat korytnaky ofky a myi.12 Oba tieto zvery ve mi zko svisia s potami. ofka je zviera virtulne. Existuje len v potai a cel dni len vysedva na harddisku a ak, kedy u konene niekto spust Imagine. My je naproti tomu zviera do istej miery relne. Mete ju chyti do ruky, ak to prve nie je nejak bezdrtov mutant aj chvost m a tlaidl na nej mete stla aj vtedy, ke v okol 100 kilometrov nie je iaden pota. Problm ale je, e bez potaa stlanie tlaidiel na myi nem iadny zmysel. Pokia my neme pohybova malou ipkou po terminli, jej ivot je pust a przdny. Korytnaka aj my mu nava v celkom prjemnej symbize. Korytnaka vie zisti , kam my prve ukazuje a zachova sa pod a toho a my je zase spokojn, e s jej pomocou me uvate nieo korytnake prikza . Ak si korytnaka chce zisti , kde sa prve my nachdza, sli jej na to prkaz pozMyi. Skste zada prkaz km [ nieje klves? ] [ p pozMyi ] Tento prkaz bude stle vypisova , kde sa prve my nachdza, a km mu to nezatrhnete tak, e stlate nejak klves na klvesnici. Ako vidte, pozcia myi s dve sla. Prv z nich hovor, ako aleko je my od stredu obrazovky vo vodorovnom smere, druh hovor, ako aleko je v zvislom smere. Ak je my od stredu vpravo, je prv slo kladn. Ak je od stredu v avo, je prv slo zporn. Podobne je to aj s druhm slom. Ak je my od stredy vyie, je kladn a ak je my od stredu niie, je zporn. Spustite si uveden prkaz ete raz a skste nastavi my presne do stredu. (Malo by vm to vypisova 0 0. Bute trpezliv, nie je to a tak jednoduch.) Dobre. Kde je my u si zisti vieme. Teraz to ete nejako vyui . Sksime napsa procedru, pri ktorej bude korytnaka pomaly liez za myou. Na to ale budeme potrebova ete dve nov veci. Prvou je prkaz nechSmer. Korytnaku sme doteraz otali iba prkazmi vpravo a vavo. Nov smer vdy zleal od toho, kam bola korytnaka otoen predtm. Prkaz nechSmer naproti tomu nastav korytnaku pod a kompasu. Po prkaze nechSmer 0 bude korytnaka otoen na sever (hore), po prkaze nechSmer 90 sa oto na vchod (vpravo), prkaz nechSmer 180 ju oto na juh (dolu) a prkaz nechSmer 270 ju oto na zpad (do ava). Samozrejme meme poui ubovo n in slo odmeria sa patrin poet stupov od smeru na sever v smere hodinovch ruiiek a tm smerom sa korytnaka oto. Ak by sme teda potrebovali otoi korytnaku na juhovchod, pouijeme prkaz nechSmer 135. Druh novinka je prkaz smerK. Tto funkcia vie pre korytnaku vypota smer k nejakmu bodu na ploche. Ak by sme si naprklad potrebovali zisti smer k stredu plochy, vypotali by sme to ako smerK [ 0 0 ]. Ak by sme potrebovali zisti smer k bodu, ktor je 30 korytnach krokov vpravo od stredu a 20 krokov dole, smer bude smerK [ 30 -20 ]. (Pozrite si obrzok. erven ipka ukazuje smer, ktorm bude korytnaka otoen, ak zadme prkaz nechSmer smerK [30 -20].) Ak chceme, aby sa korytnaka otoila smerom k bodu, na ktor ukazuje my, pouijeme prkaz nechSmer smerK pozMyi. Take teraz to cel sksme da dohromady.
12 My sa me vola rzne, naprklad Logitech alebo Microsoft.

25

viem prenasleduj km [ nieje klves? ] [ nechSmer smerK pozMyi dopredu 1 akaj 50 ] koniec loha .1: Vyskajte! Procedrka prenasleduj u rob takmer to, o potrebujeme. M ale jednu drobn slabinu. Ke nechme my st a korytnaka ju dobehne, zane nad ou besne poskakova . Je to spsoben malou zkernos ou Imaginu ke sa ho optame na pozciu myi, nape nm dve cel sla. Ale skste pohn korytnakou (naprklad vp 30 do 50) a spta sa Imaginu na jej pozciu (p poz). Nape vm dve desatinn sla. Miesto, kde sa korytnaka nachdza, si toti Imagine pamt ove a presnejie. Lene s takouto presnos ou je ak trafi sa presne do miesta kde je my a tak korytnaka poskakuje z jednej strany na druh. prava procedry bude jednoduch pozrieme sa, i pozcia korytnaky je dos aleko od pozcie myi a nieo budeme robi iba vtedy, ak je t vzdialenos aspo jeden krok. Na to, aby sme zistili vzdialenos dvoch bodov (konkrtne pozcie korytnaky poz a pozcie myi pozMyi) pouijeme matematick fintu zvan abs. Take upraven verzia bude vyzera takto: viem prenasleduj km [ nieje klves? ] [ ak abs (poz - pozMyi) > 1 [ nechSmer smerK pozMyi dopredu 1 akaj 50 ] ] koniec loha .2: Vyskajte upraven verziu. loha .3: to bude robi , ak vynechte prkaz akaj 50 ? o loha .4: Upravte procedru prenasleduj tak, aby korytnaku my nepri ahovala ale odpudzovala. (Radej tam znovu pridajte ten akac prkaz.) loha .5: Napte procedru sleduj v ktorej sa korytnaka nepohne z miesta, ale bude sa ota tm smerom, kde uvid ipku od myi. loha .6: Prerobte procedru z lohy .3 na jednoduch kresliaci program. Procedra bude bea , km sa nestla klvesa Esc. Pri stlaen H sa zdvihne pero, pri stlaen D sa pero znovu zapne. Mete dorobi alie klvesy na zmenu hrbky a farby pera.

26

loha .7(pre machrov): Napte procedru hviezdica, ktor bude nepretrite kresli iary z bodu [0 0] (teda zo stredu) do bodu, v ktorom sa prve nachdza my. (Pozrite si obrzok.)

loha .8(tie pre machrov): Prerobte procedru z lohy .4 tak, aby korytnaka utekala od myi rchlejie, ak bude my blzko.

27

Jedensta kapitola

Korytnaky
Zle je korytnake na svete samotnej. A preto programtori, ktor psali Imagine13 dali hlavy dohromady a vymysleli to tak, e nemus by korytnaka na svete, strnke i papieri len jedin. Z doterajch kapitol mte priblin predstavu o tom, ak problm je ps jednu korytnaku. A teraz si predstavte, e ich mme cel stdo. (Nie je ist, e sa korytnaky vyskytuj v stdach, ale stle je to lepie, ako keby sme tvrdili, e pasieme cel roj korytnaiek.) Skrtka bude veselo. Nov korytnaka sa d vytvori jednoducho. plne naj ahie je stlai tlaidlo . Potom kliknete na plochu a ajh a nov korytnaka je na svete. Potom mete na u klikn pravm tlaidlom myi a zmeni jej vlastnosti (naprklad meno, tvar, poiaton pozciu, smer a alie veci). Ak potrebujete vytvori korytnaku v programe alebo chcete rovno nastavi nejak parametre a nechcete sa preklikva cez okienka, mete poui prkaz nov "korytnaka [ meno Benjamn poz [100 100 ] smer 90 hp 3 ] Vznikne nm korytnaka, ktor sa vol Benjamn, domovsk pozciu bude ma v bode [100 100], bude otoen na vchod a hrbka jej pera bude 3. Daj sa nastavi aj niektor in vlastnosti. Ak ich chcete nastavi , do hranatej ztvorky pridte aliu dvojicu vlastnos hodnota. Ak chcete, aby mala korytnaka naprklad nejak in tvar, pridte dvojicu tvar martan a v korytnake, ktor vznikne by nikto to mil tvornoh zviera nespoznal. iadnu vlastnos samozrejme nastavova nemuste. Ak ni nenastavte, korytnaka dostane tandardn meno (pravdepodobne nieo ako k4) a vetky ostatn parametre bud tie nastaven na tandardn hodnoty. loha .1: Prkazom zruObjekt vetky zrute vetky korytnaky, ktor mte a potom vytvorte tri korytnaky, ktor sa bud vola Hugo, Karolna a Kleof, bud ma tandardn tvar a kad bude niekde inde. Ke teraz zadte prkaz (naprklad dopredu 100), napodiv sa pohne len jedna korytnaka. (Pravdepodobne Hugo. Zle od poradia, v akom ste ich vytvrali.) Je to dan tm, e nie vetky korytnaky s vdy aktvne. Niektor skrtka spia. Ak chcete zisti , ktor korytnaka je hore, zadajte prkaz p kto. Zoznam kto obsahuje zoznam vetkch korytnaiek, ktor s momentlne aktvne. Ak chceme pohybova inmi korytnakami, musme ich najprv zobudi . Sli na to prkaz odteraz. Ak zadte prkaz odteraz [ Karolna Kleof ], aktvne bud korytnaky Karolna a Kleof. (Hugo nie, ten pjde spa .) Skste teraz zopakova prkaz dopredu 100. Zoznam vetky obsahuje vetky korytnaky. Take si ich meme vypsa prkazom p vetky, alebo ak chceme, aby vetky korytnaky boli aktvne, meme napsa odteraz vetky. loha .2: Nastavte vetky korytnaky ako aktvne a vyskajte si hromadn drezru. sprav o prkaz nechSmer 90 ? sprav prkaz vpravo nhodne 360 ? o Posledn prkaz je tak trochu prekvapenm. Je sce pravda, e vetky korytnaky sa otoili o nhodn uhol, ale vetky o ten ist. Imagine najprv vymyslel nhodn uhol a potom vetky tri korytnaky o ten uhol otoil. Ako to spravi , aby kad korytnaka nabrala in nhodn smer? Imagine m na to prkaz kad. Ak zadte prkaz kad [ vpravo nhodne 360 ] to, o je v hranatch ztvorkch sa vykon pre kad aktvnu korytnaku zvl a teda kad korytnaka naberie in nhodn smer.
13 No no... u autori Comenius Loga....

28

Niekedy sa stane, e nechceme meni to, ktor korytnaky s aktvne, ale chceme, aby nejak krtku lohu vykonali niektor in korytnaky. Ke zadme nasledujce prkazy odteraz [ Hugo Kleof ] pre [ Hugo Karolna ] [ dopredu 100 ] Pohn sa korytnaky Hugo a Karolna bez oh adu na to, e Karolna prve sp a Kleof je hore. loha .3: Vyskajte zada nasledujce prkazy: zruObjekt vetky opakuj 50 [ nov "korytnaka [] ] kad [ vpravo nhodne 360 ] dopredu 150 loha .4: Vyskajte nasledujcu sadu prkazov. Preo to rob, o to rob? Ak bude stav po druhom prkaze? zruObjekt vetky opakuj 36 [ nov "korytnaka [] odteraz vetky vpravo 10] opakuj 360 [ dopredu 2 vpravo 1 ] loha .5: Vytvorte z korytnaiek nasledujci obrazec:

loha .6: Vytvorte nasledujci obrazec:

loha .7: Vymyslite ete nieo pekn.

29

Dvansta kapitola

Korytnaka a rekurzia
Kedysi dvno, ke ste chodili do klky, urite ste pouli rozprvku o kohtikovi a sliepoke. Pointa bola zhruba v tom, e kohtik bol nenaran, zabehlo mu zrnieko, iiel sa zadusi a sliepoka ho musela zachraova . Samozrejme beala ku studni po vodu. Keby studa nevym ala, sliepoka by vodu nabrala, kohtik by sa napil a bolo by po rozprvke aj ke to by vzh adom na d ku prbehu bol skr vtip, ako rozprvka. Ale studa vyhlsila: Nie, nie, iadnu vodu nedm, km nedonesie od hospodra dbn. No a sliepoka ako vzorn manelka beala za hospodrom. A zasa by to mohlo pekne skoni , keby hospodr za zapoianie dbnu nechcel nov traky. A v obchode sliepoke nechceli da nov traky, km im nezavedie internet. A poskytovate internetovch sluieb nechcel sliepoke zavies internet, km mu nedonesie originl od Picassa. A Picasso nechcel ni nama ova , km nedostane pekingskho pinlka. A tak to mohlo s do nekonena, keby sliepoka nhodou niekde nenala zabehnutho pekinza. Zaniesla ho Picassovi, ten nama oval originl, provider zaviedol internet, obchodnk daroval traky, hospodr poial dbn, studa dala vodu, kohtik sa napil a vetko bolo v poriadku. Podstatnou fzou tej rozprvky je ten moment, ke sliepoka nala toho pinlka. Neby onej astnej udalosti, kohtik by nepreil. V tom bode sa cel rozprvka zvrtla a vetko ilo k lepiemu. Podobne to fungovalo, ke sme kedysi dvno v deviatej kapitole potali faktoril. T funkcia, ktor ho rtala, vyzerala takto: viem faktoril :n ak2 :n = 1 [ vsledok 1 ] [ vsledok :n * faktoril (:n - 1) ] koniec A ke sme chceli vyrta faktoril 4, funkcia sa pozrela na svoj tret riadok a povedala: Ej, vyrtam ti ja tyri faktoril, ri mldenec, i krsna deva, len treba zisti , omu sa rovn tri faktoril. To u len potom vynsobm tvorkou a bude to. A tak bolo treba rta faktoril 3. Ale druh volanie funkcie zas vym alo. Ej, zrtam, zrtam, len by som potrebovala vedie , omu sa dva faktoril rovn. Ten vynsobm trojkou a hotovo. A tak bolo treba rta faktoril 2. Funkcia sa zavolala tretkrt a zase hovor Vyrta dva faktoril je hraka. Vynsobm dvojkou jedna faktoril. Ko ko je jedna faktoril? A tak sa funkcia volala tvrtkrt. No a v tomto momente dolo k astnmu obratu rovnajcemu sa nlezu pinlka. Funkcia prestala vym a , ke jej dali vyrta faktoril 1, povedala, e jedna a vetko sa to zaalo vraca nasp . Tretie volanie funkcie (ktor rtalo faktoril 2) vynsobilo jednotku dvomi a vrtilo vsledok 2, druh volanie funkcie (rtalo faktoril 3) vynsobilo dvojku tromi a vrtilo vsledok 6 a prv volanie funkcie t estku vynsobilo tyrmi a hrdo vyhlsilo, e tyri faktoril je dvadsa tyri. No a takto nejak funguje rekurzia. Rekurzia sa d vyui aj na generovanie niektorch zaujmavch obrzkov. Urobme si naprklad procedru iara, ktor bude ma dva parametre. Prv bude d ka a druh rove rekurzie. Ak bude rove rekurzie 0, nakresl sa iba iara danej d ky. Take iara 300 0 nakresl: Pri vyej rovni rekurzie sa ale procedra bude sprva rafinovane. Zavol op procedru iara, 30

ale s tretinovou d kou a rovou o 1 menou. Potom sa oto v avo o 60 stupov, znovu zavol procedru iara s rovou o 1 niou, oto sa vpravo o 120 stupov, znovu zavol procedru iara a nakoniec sa oto v avo o 60 stupov a zas zavol procedru iara. Kd procedry bude teda vyzera takto: viem iara :dka :rove ak2 :rove = 0 [dopredu :dka] [ iara (:dka / 3) (:rove - 1) vavo 60 iara (:dka / 3) (:rove - 1) vpravo 120 iara (:dka / 3) (:rove - 1) vavo 60 iara (:dka / 3) (:rove - 1) ] koniec Ak zadme prkaz iara 300 1, korytnaka nakresl

ak zadme prkaz iara 300 2, korytnaka nakresl

ak zadme prkaz iara 300 3, korytnaka nakresl

a ak zadme prkaz iara 300 7, korytnaka nakresl

Ak ste niekedy pouli o fraktloch, tak takto vznik jeden z ich typov. loha .1: Vyskajte si funkciu iara.

31

loha .2: Zistite, o urob funkcia viem pokus :n ak2 :n = 0 [ ukoni ] [ pokus (:n - 1) koniec

do :n vpravo 30 ]

loha .2: Zistite, o vypota funkcia viem rymry :n ak2 :n = 1 [ vsledok 1 ] [ vsledok :n + rymry (:n - 1) ] koniec

32

Trinsta kapitola

Korytnaka a zoznamy
Tto kapitola bude ak pre ak, pretoe sa v nej bude mlo kresli a ve a rozm a . Ide vak o vec ve mi dleit, bez ktorej by mnoh veci v Imagine nefungovali ide o zoznamy. So zoznamami sme sa u nieko kokrt stretli bez toho, e by sme na ne nejako zvl upozorovali. Ak sme naprklad potrebovali uri pozciu nejakej korytnaky na ploche, slil na to prkaz poz. Ten nm ako vsledok nevrtil jedin slo, ale zoznam dvoch sel, ktor reprezentovali x-ov a y-ov sradnicu korytnaky. Prkaz vetky nm vrtil zoznam vetkch korytnaiek a aj ke sme zadali prkaz p "inica, nechali sme iba vypisova zoznam obsahujci psmenk , i, n, , i, c, a a. Do zoznamov je mon uklada velio. Obrzky, sla, psmen, slov aj in zoznamy. Zoznamy meme s pomocou pecilnych funkci prezera a meni . Niektor funkcie chc zoznamy ako vstupn parametre a niektor funkcie ich zase vrtia ako vsledok. Skrtka, kam sa pozriete, vade sam zoznam. A lohou tejto kapitoly je naui vs so zoznamami pracova . Pre zaiatok si nejak zoznam ulome do premennej: urob "zoznamek [ a be ce de e ef ge ha ] Prv prvok zoznamu nm vyberie funkcia prv. Take ak napete prkaz p prv :zoznamek, Imagine vm nape a. Polsedn prvok zoznamu njde funkcia hdajte ktor :-) no no, je to funkcia posledn. Take prkaz p posledn :zoznamek nm nape ha. Ak chceme vypsa tret prvok zoznamu, meme poui prkaz p prvok 3 :zoznamek. (Nape to ce.) Prkaz bezPrvho usekne zo zoznamu prv prvok, take prkaz zobraz bezPrvho :zoznamek vype [ be ce de e ef ge ha ].14 Podobne prkaz bezPoslednho odsekne zo zoznamu posledn prvok. Prkaz bezPozcie zo zoznamu vynech prvok na urenej pozcii. Teda naprklad prkaz zobraz bezPozcie 3 :zoznamek vype [ a be de e ef ge ha ]. Ak chceme dva zoznamy spoji , zli na to prkaz veta. Take prkaz zobraz veta :zoznamek [ jeden dva tri ] vype [ a be ce de e ef ge ha jeden dva tri ] Ak chceme vedie poet prvkov zoznamu, sli na to (prekvapivo) funkcia poet. (Take p poet :zoznamek nape 8.) Dobre. Mme milin novch funkci a teraz ako ich poui . Predstavte si, e mme v premennej bodky uloen nasledujci zoznam bodov: [ [0 0] [20 0] [20 20] [0 20] [0 40] [-20 40] [-20 20] [-40 20] [-40 0] [-20 0] [-20 -20] [0 -20] [0 0] ] (vimnite si, e je to zoznam malch dvojprvkovch zoznamov). Chcli by sme, aby ich korytnaka vetky postupne navtvila aby sa pre kad bod zavolala rocedra nechPoz, ktor korytnaku na dan bodk premiestni. Pouijeme cyklus opakuj a opakova budeme to kokrt, ko ko bodov mme v zozname. Pri prvom opakovan treba vybra prv prvok zoznamu, pri druhom druh... Na
14 Prkaz zobraz, skratka zo na rozdiel od prkazu p nakresl okolo vypisovanho zoznamu aj jeho hranat ztvorky.

33

to, aby sme zakadm vybrali sprvny bodk, pouijeme funkciu potadlo, ktor nm pota, ko kkrt u cyklus opakuj be. Take vykreslenie bodkov bude vyzera nasledovne: opakuj poet :bodky [ nechPoz prvok potadlo :bodky ] loha .1: Urobte si premenn bodky, ktor obsahuje uveden zoznam a vyskajte si to. Pozerajte sa na uveden prkaz dovtedy, km nepochopte, ako vlastne funguje. (Prpadne sa sptajte.) Ete jedna ukka prce so zoznamami. Potrebujeme napsa funkciu reverz15, ktor dostane na vstupe zoznam a vrti zoznam otoen naopak. Teda ak na vstupe dostane [ a b c ], ako vsledok vrti [ c b a ]. Pouijeme v nej nau mil rekurziu. Funkcia funguje jednoducho. Ak m zoznam d ku 1, netreba ni obraca . A ak m viu d ku, odtrhneme prv prvok, na zvyok zoznamu potveme pvodn otaciu funkciu (a budeme dfa , e sa asom dopracuje k jednoprvkovmu zoznamu, kde sa situcia oto) a prv prvok priplcneme na koniec: viem reverz :a ak poet :a <= 1 [ vsledok :a ] vsledok (veta reverz bezPrvho :a prv :a) koniec Predstavte si, e funkcii reverz predhodte zoznam [ a b c d ]. Kee m tyri prvky, reverz m vrti vsledok (veta reverz [ b c d ] a). Na to sa ale mus funkcia reverz znovu zavola , aby zistila reverz [ b c d ]. Toto druh volanie znovu utrhne prv prvok a nehc si zisti , o je reverz [ c d ]. Tretie volanie zas odtrhne prv prvok, nech si zisti reverz [ d ], konene sa dozvie, e [ d ], (ak m zoznam jeden prvok, tak ho otoi vieme a to je naa vhra spomete na rozprvku z predolej kapitoly) priplcne c zaho a vrti vsledok [ d c ]. Druh volanie sa teda dozvie, e reverz [ c d ] je [ d c ], prilep za neho b a vrti [d c b]. No a prv volanie, kee sa u dozvedelo, o je to reverz [ b c d ], v azoslvne prilep na koniec to a a vrti vsledok [ d c b a ]. loha .2: Vyskajte a pochopte. loha .3: Napte funkciu ptp, ktor na vstupe dostane zoznam a vype jeho prv, tret a posledn prvok. loha .4: Napte funkciu, ktor dostane na vstupe zoznam a ako vsledok vrti ten ist zoznam bez poslednch troch prvkov. loha .5: Napte funkciu plus, ktor dostane na vstupe zoznam sel a vype sla o jedna vie, ne s tie v zozname. loha .6: Napte funkciu xx, ktor na vstupe dostane zoznam bodov (mete poui bodky) a vype ich x-ov sradnice. loha .7: Napte funkciu max, ktor dostane na vstupe zoznam sel ako vsledok vrti najvie z nich.

15 Tto funkciu robme len z cvinch dvodov. Imagine m funkciu prevr, ktor rob presne to ist.

34

trnsta kapitola

Korytnaka mnohch tvr


Ke ste skali nejak veci s Imaginom, je ve mi pravdepodobn, e sa vm podarilo zmeni tvar korytnaky. Ak sa vm to ete nepodarilo, sta na korytnaku klikn pravm tlaidlom myi, z ponuky vybra Zme k1 (samozrejme, ak sa korytnaka nevol k1, bude tam nieo troka in) a v dialgovom okne, ktor na vs vysko zvoli gombk Tvar... a mete si vybra , i m korytnaka vyzera , ako robot, domorodec, asteroid alebo Nemecko. Tieto a in korytnaky s sas ou Imaginu a mete ich vo svojich projektoch vyui . ale robi vtedy, ak nemte k dispozcii korytnaku, ak o prve potrebujete? Ako vdy mte dve monosti prv je pod ahn bezndeji a na vetko sa vyka a . Druh je urobi si korytnaku ak potrebujete. Nstroj na vytvranie novch korytnaiek sa vol LogoMotion. A op mte dve monosti. Prv je, e spustte LogoMotion priamo z pracovnej plochy, urobte si nov tvar korytnaky a ke ste hotov ulote si ju (v menu Sbor a Uloi ako...) k ostatnm korytnakm a natate s pomocou menu alebo s pomocou prkazu nechTvar. Ak naprklad chceme, aby korytnaka k2 zskala tvar uloen v sbore robot.lgf z adresra Imagine\Obrzky, pouijeme prkaz k2'nechTvar "robot Tento prstup m t vhodu, e korytnaku, ktor vytvorte, mete pouva vo viacerch projektoch a mete ju da k dispozcii komu chcete. Nevhodou je, e korytnaku muste skladova v adresri Imagine\Obrzky (alebo niekde inde a potom v mene korytnaky muste uvies cel cestu) a ak projekt ktor t korytnaku pouva presuniete na pota, kde ju nemte, alebo mte uloen inde, tak nebude fungova . Druh monos je urobi si obrzkov premenn. Mete to spravi naprklad prkazom urob "hihi PrzdnyObrzok V okne pam sa vm objav premenn hihi, ktor je obrzkov a ke na u kliknete a sksite zmeni jej hodnotu, otvor sa vm LogoMotion a vy sa mete umelecky realizova . Ke dokreslte, vyberiete z menu Sbor/Skon i a ke sa vs program spta, i chcete uloi zmeny, kliknete, e no.16 Nov obrzok sa ulo do premennej a t mete pouva benm spsobom (naprklad k2'nechTvar :hihi ) Vhodou tohto prstupu je, e obrzok je priamo sas ou projektu. Ak ho ale chcete da niekomu inmu, muste ho znovu otvori v LogoMotion a uloi do sboru. Fajn. Take vieme, o chceme urobi , mme spusten LogoMotion, jedin otzka je, ako to urobi . Ak kreslte iba jeden obrzok, situcia je celkom jednoduch. Nstroje na kreslenie a vber farby s podobn, ako pri inch kresliacich programoch. tvoreky s bodkou s priesvitn. Ak chcete nieo, o u ste zafarbili spriesvitni , miesto fixky si nastavte gumu. Jednotliv kresliace nstroje tu do detailov rozobera nebudeme. Vyskajte si to sami. Cel je to vymyslen pekne a intuitvne a ak chce
16 Cel tto akcia sa d skrti na stlaenie tlaidla F12, ktor znamen uloi a skoni

35

lovek spravi nejak pecilnu korytnaku, me sa s tm hra dlh hodiny. Ako ale viete, korytnaka, to nie je len jeden obrzok. Je tam mnoho alch detailov. Niektor korytnaky sa hbu. Niektor korytnaky menia tvar pod a toho, ktorm smerom s otoen. (no, aj plne najtandardnejia korytnaka m tto vlastnos ke je otoen vpravo, pouije sa in obrzok, ne ke je otoen hore. Pod a toho vlastne poznme, ktorm smerom pjde.) Korytnake treba uri , ktor je jej zkladn bod, ktorm pe at. A LogoMotion m nstroje, s ktorch pomocou mete toto vetko urobi . Povedzme si najprv nieo o animciach. Kad animcia sa sklad z jednotlivch fz. Ak chcete, aby sa vm korytnaka hbala, treba nakresi nieko ko obrzkov a tie sa bud na mieste korytnaky cyklicky vykres ova . Ak chcete korytnake prida aliu fzu, sli na to tlaidlo . Objav sa vm plne nov obrzok a do neho mete aliu fzu nakresli . Aby ste sa s novou fzou trafili na presne to miesto, na ktor sa trafi potrebujete, me by uiton zapn si priesvitky (tlaidlo ). Vtedy sa vm predol fza slabko nakresl pod plochu, aby ste vedeli, kde o je. Jednotlif fzy sa vm zobrazuj v okne Obsah.

. Ak takto animovan Ak si chcete animciu pusti u v LogoMotion-e, pouite tlaidlo obrzok pouijete ako tvar korytnaky, korytnaka sa vm bude sama hba . Takto vytvoren korytnaka m ale t vlastnos , e vyzer stle rovnako bez oh adu na to, ktorm smerom je otoen. Ak sa jedn o jednoduch animciu letiacej vrany, je to v poriadku. Ale ak by sa jednalo o pracovn korytnaku, ktor mimochodom vbec nemus by animan, je dleit, aby sa z jej vzh adu dalo uri , ktorm smerom je otoen. Na to, aby sa korytnaka menila v zvislosti od toho, ktorm smerom je otoen, treba spravi viacero zberov. Nov zber pridte tak, e Kliknete pravm tlaidlom myi na koliesko v obsahu (obrzok vpravo) a vyberiete pravy/Vloi nov za. Koliesko sa rozdel na dve rovnak asti, medzi ktormi sa mete prepna kliknutm myi. Ak bude korytnaka otoen do hornej polovice, bude sa zobrazova prv zber. Ak bude otoen do dolnej polovice, bude sa ukazova druh zber. (Oba tieto zbery samozrejme mu by animovan.) Zberov meme vloi viacero. Kruh reprezentujci jednotliv smery sa potom rozdel na viacero rovnakch ast. Kad zber bude vykres ovan iba vtedy, ke bude korytnaka otoen tm jeho smerom. (Vyznaen zber na obrzku v avo bude vykreslen, ak bude azimut korytnaky medzi 30o a 90o. Korytnaka z tohto obrzku m 6 zberov.) tandardn korytnaka obsahuje a 24 zberov. (Z toho sa d ahko vypota , e ak ju budete ota pomaly niektorm smerom, zmenu smeru zaregistrujete iba kadch 15 stupov.) Ak chcete korytnake nastavi zkladn bod, pouite tlaidlo . Na korytnake sa objav zameriavac kr, z ktorho pomocou mete posun zkladn bod tam, kde ho potrebujete ma . LogoMotion je ikovn a relatvne rozsiahly nstroj na podrobn popis ktorho zaleka nesta jedna kapitola. Je tu ve a priestoru na skanie. Take skajte a ak nieo neviete, obr te sa na manul, na vyuujceho i inho odbornka alebo na lampre. loha .1: Vyrobte nejak skvel korytnaku. 36

Ptnsta kapitola

Korytnaka a umenie
Nae rozprvanie o korytnakch a Imagine na nejak as zmen podobu. Doteraz sme si vinou rozprvali o novch prkazoch a o tom, ako ich vyui . Teraz to budeme robi trochu inak. Na zaiatku bude vdy st nejak projekt. Budeme ma nejak viu vec, ktor budeme chcie urobi a budeme si ukazova , ako na to. Km to bude hotov, me asto prejs nieko ko kapitol. A popri tom sa naute ako veci funguj a ako sa daj ikovne urobi . Pripravte sa, prichdza prv projekt kreslenie. Poksime sa spravi program, ktor rob nieo podobn, ako kresltko od Microsoftu (alebo ubovo n in kresltko). Malo by to vedie meni farbiky, malo by by vidie , ktor farba je zapnut, malo by to ma gumu, malo by to vedie kresli rovn iarky, obd niky a kolieska, vyp a uzavret oblasti, psa do obrzku psmenk a potom to cel vedie uloi na disk a znovu preta . Kadmu, kto aspo matne tu, ko ko roboty ns ak, sa pri pretan predolch riadkov museli zachvie kolen. Ale nebojte sa. Nie je to otzka jednej kapitoly, ani jednho da. Zaneme pomaly a postupne budeme vylepova . Take najprv zrume korytnaku. (prkaz zruObjekt vetky) Potom si na plochu pridme nov papier. Spravme to tak, e klikneme na tlaidlo a potom na ploche potiahneme myou, kde papier chceme ma . Tak papier je praktick vec. Je to nieo ako obrazovka v obrazovke. Papier me ma svoje vlastn korytnaky, ktor z neho nemu zliez . Ke potrebujeme nejak as obrazovky vyleni na nejak el, je dobr si na to zriadi papier. N papier bude presne t as obrazovky, do ktorej sa bude kresli a zvyok obrazovky si nechme na ovldacie prvky. Ak spene pridte papier, malo by vm to vyzera podobne, ako na obrzku vpravo. Teraz budeme chcie zabezpei , aby sa na ten papier dalo kresli . Jednu z monost, ako sa to d urobi , sme u ukzali v 6. kapitole. Teraz si ukeme in monos . Najprv si na papier pridme korytnaku (naprklad tak, e klikneme na tlaidlo a potom na papier). Korytnake zmenme meno na Psatko (klikneme na u pravm tlaidlom, zvolme Zme k1 a nov meno napeme do kolnky Meno.) Na korytnake ns momentlne zaujma najm t jej vlastnos , e vie po papieri psa . Poksime sa dosiahnu , aby sa vdy, ke na papier vstpime myou, korytnaka drala presne pod myou. Pomu nm star znmi udalosti. Udalosti sa toti nemusia vz ahova len na korytnaky. Aj tak papier vie svoje udalosti spracovva . Preto sa prepnite do okna pam , dvojkliknite na v papier (pravdepodobne sa bude vola papier1), zapnite si udalosti, pridajte udalos priPohybeMyi a do patrinej priehradky Imaginu napte, aby vtedy spravil Psatko'nechPoz pozMyi Skste teraz prejs myou ponad papier a uvidte, ako sa bude sprva korytnaka Psatko. loha .1: Spravte to vetko a potia to. Dajte si pozor, aby ste pridali udalos papieru a nie korytnake, alebo strnke. Dobre. Korytnaka sa hbe spolu s myou a vade kresl. Chcelo by to zariadi , aby kreslila iba vtedy, ke mme stlaen av tlaidlo na myi. To sa d zariadi pomerne jednoducho. Korytnake 37

Psatko pridme dve udalosti. Povieme jej, aby priavomDolu spravila peroDolu a priavomHore spravila peroHore. (Pozor, toto musia by udalosti korytnaky a nie udalosti papiera. Korytnaka toti stle tr pod myou a na papier samotn momentlne nemte ako klikn .) Vyskajte si to. Ak ste si to vyskali, vidte, e je na svete problm. Korytnaka sce prestala mra , ale ke ste na u klikli, odmietla sa pohn z miesta dovtedy, km tlaidlo na myi znovu nespustte. Stlaenie myi toti nezaznamenal papier, ale samotn korytnaka. T si my uzurpovala pre seba a odmieta ju uvo ni a dovtedy, km to ne astn tlaidlo nepustte. Tto neprjemnos meme ale celkom jednoducho odstrni . Kliknite pravm tlaidlom na korytnaku, vyberte Zme Psatko a v zloke Tvar zakrtnite monos Automatick ahanie. To spsob, e ke kliknete na korytnaku, budete ju aha so sebou a dovtedy, km tlaidlo na myi nepustte, o je zhodou okolnost presne to, o chceme dosiahnu . loha .2: Vyskajte. Fajn. Rob nm to, o potrebujeme a dokonca k tomu nepotrebujeme spusti iaden prkaz. U to m len jednu drobn slabinu zavadzia tam t korytnaka. Skry ju nememe. To by sa na u nedalo klikn a nemohla by spusti pero na psanie. A vli ju stle pod myou to nevyzer pekne. Ale aj to sa d uhra . Najprv zmenme tvar korytnaky (klik pravm tlaidlom...Zme Psatko... a potom klikn na to tlaidlo s obrzkom korytnaky.) Tvar zmenme pomerne dramaticky. Najprv zmenme rozmery korytnaky na 11 tvorek (v LogoMotion tlaidlo a potom u si domyslte) a potom ten tvorek vygumujeme (nezabudnite si miesto fixky zapn gumu). Nakoniec ete treba nastavi zkladn bod korytnaky na ten jedin tvorek, ktor jej zostal (tlaidlo ) take nakoniec by to malo vyzera ako na obrzku v avo. Kee m korytnaka len jeden tvorek a aj ten je priesvitn, je v podstate nevidite n. Poslednm problmom je, e ak korytnake kliknete na jej priesvitn asti, bene na to nereaguje. Take jej treba poveda , aby toto sprvanie zmenila a brala svoj jedin tvorek vne, aj ke ho nevidie . Klik pravm tlaidlom teraz nezaberie (z prve uvedench dvodov) take treba na Psatko dvojklikn v okne Pam , vybra zloku Tvar a zakrtn Reaguje aj na priesvitn. Od tejto chvle zane jednobodov priesvitn korytnaka znova vnma nae klikanie myou a bude robi presne to, o od nej potrebujeme. loha .3: Urobte projekt a potia to, vyskajte a ulote si ho na disk. Nabudce v om budeme pokraova !!! Na zver jeden teoretick postreh a jedna drobn praktick rada. Najprv k tej teri. V 6. kapitole sme naznaili, ako me vznikn kresliaci program. A s fintami z kapitoly 10 by sme vedeli vytvori prkaz, ktor by nm zabezpeil podobn funknos ako to, o sme tu prve spravili. Teraz sme ale nevyrobili prkaz. Namiesto toho sme na plochu rozhodili nejak objekty a povedali im, ako sa maj sprva . K tomu je sce uiton vedie vytvra aj nejak zloitejie prkazy a tto zrunos budeme potrebova , ale nadreli sme sa podstatne menej, ne keby sme to 38

mali zveri jednmu prkazu a pri tomto prstupe sa nm projekt bude ove a jednoduchie rozirova . A t drobn praktick rada? Ak chcete zmaza tie mranice, o ste na papier vyprodukovali, napte papier1'zma. Pokraovanie nabudce :-)

39

estnsta kapitola

Korytnaka a tlaidl
Nae rozprvanie o korytnake ofke sa dostalo do okrhlej estnstej kapitoly. (no okrhlej v dvojkovej sstave, ktor pouvaj potae, sa 16 zapisuje ako 10000 a v estnstkovej sstave 0x10). Budeme v nej vylepova to, o sme vytvorili v 15. kapitole a pridme niektor novinky. Tlaidl s benou sas ou nho ivota. u ide o tlaidl hardwarov (vypnae, i zvoneky, tlaidl na videu, tartovtka na raketu, kliktka na myi,...) alebo tlaidl softwarov (rzne gombky, sasti nstrojovch lt, hypertextov odkazy,... ) Tie softwarov s niekedy vyakan, niekedy jednoduch a obsahuje ich kad lep program. Sme na ne zvyknut, stlame ich a oakvame, e sa pri tom nieo udeje. A ani Imagine sa nevyhol monosti ozdobi v projekt rznymi gombkmi. Skste kdesi v h bke harddisku vyh ada projekt, ktor sme zaali v minulej kapitole a nahrajte si ho. (Kto ho nem uloen, ten me bu horko zaplaka , alebo poprosi kolegu, i sa nad nm nezmiluje, alebo si ho cel rchlo urobi ete raz.) Mete si skontrolova , i nevidite n korytnaka ete stle ije a i je ochotn stle pre vs kresli . Ak vetko funguje tak, ako m, meme zaa s pridvanm tlaidiel. Iste ste si vimli, e ak je nieoho ve a, tak to nie je vdy na osoh. A zvl to plat o mnostve mranc na papieri. V minulej kapitole sme spomenuli spsob, ako papier zmaza , ale klepa zakadm prkaz do prkazovho riadku nemus vyhovova kadmu. Preto si teraz sksime urobi zmazvacie tlaidlo. Nov tlaidlo pridme na plochu tak, e klikneme na tlaidlo a potom klikneme tam, kde nae nov tlaidielko chceme ma . Na ploche sa nm objav nieo podobn tomuto: Na prv poh ad iadna ve k vhra. Nevyzer to nijak asne, d sa na to sce klika , ale ni to nerob. Na astie ni nie je straten a novovzniknut tlaidlo je plne v naej moci a meme si ho prispsobi nam potrebm. Take najprv vzor. Tlaidlo me by textov, obrzkov alebo aj tak, aj tak. Podobne, ako ke sa men korytnaka, aj na tlaidlo treba klikn pravm tlaidlom myi a vybra monos Zme. Objav sa dialgov okno, ak mete vidie na obrzku v avo (mono o osi chudobnejie, niektor riadky sa objavuj iba za istch okolnost). Mete zmeni meno tlaidla17, popis (to je to, o je na tlaidle napsan) a in veci, o ktorch sa zmienime o chv u. Ak kliknete na roletku vzh ad a potom na najvie tlaidlo, ktor tam njdete, spustte LogoMotion a v om mete nakresli tvar, ktor chcete ma na tlaidle zobrazen. Odporame poui na obrzky na tlaidl rozmer 16 16 (mal ikona). Tie tu mete upravi vekos tlaidla, aby sa vm tam ten obrzok, ktor ste nakreslili vbec zmestil. Ak tam nechte obrzok aj popis, me vae tlaidlo vyzera naprklad takto: Tlaidlo u mme, m sa celkom k svetu, aj klika sa naho d, ale stle to m jednu slabinu ke ho stlate, vbec, ale vbec ni sa neudeje. Pome teda zariadi , aby prtomnos tlaidla na ploche mala nejak zmysel. Znovu vbehnite do dialgu, v ktorom mente tlaidlo a do
17 Meno tlaidla je nieo podobn ako meno korytnaky. S jeho pomocou sa na tlaidlo mete odvolva zvntra programu.

40

riadku priZapnut napte prkaz, ktor sa m vykona , ke tlaidlo stlate: papier1'zma. (Poznmka keby ste tam napsali iba zma, mazala by sa plocha (na ktorej nie je ni nakreslen) a papier by ostal nezmazan. Ak chceme zavola procedru zma, ktor sa tka nho papiera, treba napsa meno toho papiera, tesne za nm apostrof to je t jedna vodzovka hore a tesne za apostrofom prkaz, ktor m dan objekt vykona .) No a to je vetko. Ke teraz kliknete na tlaidlo, stane sa presne to, o ste chceli dosiahnu papier sa zmae. loha .1: Dorobte zmazvacie tlaidlo, vyrobte mu obrzok, ktor psob profesionlnym dojmom a sprevdzkujte ho. Teraz by to chcelo nejak farby. Na zaiatok si spravme jedno pastelkov tlaidlo, ktor by mohlo ma rovnak rozmery, ako zmazvacie, meno biela a mohlo by vyzera pribline takto: Dbajte na to, aby v kolnke Popis nebol iaden text, ktor by tentokrt na tlaidle iba zavadzal. Spomenieme si, e naa nevidite n korytnaka sa volala psatko a do kolnky priZapnut napeme psatko'nechFp "biela Kliknutie na toto tlaidlo spsob, e korytnaka bude kresli na bielo. (Vyskajte si to.) Mme tlaidlo, s pomocou ktorho vieme prepn farbu na bielu. Problm ale je, e nemme iadne in prepnacie tlaidlo. Take mme tri monosti. Bu nadosmrti kresli bielou, alebo si na in farby prepna z prkazovho riadku, alebo si dorobi alie tlaidl. no, c je sprvne, dorobme si alie tlaidl. Najjednoduchie to spravme tak, e klikneme na bielu ceruzku pravm tlaidlom myi, zvolme monos Skopruj do schrnky a potom klikneme pravm tlaidlom myi tam, kde chceme ma nov tlaidlo a zvolme monos Prilep zo schrnky. Tlaidlu upravme polohu, v LogoMotione ho prefarbme na lto, zmenme meno na lt a v kolnke priZapnut zmenme "biela na "lt. A meme sa tei , e mme u dve farby. Teraz meme prepna medzi bielou a ltou, ale z tlaidiel nijak nevieme uhdnu , o je prve zapnut. Bolo by ove a lepie, keby to tlaidlo, ktor sme prve stlaili, ostalo stlaen a dovtedy, km nezvolme nejak in farbu. Aj to sa d dosiahnu celkom jednoducho. Najprv musme obom tlaidlm nastavi , e s to prepnae (tak ako na obrzku v avo). Prepna je tlaidlo, ktor me osta zapnut. Ke to zapnete, objavia sa vm nejak alie nastavenia oh adom skupiny, do ktorej prepna patr. Ako slo skupiny je tandardne nastaven nula. Vtedy je prepna sm pre seba ke na neho kliknete, zapne sa, ke kliknete znovu vypne sa. Ke ho ale do nejakej skupiny zaradte, spsob to t zmenu, e ke ho zapnete, vetky ostatn prepnae z tej skupiny sa vypn. Ke ete navye zrute monos Dovol vypn vetky, bude vdy aspo jedna pastelka zapnut. A to je presne to, o potrebujeme. loha .2: Vyskajte si to, dorobte ete erven, zelen, modr a iernu pastelku a zabezpete, aby bolo vidie , ktor pastelka je prve zapnut. loha .3: Pridajte dve tlaidl, ktormi sa d prepna medzi hrubm a tenkm perom. Po splnen oboch loh by vaa pracovn plocha mohla vyzera podobne ako na obrzku dole. N kresliaci program zana pomaly skutone vyzera ako kresliaci program.

41

Sedemnsta kapitola

Korytnaka a posvatka
Prv vec, ktor na naom kresltku ete treba zlepi , je vber farieb. Zatia ich tam mme es . To je lepie, ako jedna, ale na nejak ve k umenie to stle nevyzer. Chcelo by to ma monos vybra si ktorko vek z farieb, ktor me pota zobrazi . Na takto vber farieb m Imagine pripraven dialg. Skste v prkazovom riadku zada prkaz p pomckaFarba 0 Prkaz pomckaFarba 0 vm vyrob okienko, v ktorom si mete vybra niektor z prednastavench farieb, alebo si s pomocou ervenej, zelenej a modrej zloky namiea tak farbu, ak vm vyhovuje. T nula prkazu povie, ak farbu m nastavi na zaiatok (nula je ierna). Vsledok prkazu (bu meno farby alebo tri farebn zloky) potom vype prkaz p. Ako tento dialg vyuijeme v naom programe? Do skupiny farebnch tlaidiel pridme alie me vyzera pribline takto: Nezabudnite nastavi , e patr do skupiny k ostatnm. Teraz u sta do kolnky Pri zapnut napsa pisatko'nechfp pomckaFarba pisatko'fp (v praklade do sloveniny: Zavolaj okienko na vber farby, na zaiatku mu nastav farbu pera psatka a vsledok nastav ako nov farbu psatka.) A mete sa vyteova z farebnch obrzkov. Lene zas to m drobn slabinu. Ke je stlaen erven tlaidlo, je jasn, e budeme kresli na erveno. Ale ak je stlaen dhov ceruzka, nastaven farba me by jemne ruov, tmavohned, nebkovo modr, i brontofialovohrkovan, nemme to ako rozozna . Chcelo by to zabezpei , aby bolo vidie , ak farba je prve nastaven aj nejak inak, ne tak, e je stlaen patrin tlaidlo. plne najlepie by bolo, keby nastavenie bolo vidie na naej vestrannej korytnake psatko. Jej tvar zatia obsahuje jedin (a aj to nevidite n) pixel. To zmenme. U sme sa stretli s prkazom nechTvar, s ktorho pomocou meme meni tvar korytnaky. Ako parameter sme mu zatia dvali len meno sboru alebo obrzok, ktorm sa momentlny tvar korytnaky m nahradi . Ako parameter mu ale meme zada aj nvod, ako sa m nov tvar korytnaky nakresli , take ak zadte prkaz psatko'nechTvar [ opakuj 4 [ dopredu 50 vpravo 90 ]] korytnaka nadobudne tvar h adnho tvoreka nakreslenho jej aktulnym perom. Pre nae ely bude plne stai , ak nov tvar bude kreslen jednoduchm prkazom bodka, ktor aktulnym perom sprav jedin bodku. Hrbku pera radej nastavte aspo na 5, aby tam bolo aspo nieo vidie . Take o treba urobi ? Treba prejs vetky farebn tlaidl a kadmu do kolnky priZapnut prida na koniec psatko'nechTvar [bodka] priom treba da pozor, aby tam zostalo vetko to, o tam bolo predtm. loha .1: Urobte to a potia to a vyskajte to. Pome sa teraz trochu pohra s hrbkou pera. Momentlne tam mme dve tlaidl, s ktorch pomocou meme hrbku meni . Mme na vber medzi 1 a 5 pixelmi. Nie je to iadna ve k slva. Bolo by lepie, keby sme si nejakm jednoduchm spsobom mohli zvoli ubovo n hrbku naprklad od 1 do 100. Na to sa dobre hod tak vec, ako posvatko.18 Take obe hrbkov tlaidl zrute a pridajte posvatko. Stlate ikonu , vyberte monos Zvisl posva a nejako
18 Spisovne posva, po anglicky slider.

42

vhodne ho umiestnite na plochu. Teraz pjde o to, posvatko nejak ikovne nastavi . Take na neho kliknite pravm tlaidlom a ideme ho meni . Najprv trochu zmenme vzh ad (neakane sa to rob v roletke Vzh ad). Vku mete jemne zvi (asi na 180) a zakrtnite Priesvitn pozadie, take posvatko bude vyzera pribline tak, ako na obrzku v avo. (Mete stlai OK a pokocha sa.) Pokraujte v zmench a presute sa do roletky Zkladn. Tam sa okrem mena (mete necha p1) nastavuje, ak je minimlna a maximlna hodnota posvatka. Ak chceme, aby sa hrbka pera menila od 1 do 100, minimlnu hodnotu nastavme na 1 a maximlnu na 100. Posvatko m svoju vlastn hodnotu, ku ktorej sa mete dopracova prkazom hodnota a ktor sa bude meni pod a toho, ako posvatko nastavte. plne hore to bude 1 a plne dole 100. (Keby ste potrebovali in rozsah, sta minimlnu a maximlnu hodnotu nastavi inak.) Teraz ete treba posvatku poveda , o m spravi , ak sa jeho hodnota zmen. Jednak treba psatku nastavi nov hrbku pera a jednak mu treba poveda , aby pod a novej hrbky pera zmenilo svoj tvar. V zkladnch nastaveniach mu do kolnky priZmene treba napsa psatko'nechHp hodnota psatko'nechTvar [ bodka ] A malo by to fungova . loha .2: Vyskajte. Na papieri meme pekne vidie , ako sa ve kos psatka men. Ale niekedy je dleit vedie aj seln hodnotu hrbky pera. Toto si meme zabezpei celkom jednoducho. Sta prida textov pole. Na to sli t ist ikona ako na pridvanie posvatiek, akurt treba vybra monos Textov riadok. Potom treba na ploche vyznai myou obd nik, kde chcete textov pole ma . Objav sa vm polko na text, ktor bude vyzera pribline takto: . Zmete jeho meno na hrbka (no, hdate sprvne, klik pravm tlaidlom...). Textov pole m podobne ako posvatko hodnotu. (Jeho hodnotou je to, o je v om napsan.) A tto hodnota sa d meni aj zvonka prkazom nechHodnota. Take znovu zmete posvatko a do kolnky priZmene na koniec dopte hrbka'nechHodnota hodnota Spsob to ten prjemn efekt, e hodnota posvatka19 sa zape ako hodnota textovho po a hrbka. Mete sksi . No fajn. Mme posvatko a ke ho posvame, men sa nm hodnota textovho po a. Lene aj do textovho po a meme psa . Ale momentlne by ste hodnotu v textovom poli prepisovali mrne. Na korytnaku psatko ani na posvatko to nem iadny vplyv. Bolo by celkom prjemn, aby, ke do textovho po a zapeme nejak rozumn hodnotu, sa zmena prejavila na posvatku aj na hrbke pera. Ni ahie. Zmete textov pole a do kolnky priZmene mu napte
ak ( zrove ( slo? hodnota ) ( hodnota <= 100 ) ( hodnota > 0 ) ) [p1'nechHodnota hodnota]

Ak zmente hodnotu textovho po a, over sa, i je to slo a nie nejak abecedn blbol a ak to slo je, i je v rozumnom rozsahu. Ak s vetky podmienky splnen (poaduje to prkaz zrove), hodnota posvatka sa nastav na hodnotu textovho po a. Cel alia iniciatva je na posvatku. Vyvol sa jeho udalos priZmene (pretoe jeho hodnota sa zmenila) a t nastav nov hrbku pera a zmen korytnaku. Ke v program dotiahnete a sem, malo by to vyzera pribline takto:

19 Ak chcem vedie hodnotu objektu, s ktorm prve pracujem, sta poui prkaz hodnota. Ak potrebujem hodnotu inho objektu, treba poui jeho meno a apostrof (naprklad hrbka'hodnota).

43

44

Osemnsta kapitola

Korytnaka a alie rafinovan funkcie


Kresltko je n prv v projekt a vydral nm u na tvrt kapitolu. A to mme pred sebou ete vetky zkladn funkcie. Ale nebojte sa. Poas tejto kapitoly sa poksime dorazi ho. Pome teda rchlo na vec. Urobte si tlaidl s menami pero, guma, vypl, obdnik, elipsa, nsoska a psmo. Mu vyzera pribline tak, ako na obrzku vpravo, vetky bud prepnae a bud patri do tej istej skupiny (take zapnut bude mc by najviac jedno z nich). Okrem nich si urobte ete dve obyajn tlaidl s menami uloi a otvori, s pomocou ktorch sa bud obrzky uklada na disk a ta z disku. Mu vyzera naprklad takto: . loha .1: Urobte. Najprv si povieme o tom, ako sa d zisti , i je niektor tlaidlo prve stlaen. Jednoducho povie nm to funkcia zapnutie. Take ak zadme do prkazovho riadku prkaz p pero'zapnutie, v prpade, e je tlaidlo pero prve stlaen, sa vype no, inak sa vype nie. (Skste si to pri oboch stavoch tlaidla.) Doteraz naa korytnaka psatko mala celkom jednoduch situciu. Ke sa tlaidlo na myi stlailo, zaala kresli (zavolal sa prkaz pd). Ke sa tlaidlo pustilo, kresli prestala (zavolala sa funkcia ph).20 Teraz to bude trocha zloitejie. Sprvanie korytnaky sa bude meni v zvislosti od toho, ktor nstroj je prve zvolen. Preto si otvorte okno korytnaky psatko, prepnite sa do roletky Procedry a pridajte dve nov procedry s menami avDolu a avHore. V procedrach zatia nebude ni, veci tam budeme pridva iba postupne. Teraz sa prepnite do roletky Udalosti. Mte tam dve udalosti PriavomDolu a PriavomHore. Zmete nastavenie tak, aby sa pri stlaen avho tlaidla zavolala procedra avDolu a pri jeho uvo nen procedra avHore. Teraz u bude treba len da procedram avDolu a avHore tak obsah, aby vetky nstroje fungovali tak, ako maj. V prpade, e je stlaen tlaidlo pero, je situcia rovnak ako predtm. Do procedry avDolu je teda treba prida riadok ak pero'zapnutie [pd] a do procedry avHore riadok ak pero'zapnutie [ph] Ete drobn kozmetick prava samotnho tlaidla pero. Zavrite okno psatka, otvorte okno pera (prav klik na tlaidlo...) a do kolnky priZapnut zadajte prkaz psatko'nechTvar [bodka]. To pri kadom zapnut pera nanovo nastav tvar psatka tak, aby vyzeralo rovnako, ako stopa, ktor bude zanechva. Ke si to teraz vyskate, malo by to robi presne to ist, o pred chv ou. A teraz meme pridva nov funkcie. Ak chceme spojazdni gumu, musme pero korytnaky prepn do reimu guma. (Pero sa me nachdza v jednom zo tyroch reimov: PeroHore, PeroDolu, Guma a InverznPero.) Take do procedry avDolu pridajte riadok ak guma'zapnutie [guma] a do procedry avHore riadok ak guma'zapnutie [ph]. Potom ete zabezpete, aby sa zmenil tvar psatka plne rovnako, ako v prpade pera a bude fungova u aj gumovanie. S tlaidlom vypl tie nebud vie problmy. Imagine toti pozn priamo prkaz
20 Detaily si pozrite v 14. kapitole

45

vypl, ktor zane od miesta, kde sa korytnaka nachdza a vetky body rovnakej farby, ku ktorm sa dostane, vypln farbou, ktor m nastaven ako FarbaVplne. Jedin drobn zdrhel je v tom, e farba vplne me by odlin od farby pera, take ju pred samotnm vyp anm nastavme tak, aby bola rovnak. Do procedry avDolu teda pridme riadok ak vypl'zapnutie [nechFv fp vypl]. Pri zapnut tlaidla vypl ete zmenme tvar psatka (napr. psatko'nechTvar [nechHp 2 do 5 vz 10 do 5 vp 90 do 5 vz 10]) a meme vyp a . Pri kreslen obd nikov a elps siahneme po kresliacich funkciach inho druhu. Vetko kreslenie nm doteraz obstarvala korytnaka. Ale aj jednotliv papiere maj svoje kresliace funkcie. Skste naprklad zada prkaz papier1'ppObdnik [ 10 10 50 80 ]. Nakresl sa vm obd nik, ktorho jeden roh bude ma sradnice [10 10] a proti ahl bude ma sradnice [50 80]. Papier m dokonca funkciu, s pomocou ktorej si meme natiahnu obd nik priamo myou a ona nm povie jeho sradnice. Vyskajte zada prkaz p papier1'ppPrunObdnik a potom vyznai na papieri myou obd nik. Ke skonte, obd nik zmizne a Imagine vm vype sradnice dvoch jeho proti ahlch vrcholov. No a tieto dve funkcie sa daj pre nae potreby dobre spoji . A mimochodom, tieto papierov funkcie maj znova samostatn nastavovanie farieb. Take nov prspevok do procedry avDolu bude vyzera asi takto: ak obdnik'zapnutie [ papier1'nechppFarba fp papier1'ppObdnik papier1'ppPrunObdnik ] Situcia pri elipsch je ve mi podobn. Rovno pridajte aj toto: ak elipsa'zapnutie [ papier1'nechppFarba fp papier1'ppElipsa papier1'ppPrunElipsa ] Tvar korytnaky by mal by o najmen, aby nezavadzala. Take mete pri oboch tlaidlch da do kolnky PriZapnut nieo ako psatko'nechTvar [nechHp 1 bodka] . S tlaidlom nsoska tie nebude ve k problm. Sta nastavi farbu pera na farbu bodu na ktorom sa prve korytnaka psatko nachdza a zmeni tvar psatka, aby sa prejavila zmena farby. Take zase prdavok do avDolu, tentokrt takto: ak nsoska'zapnutie [ nechFp farbaBodu nechTvar [ nechHp 2 do 5 vz 10 do 5 vp 90 do 5 vz 10 ] ] Rovnak tvar je treba psatku nastavi aj pri stlaen tlaidla nsoska (to u je na vs).21 A je na svete alia monos , ako si zvoli farbu. Skrtka si zjdete niekam do svojho obrzku a farbu si nasosnete. Pome sa teraz pozrie na vkladanie textu do obrzku. Tto loha sa d riei mnohmi spsobmi. My ju sksime riei takto: Pridme pod tlaidl al textov riadok, rovnako ako sme pridvali textov riadok pre hrbku pera (v kapitole 16). Nazvite si ho textk. Nie je potrebn, aby bol vidite n stle, take v tlaidle psmo nastavme priZapnut na textk'ukMa a priVypnut na textk'skryMa . Do kolnky priZapnut ete vpravme prkaz na vynulovanie textu textk'nechHodnota " a prkaz na zmenu tvaru psatka psatko'nechTvar [ nechHp 1 bodka ] . Teraz ke klikneme na tlaidlo psmo, objav sa przdne okienko na text a ke prepneme nstroj na nejak in, okienko zase zmizne. U len printi korytnaku psatko, aby v prpade kliknutia do plochy dan text vypsala. To tie nie je problm, na vetko s funkcie. Konkrtne na vpis textu na plochu sli korytnake prkaz text. (Ak prekvapiv.) Take do naej milej funkcie avDolu pripeme ak psmo'zapnutie [ text textk'hodnota ]
21 Preo sme vo funkcii avDolu nemuseli psa psatko'nechTvar ale stailo napsa nechTvar ? Preo ke menme tvar psatka z niektorho tlaidla musme psa psatko'nechTvar ?

46

a ke teraz klikneme na plochu (samozrejme pri zapnutom tlaidle psmo), korytnaka nm nape text z riadku textk. loha .2: Dorobte funknos vetkm vaim tlaidlm. No a blime sa do finle. N nstroj veobecnho umeleckho vyitia je u takmer dokonal. Cel to m ale jednu slabinu. Akonhle chceme kresli nov obrzok, predol je nenvratne straten. Chba tomu systm ukladania na disk. Take ho pome dorobi . Venujme sa najprv tlaidlu uloi. Imagine obsahuje skvel funkciu uloObrzok. Tejto funkcii treba zada dva parametre prv je meno sboru, do ktorho sa m obrzok uloi . Druh parameter je samotn obrzok. Funkcia uloObrzok je nato ko dokonal, e pod a mena sboru vyberie sprvny formt ukladania. Sbor s koncovkou .bmp ulo ako bitmapu, sbor, ktor m koncovku .jpg ulo ako komprimovan jpg-ko. Ke teda zadte prkaz uloObrzok "dielo.bmp papier1'pozadie to, o ste zatia na papier1 namachlili sa ocitne na harddisku v sbore dielo.bmp (pravdepodobne v adresri Program Files\Imagine\Obrazky) a mete si to pozrie naprklad s pomocou programu Gimp, i inho programu schopnho pracova s obrzkami. Obrzok by sme uloi vedeli. Aby to vyzeralo plne profesionlne, chcelo by to nejak menu na vber mena sboru. Ako sa d aka , Imagine m funkciu aj na toto. Skste zada prkaz p pomckaUloGrafiku [] Objav sa vm vberov menu. Skste vybra nejak sbor alebo zada nejak meno. Funkcia vrti meno tohto sboru aj s celou prstupovou cestou. No a tieto dve funkcie pekne spojme dohromady. Tlaidlu uloi povieme, aby priZapnut zavolalo procedru uloi. Prepneme sa do roletky Procedry a pridme procedru uloi. A do tejto procedry ulome nasledujci kd: urobTu "sbor pomckaUloGrafiku [] ak przdne? :sbor [ukoni] uloObrzok :sbor papier1'pozadie Najprv zavolme menu na vber mena sboru a vybrat meno ulome do premennej sbor. Ak je premenn przdna (dialgov okno sme zavreli bez toho, e by sme nejak meno zvolili), ni sa neudeje. Ak sa nm meno zvoli podarilo, obrzok sa ulo pod zvolenm menom. Podobn to bude aj s tlaidlom otvori. Nastavte PriZapnut na volanie procedry otvori, ktor pridte ako procedru tohto tlaidla. Vyuijeme dialg na vber obrzka na tanie, ktor zavolme prkazom pomckatajGrafiku [] . Samotn obrzok natame prkazom obrzokZoSboru a nastavme ho ako nov pozadie pre papier1. V tomto ale me by problm rozmer papiera sa pri zmene pozadia prispsob nastavovanmu pozadiu. Preto si star rozmer ulome do pomocnej premennej a po natan obrzka ho op nastavme. Take procedra otvori bude vyzera takto: urobTu "sbor pomckatajGrafiku [] urobTu "rozmer papier1'vekos ak przdne? :sbor [ ukoni ] papier1'nechPozadie obrzokZoSboru :subor papier1'nechVekos :rozmer No a to je vetko. Kresliaci program je hotov. Nie, e by nemal chyby (skste naprklad stlai farebn ceruzku a potom iadnu farbu nevybra a okno zavrie ) a e by sa na om nedalo u ni vylepi (naprklad monos meni pozadie, prida prcu s obrzkami rznych ve kost, dorobi lupu a podobne) ale u teraz sa s tm daj kresli celkom pekn veci. A alie vylepovanie je na vs. loha .3: Dorobte a ak viete, tak vylepite. 47

48

Devtnsta kapitola

Korytnaka a hodiny
V tejto kapitole sa budeme zaobera miniprojektkom hodinami. Vyrobme si klasick ruikov hodinky, ktor nm nzornm spsobom bud ukazova systmov as. Projekt si meme uloi na plochu a s jeho pomocou ma preh ad, kedy u konene zazvon alebo ako dlho u za tou mainou sedme, prpadne sa nm meme pochvli vzdialenejiemu prbuzenstvu, nech vie, ak poklad to m v rodine. Zaneme procedrou tart. Jednak, e je to pekn meno pre procedru, ktorou sa ide zana , druhak, e ak sa v Imaginovskom projekte nachdza procedra s tmto ubozvunm menom, tak sa vdy pri otvoren projektu automaticky spust, take si nemusme dra prsty pri vypisovan prkazov do prkazovho riadku. Ke sa procedra pe, mme dve monosti. Meme pouiva prkazy, ktor Imagine pozn a nejak to z nich posklada . (Tak sme to v podstate robili doteraz.) Je tu ale druh monos meme pouva prkazy, o ktorch nem Imagine ani ajn. Problm je v tom, e si ich potom musme naprogramova sami. Napriek tomu ale tento prstup m nieo do seba, take sa ho budeme dra . Procedra tart teda bude vyzera takto: viem tart vetkoPoma nakresliHodinky vyrobKorytnaky zapniHodiny koniec Aspo pribline je jasn, o jednotliv procedry maj robi . Prv zmae, o me. Druh nakresl cifernk. Tretia vyrob tri ruiky korytnaky a tvrt to cel spust. Kad z tchto procedr meme psa do istej miery nezvisle na ostatnch a ke sa nm neskr niektor z nich znepi, meme ju prerobi bez toho, e by sme pokodili ostatn. Take od zaiatku. Procedra vetkoPoma bude celkom jednoduch. Zrume vetky korytnaky a zmaeme plochu. viem vetkoPoma zruObjekt vetky zma koniec Procedra nakresliHodinky by tie nemala robi vnejie problmy. Sta vhodnou farbou nakresli dokola dvans iarok. Predtm si ale nastavte strnku tak, aby jej rozmery boli 320 320 bodov a poiatok sradnicovej sstavy bol v bode [160, 160]. ( Okno Pam , dvojklik na Strnka 1, zloka Vzh ad a tam rka, Vka a sradnice po iatku ) Samotn kreslenie me vyzera naprklad takto: viem nakresliHodinky nov "korytnaka [ meno Klementna ] odteraz "Klementna skry nechFp "bledoSiv nechHp 10 opakuj 12 [ ph do 120 pd do 20 ph vz 140 vp 30] zruObjekt "Klementna koniec 49

Vzh adom k tomu, e sme si prkazom vetkoPoma zmazali vetky korytnaky, na to, aby sme mohli vbec nieo nakresli si musme nejak zas vytvori . Nazveme ju Klementna, spravme ju aktvnou, skryjeme ju, nech ju nie je vidie , nastavme farbu a hrbku pera, nakreslme 12 iarok (pochopte, ako to kreslenie vlastne funguje!!!) a korytnaku Klementnu zase zrume. Teraz prde na vyrbanie korytnaiek ruiiek. Sta im nastavi meno a tvar. Tvar opeme s pomocou prkazov Imaginu s tm sme sa u stretli v naom ve kom vtvarnom projekte. viem vyrobKorytnaky nov "korytnaka [ meno Mal tvar [ nechHp 10 nechFp 0 ph vz 10 pd do 100 ] ] nov "korytnaka [ meno Vek tvar [ nechHp 5 nechFp 0 ph vz 20 pd do 150 ] ] nov "korytnaka [ meno Sekundov tvar [ nechHp 2 nechFp "erven ph vz 20 pd do 150 ] ] koniec Pri kreslen kadej ruiky sme sa posunuli o ksok dozadu, nech ruiky ksok prenievaj za miesto, okolo ktorho sa otaj. Sekundov ruiku sme nakreslili ervenou. Ostva nm u len posledn procedra, ktor spust proces otania ruiiek. Na to, aby sme zistili stav systmovch hodn sli prkaz as. Ak zadte prkaz p as, Imagine na vs vychrl zoznam tyroch sel, naprklad 21 8 6 740, kde jednotliv sla znamenaj hodiny, minty, sekundy a tisciny sekundy. Ak by sme potrebovali zisti poet mint, spravili by sme to prkazom prvok 2 as (detaily pozrite v trinstej kapitole). Sekundov ruiku bude najjednoduchie nastavi . Za 60 seknd sa mus otoi o 360 stupov. To je 6 stupov za sekundu. Take do sprvnej polohy ju nastav prkaz sekundov'nechSmer 6 * (prvok 3 as) Kde (prvok 3 as) je aktulny poet seknd. Mintov ruika to m trochu komplikovanejie. Ak nechceme, aby sa pohybovala iba raz za mintu, musme vypota , ak as minty uplynula. Podobne (a ete komplikovanejie) to je s hodinovou ruikou. Okrem sprvneho vpotu smeru ruiiek sa musme postara o to, aby sa sprvny smer nastavoval v pravidelnch intervaloch musme spusti proces, ktor sa o to bude stara . Oba tieto problmy riei funkcia zapniHodiny: viem zapniHodiny kadch 100 [ sekundov'nechSmer 6 * (prvok 3 cas) vek'nechSmer ((prvok 2 cas) + (prvok 3 cas / 60)) * 6 mal'nechSmer ((prvok 1 cas) + (prvok 2 cas / 60) + (prvok 3 cas / 3600)) * 30 ] koniec Prkaz kadch 100 spsob, e proces uveden v hranatch ztvorkch sa vykon kadch 100 miliseknd (teda desa krt za sekundu). Ruiky sa do sprvnej polohy bud nastavova takmer nepretrite a hodinky pjdu.
Aby bol projekt plne dokonal, mono by bolo vhodn do procedry tart prida na zaiatok ete funkciu

50

Dvadsiata kapitola

Korytnaka a potomkovia
Konene by to chcelo spravi nejak hru. Nieo jednoduchie, s m sa dalo hra , sme u urobili aj v predolch kapitolch, ale chcelo by to spravi nieo aspo trocha zloitejie. Na zaiatok sksime urobi variciu na klasiku raketka ostre uje asteroidy. Vdy, ke niektor asteroid zasiahne, ten sa rozpadne na tyri menie, kad z nich sa po zsahu rozpadne na tyri ete menie a a tie al zsah definitvne zlikviduje. Predbene nm pjde iba o to, aby to strie anie fungovalo a aby sa meteority rozpadali. Ke bude tento polotovar hotov, alie vlastnosti (naprklad nutnos uhba pred meteoritmi alebo ich zasiahnu skr, ne zasiahnu ma, stopovanie asu potrebnho na zlikvidovanie vetkch meteoritov, vpis sprvy o astnom ukonen hry, tabu ka najlepch dosiahnutch vsledkov, ... ) sa daj dorobi aj dodatone. Dleitou fzou vvoja hry je vytvranie animci jednotlivch postv, ktor sa v hre pohybuj (v programtorskom argne sa takto postavika hry vol avatar). Budeme potrebova nejak asteroidy (imaginovsk korytnaka Asteroidy.lgf nieko ko peknch obsahuje), raketu, strelu a vbuch. Bu si ich urobte sami, alebo pouite tie, ktor sme vyrobili my. N vbuch obsahuje 9 fz (s tmto faktom budeme pota , take ak si robte vlastn animcie, tie si ich urobte to ko, alebo zmete patrin miesta v kde.)

Okrem toho by to chcelo ete nejak rachot, ke sa nejak meteorit zasiahne. (udia znalej veci vedia, e kee vo vesmre nie je vzduch, nie je tam ani rachot, ale hri ocenia.) Bu si nejak njdite na internete, alebo pouite n. Korytnaky umiestnite do podadresra Imaginu s nzvom Obrazky a rachot do toho istho adresra, v ktorom mte projekt. Ke mme vetky sbory na sprvnych miestach, meme sa zaa venova programovaniu. A prve teraz nastal as spomen , preo m tto kapitola tak zvltny nzov. Ve na prv poh ad korytnaie potomstvo s vesmrnou strie akou ni spolon nem. S tm potomstvom je to toti tak korytnaka je potvora, ktor m rzne vlastnosti (naprklad tvar, smer alebo farbu pera). Lene obas aj nejak vlastnosti nem. Naprklad by sme chceli, aby asteroid mal urit rchlos . Meme poui normlnu korytnaku a zriadi jej premenn (takto sme to robili doteraz), lene ke nm tam tch asteroidov bude poletova ptns , bude treba tak premenn zriadi kadmu z nich, o je dos pracn. Ale to meme vyriei inak. Meme si urobi nov triedu asteroid, ktor bude potomkom triedy korytnaka. To, e je jej potomkom znamen, e poded jej vlastnosti. A okrem nich me ma aj nejak vlastn (teda naprklad t rchlos ), prpadne niektor rodiovsk vlastnosti me predefinova pod a seba. Pome teda vytvori nov triedu. Pouijeme na to (prekvapivo) nasledujci prkaz: novTrieda "korytnaka "asteroid []
nastavOkno, ktor Imagine nastav tak, aby nezaberal na ploche ve a miesta a neukazoval zbytonosti. Mete si ho dorobi naprklad takto: viem nastavOkno skryHlavnPanel bezPlochyVpisov zavriPam hlavnOkno'nechVekos [330 370] koniec jednotliv funkcie robia, je viacmenej zrejm z ich nzvov. Ak chcete vedie podrobnosti, pozrite si Pomocnka. o

51

Po prkaze novTrieda nasleduje meno rodiovskej triedy (v tomto prpade trieda korytnaka) a potom meno novej triedy. Na konci s hranat ztvorky v ktorch je mon rovno uri nov vlastnosti. To ale tentokrt spravme v okne pam , take bud przdne. Po vykonan uvedenho prkazu sa nm v okne pam objav tak vyblednut korytnaka to je ONA, naa nov trieda s nzvom asteroid. Smelo na u dvojkliknite. Uke sa vm podobn okno ako pri korytnakch, toto vak obsahuje iba tri zloky: Udalosti, Premenn a Procedry. Vyberte Premenn a hor sa pridva . Prv premenn, ktor pridme, sa bude od ostatnch v drobnom detaile li . Bude to toti premenn, ktor bude spolon celej triede. (Teda to nebude tak, e by si ju kad asteroid mohol nastavi po svojom.) Ako vidte na obrzku v avo, treba jej nastavi monos Spolo n. Bude to premenn predpona, ktor uruje, ako sa bud jednotlivm objektom danej triedy automaticky generova men. Ak jej hodnotu nastavte na ast, tak sa novm objektom triedy asteroid bud dva men ast1, ast2, ... (ak explicitne neurte in meno). Asi ste u uhdli, e trieda korytnaka m premenn predpona nastaven na k. Ostatn premenn bud vlastn. Bud to bu nov vlastnosti (ako premenn rchlos), alebo vlastnosti korytnaky, ktorm chceme pri vzniku nastavi nov tandardn hodnotu. Vytvorte a nastavte ich rovnako, ako vidte na obrzku. Vetky veci v tabu ke a na dve vnimky s itate n celkom jednoducho. Chceme, aby mal nov asteroid tvar asteroidy (konkrtne zber 6), chceme, aby reagoval na zrku a aby mal rchlos 1. Otzne s akurt tie otzniky. Otznik v Imagine sli ako univerzlny genertor nhody. Prkaz nechSmer ? znamen nieo podobn, ako prkaz nechSmer nhodne 360 a nechPoz ? nastav korytnaku na nhodn miesto na ploche. Take tmi otznikmi Imaginu povieme, e nov asteroid m ma nhodn polohu a smer. loha .1: Urobte triedu asteroid a potom nieko kokrt zadajte prkaz nov "asteroid [] to o bude robi ? loha .2: Rovnako, ako sme spravili triedu asteroid, teraz vyrobte triedu strela. Premenn predpona nastavte na strela, premenn tvar nastavte na strela, premenn reagujeNaZrku nastavte na no a pridajte premenn rchlos (hodnota 6) a vek (hodnota 0).22 Dajte pozor na to, aby premenn predpona bola spolon. loha .3: Urobte triedu vbuch. Premenn predpona nastavte na bum, tvar na vbuch, premenn autoAnimovanie na nie23, fza na 1 a reagujeNaZrku na nie. A ke vm to vytvranie novch tried tak ide, tak... loha .4: Urobte triedu raketa, s predponou raketa a tvarom raketa, ktor nebude reagova na zrku. Tieto triedy nm u na astie bud stai . Na asteroidy, strely a vbuchy budeme ma tri zoznamy, kad v jednej globlnej premennej. Ich men bud (prekvapivo) asteroidy, strely a vbuchy. Predbene bud przdne. Vytvorte si ich. (Prkazom urob "asteroidy [] podobne aj ostatn.) No a chceli by sme dosiahnu , aby sa kad asteroid pri svojom vzniku sm zapsal do zoznamu asteroidov. D sa to spravi s pomocou udalosti priVytvoren. To je udalos , ktor sa vyvol vdy
22 Strela nm neme poletova po hracej ploche donekonena, take budeme musie sledova jej vek a po nejakom ase ju zrui aj ke ni netraf. 23 Nechceme, aby sa vbuch ukazoval automaticky stle dokola, pretoe by bol problm ho v sprvnom okamihu zrui . Radej vypneme autoAnimovanie a budeme nastavova jeho jednotliv fzy sami.

52

prve raz pri vytvoren danho objektu. Take naej triede asteroid povieme, aby vtedy, ke nastane udalos priVytvoren vykonal objekt prkaz urob "asteroidy vloPosledn mojeMeno :asteroidy Prkaz mojeMeno vrti meno objektu, ktor ho zavolal (take naprklad k1'mojeMeno bude k1). Prkaz vloPosledn vyrob v tomto prpade zoznam, ktor vznikne vloenm mena objektu na koniec zoznamu asteroidov, take to sprav presne to, o potrebujeme. loha .5: Pridajte triede asteroid obsluhu udalosti priVytvoren. Vyskajte zada prkaz nov "asteroid [] Ak bude hodnota premennej asteroidy ? loha .6: Pridajte podobn spracovanie udalost priVytvoren aj triedam strela a vbuch. Dbajte na to, aby sa zapsali do svojich vlastnch zoznamov. Vetko starostlivo ulote, pokraovanie v alej kapitole :-)

53

Dvadsiata prv kapitola

Rozpohybovan korytnaky
Ke sme zaali vyrba nau hru, zaali sme tm, e sme si vyrobili tvary postaviiek (no, aj vbuch je postavika) a zriadili sme si objekty, ktor bud jednotliv postavy reprezentova konkrtne to boli objekty raketa, asteroid, strela a vbuch. Vyrobili sme si aj globlne prstupn zoznamy asteroidy, strely a vbuchy a zariadili sme to tak, aby sa patrin objekt hne pri vzniku zaradil do svojho zoznamu. Teraz bude treba zariadi , aby sa to vetko hbalo, zralo a vybuchovalo pod a naich predstv. Zanime s asteroidom. Vyrobme mu plne jednoduch procedru, ktor nazveme pohni a bude vyzera takto: viem pohni dopredu rchlos koniec Skrtka asteroid sa pohne svojou rchlos ou o ksok dopredu. Len tak na skku si vyrobte desa asteroidov (prkaz opakuj 10 [nov "asteroid []] ). Ke chceme pohn vetkmi asteroidmi, spravme to prkazom preKad :asteroidy [ pohni ] Tento prkaz je zo sloveninrskeho h adiska pomerne podivn. Asteroid je toti rodu muskho. Lene ako sme si povedali v predolej lekcii, asteroid je potomkom korytnaky, tm pdom je v podstate tie korytnaka. A o sa korytnaiek tka, je ensk rod na mieste. No a prkaz preKad urob pre kad korytnaku zo zoznamu, ktor mu predhodte to, o je uveden v hranatch ztvorkch. No fajn. Asteroidy sa nm o ksok pohli. Ako ale dosiahnu , aby sa hbali stle? Na to treba spusti proces. A proces sa spust celkom jednoducho. Sta napsa kadch 20 [ preKad :asteroidy [ pohni ] ] Vznikol proces. A tento proces si zobral na staros , e kadch 20 miliseknd vykon to, o sme mu povedali v hranatch ztvorkch. A tak sa asteroidy hbu, a km nestlame . loha . 0,5: Vyskajte. Teraz si zriadime ete jeden zoznam, ktor bude plni funkciu smetiska. Do neho budeme zapisova objekty zrel na znienie (a asom nejak funkciu poverme, aby ich zlikvidovala a upratala). Globlnu premenn, do ktorej ten zoznam ulome, nazveme znien. Ke si ju urobte, meme vyrobi procedru pohni pre objekt strela. Pre strelu musme zabezpei , aby sa hbala. Ale nemala by sa hba plne do nekonena. Treba zabezpei , aby asom vyhynula, aj ke ni netraf. Presne za tm elom sme triede strela minule zriadili premenn vek. Take funkcia pohni pre strely bude vyzera takto: viem pohni nechVek vek + 1 ak vek > 55 [ urob "znien vloPosledn mojeMeno :znien ] dopredu rchlos koniec Najprv sme vek zvili o 1, v prpade, e vek dosiahol 55 (a teda korytnaka rchlos ou 6 prela 54

330 krokov) tak si povieme, e u bezcie ne preletela dos a zaradme ju do zoznamu na znienie. No a nakoniec so strelou smelo pohneme o rchlos. Km nemme funkciu na sprvu zoznamu znien, iadne vyhynutie raketky sa neuskuton a bude sa do zoznamu pridva stle znova (ulote si projekt, vyrobte si proces na pohybovanie strelami, nechajte ho chv u bea a potom sa pozrite, o mte v premennej znien), ale nebojte sa, to sa asom zlep. alia dleit vec, ktor mus strela urobi , je, e si mus vimn , ak nieo trafila. Na to mme k dispozcii udalos priZrke. Aj asteroidy, aj strely s citliv na zrku, take ku kolzii medzi nimi me djs . Strele zriadime procedru havria, ktor zavesme na udalos priZrke. Od procedry havria budeme chcie , aby do zoznamu zniench objektov zaradila samotn strelu, potom vetky asteroidy, s ktormi sa prve prekrva a nakoniec na mieste, kde sa strela prve nachdza vyrobila vbuch. Take to me vyzera naprklad takto: viem havria urob "znien vloPosledn mojeMeno :znien urob "znien veta :znien prekrvajMa ( novN "vbuch "poz poz ) koniec Pouili sme nov prkaz prekrvajMa, ktor zist vetky korytnaky, ktor strelu prekrvaj a vrti ich pekne poukladan v zozname. Ten zoznam potom s pomocou prkazu veta kompletne prilepme k zoznamu korytnaiek na znienie. loha . 0,75: Urobte to potia to. Pome sa teraz venova vbuchom. Minule sme vbuchom nastavili hodnotu premennej autoAnimovanie na nie. Musme sa preto postara , aby sa jednotliv fzy vbuchu vykreslili tak, ako maj a ke u vbuch dovybuchuje, aby sa zlikvidoval a viac na obrazovke nestrail. Aj vbuchu spravme procedru pohni, ktor bude vyzera takto: viem pohni ak fza = 8 [ urob "znien vloPosledn mojeMeno :znien ] nechFza fza + 1 koniec Ak je vbuch v predposlednej (smej) fze, vyhodme ho na smetisko. Potom zapneme aliu fzu. Aj ke vbuch me by u na smetisku, likvidan procedra prde k slovu a o chv u, take posledn fza bude ete nejak as zobrazen. loha . 0,9: Potia to. No a nakoniec ostva samotn raketa. Jej lohou je vyp a strely. Vyrobme jej procedru stre, ktor vypust strelu tm smerom, ktorm je otoen raketa. Procedra bude potvora a ak u s dve rakety vypusten, aliu nevypust: viem stre ak poet :strely < 2 [ (novN "strela "smer smer) ] koniec Raketu budeme ovlda s pomocou klves. Jedna z monost, ako to urobi je, e jej zriadime nov premenn premenn ponukaKlvesov. Jej obsah bude takto: 55

[vavo [vavo 3] vpravo [vpravo 3] medzera [stre]] Od tohto momentu raketa zane reagova na to, o stlate. Ak stlate ipku v avo, oto sa o tri stupne do ava, ak stnate ipku vpravo, oto sa o tri stupne doprava a ak stlate medzeru, zavol sa procedra stre. loha .1: Potia to. Tto kapitola bola ahk, bola v nej iba jedna loha, take si to vetko pekne ulote, pokraujeme nabudce. :) Budeme robi hlavn procedru, ktor spsob, e sa to u bude da hra .

56

Dvadsiata druh kapitola

Explodujce korytnaky
V tejto kapitole sa poksime spravi hlavn procedru, ktor bude zodpovedn za to, aby sa asteroidy hbali, vbuchy vybuchovali a strely triafali. Majte na pamti, e vyrbame jednu ve k procedru. Jednotliv jej asti budeme priebene komentova . Nechvame na dvtipnosti itate a, aby odlil text, ktor m do procedry vloi od komentrov. Pripomeme, e procedra hlavn bude ma na starosti kadm objektom pohn iba o ksok. Neskr spravme proces, ktor ju bude v pravidelnch intervaloch sp a . Take viem hlavn Najprv sa budeme zaobera zoznamom znien. Pouijeme prkaz prePrvky, ktor do premennej :l bude postupne dosadzova vetky prvky zo zadanho zoznamu a s touto hodnotou vykon vetky prkazy uveden v hranatej ztvorke. prePrvky "l :znien [ Ak je prvch es psmen nzvu objektu strela, tak sa jedn o strelu. ak prvok [1 6] :l = "strela [ Znien strelu vyradme zo zoznamu striel a zrume. urob "strely bezVskytov :l :strely zruObjekt :l ] Rovnako, ako s vyradenmi strelami,teraz nalome s vbuchmi, ktor u dovybuchovali. ak prvok [1 3] :l = "bum [ urob "vbuchy bezVskytov :l :vbuchy zruObjekt :l ] Teraz ns ak najvia zbava. Prve zlikvidovan asteroid toti nemus len tak zmizn , ale pri zsahu sa me rozpadn na menie. ak prvok [1 3] :l = "ast [ urob "asteroidy bezVskytov :l :asteroidy pre :l [ Ke likvidujeme asteroid, musme sa pozrie , ak m zber. Najv asteroid m 6, men 2 a najmen 1. Ak sa prve nejedn o najmen z nich, vyrobme miesto neho tyri menie. ak zber <> 1 [ ak zber = 6 [ urobTu "nov 2] ak zber = 2 [ urobTu "nov 1] opakuj 4 [ ( novN "asteroid "poz poz 57

"rchlos rchlos + 1 "smer nhodne 360 "zber :nov) ] ] ] Zrume zlikvidovan asteroid. zruObjekt :l ] ] Ke sme po zniench objektoch upratali, meme zoznam vyprzdni urob "znien [] Nakoniec pohneme vetkmi korytnakami, ktor s stle v zoznamoch. preKad :strely [pohni] preKad :asteroidy [pohni] preKad :vbuchy [pohni] koniec Teraz ete spravme procedru tart (ak projekt obsahuje procedru s tmto menom, tak sa tto procedra automaticky spust po otvoren projektu), ktor sprav nejak vodn nastavenia a vytvor to ko oakvan proces: viem tart Nastavme farbu pozadia na iernu a zrume vetky objekty. nechFarbaPozadia 0 zruObjekt vetky Vyrobme si zoznamy, ktor potrebujeme a zatia ich nastavme na przdne. urob "asteroidy [] urob "strely [] urob "vbuchy[] urob "znien [] Urobme si nov raketu a asteroid. nov "raketa [] nov "asteroid [] Vyrobme proces, ktor kadch 20 miliseknd zavol procedru hlavn. Proces nazveme hlavn. (kadch 20 [hlavn] "hlavn) koniec Napeme tart a meme sa hra .

58

Dvadsiata tretia kapitola

Korytnaky a asomiera
Skr, ne sa zaneme venova hlavnej tme tejto kapitoly, spravme najskr jednu drobn zmenu konene vyuijeme sbor explos.wav. Otvorime triedu strela a na koniec procedry havria, ktor obhospodaruje zrku strely s asteroidom, pridme prkaz hrajZvuk "explos.wav Spsob to, e pri kadom zsahu sa vesmrnym vzduchoprzdnom ozve riadny rachot. Teraz sa meme zaa venova hlavnej tme tejto kapitoly a tou je asomiera a veci s ou svisiace. Toti je pekn, e meme vystrie a vetky asteroidy. Aj pochvli sa s tm meme. Ale ove a lepie, ne vystrie al som vetky asteroidy znie vystrie al som vetky asteroidy za mintu a dvadsa tyri seknd a uhral som nov rekord. Take teraz sa budeme venova tomu, aby Imagine odmeral as, ktor spotrebujeme na vystrie anie vetkch asteroidov, najlepie asy nejakm spsobom ukladal a pochvlil ns, ke nejak najlep as ete vylepme. Prv vec, ktor urobme je, e do plochy vlome text. Text sa vklad tlaidlom . Vlote ho niekde v avo hore, nastavte mu nejak rozumn ve kos (aspo 18), farbu psma zmete na erven a vyberte nejak pekn font (pod a monost nie Wingdings). Do textu preventvne nastavte hodnotu 0:00 a okraje rmika nastavte tak, aby sa do neho voli aj trocha dlhie asov daje. Ke s tm vetkm budete hotov, stlate tlaidlo Esc, a potom na text kliknite pravm tlaidlom myi, aby ste mohli zmeni niektor alie nastavenia. Najprv zmete samotn meno textu z text1 na hodiny. Potom zmete farbu pozadia na iernu, aby rmik splval s pozadm a nebolo ho vidie . Ke skonte, malo by to vyzera pribline takto: a ke zadte kontroln prkaz hodiny'nechHodnota "8:45 ukazovan as by sa mal zmeni . sa samotnho merania asu tka, Imagine pri tarte spust asomer, ktor meria as o od tartu v tiscinch sekundy. Jeho hodnotu si mete da vypsa prkazom p asomer. Hodnota asomeru sa d kedyko vek vynulova prkazom vynulujasomer. sa potom meria as od poslednho vynulovania. Spravme to teda tak, e pri tarte asomer vynulujeme a urobme si procedru, ktor nm pod a neho bude vedie sprvne nastavi text hodiny. A potom si zriadime proces, ktor tto procedru bude v pravidelnch intervaloch vola . Procedra na zobrazenie asu sa bude nazva ukas. Do procedry tart teda pridme riadky: vynulujasomer ( kadch 500 [ukas] "ukas ) A samotn procedra ukas bude vyzera takto (komentre do nej nepte): viem ukas urobTu "sekundy cPodiel asomer 1000 ;Zistili sme si, ko ko seknd uplynulo od vynulovania asomera urobTu "minty cPodiel :sekundy 60 ;Poet mint je poet seknd deleno 60. cPodiel vypota celosel ;podiel urobTu "sekundy zvyok :sekundy 60 ;Prebyton sekundy sme presunuli do mint. V premennej "sekundy si ;ulome, ko ko seknd uplynulo z danej minty 59

ak2 :sekundy < 10 [hodiny'nechHodnota (slovo :minty ":0 :sekundy)] [hodiny'nechHodnota (slovo :minty ": :sekundy)] ;Nastavme text hodiny. Ak je poet seknd jednocifern, za odde ujcu ;dvojbodku pridme ete nulu, take to bude psa napr 1:08 a nie 1:8. ;Prkaz slovo zlep zadan re azce dohromady. ak przdny? (veta :asteroidy :znien :vbuchy) [ zastav "hlavn zastav "ukas ] ;Procedra ukas bude poveren ete jednou lohou. Ak s zoznamy ;asteroidy, znien a vbuchy przdne, (a przdny je aj zoznam, ktor ;dostaneme ich zlepenm prkazom veta), zastavme procesy, ktor ;sp aj hlavn procedru aj nastavuj hodiny. Prv z nich u ;nepotrebujeme a druh treba zastavi , aby sme sa mohli pozrie , ;za ko ko sme to vlastne uhrali. koniec Teraz by vm hra mohla fungova aj s asomierou. Vyskajte si to a uite si to. V ase psania lekcie je rekord autora 1 minta a 21 seknd. V budcej kapitole si povieme, ako uchova najvyie skre a o tom, na o me by dobr, ke projekt obsahuje viacero strnok.

60

Dvadsiata tvrt kapitola

Korytnaka a strnky
V predolej kapitole sme zariadili, aby sa nmu hrovi odmeral as, poas ktorho zlikviduje vetky asteroidy. V tejto kapitole hru dovedieme takmer24 do dokonalosti hrovi ukeme, ako dopadol a ak uhral najlep as v danej hre, alebo dokonca najlep as v histrii, tak ho pochvlime. Najprv si spravme procedru na porovnanie dvoch asov. Na vstupe dostane dva asy (naprklad 9:31 a 3:47) a v prpade, e prv as je lep, vrti vsledok 1 a v prpade, e je hor, vsledok bude -1. (V uvedenom prpade to teda bude -1.) Procedra bude vyzera takto: viem porovnajas :a :b ak :a = :b [vy 0] ;Ak s vstupn asy rovnak, vsledok bude 0 urobTu "dvojbodkaA prvVskyt ": :a urobTu "dvojbodkaB prvVskyt ": :b ;Zistme, na akej pozcii sa v jednotlivch re azcoch nachdza dvojbodka urobTu "minutyA prvok (veta 1 :dvojbodkaA - 1) :a urobTu "minutyB prvok (veta 1 :dvojbodkaB - 1) :b ;Do mintovvh premennch ulome kus re azca pred dvojbodkou urobTu "sekundyA bezPozcie (veta 1 :dvojbodkaA) :a urobTu "sekundyB bezPozcie (veta 1 :dvojbodkaB) :b ;Do sekundovch premennch ulome kus re azca za dvojbodkou ak :minutyA > :minutyB [ vy -1 ] ak :minutyA < :minutyB [ vy 1 ] ;Pri porovnvan s rozhodujce minty ak :sekundyA > :sekundyB [ vy -1 ] ak :sekundyA < :sekundyB [ vy 1 ] ;Ak s minty rovnak, rozhodneme sa pod a seknd koniec Pristpme teraz k hlavnmu bodu programu tejto kapitoly. Vytvorme nov strnku. Toti na jednej strnke bude prebieha samotn hra, bud sa po nej preha asteroidy a bude vidie textov pole hodiny. Keby sme na tej istej strnke mali zobrazi dosiahnut skre, museli by sme najprv mnostvo objektov skry , potom ukza alie kvantum objektov ohlasujcich skre. Po zaat novej hry by sme museli poskrva zase tieto objekty a ukza pvodn. Bolo by to neikovn a nepreh adn. Preto to spravme tak, e si zriadime strnky dve. Na jednej sa bude hra , na druhej bude stle tabu ka s dosiahnutm skre a medzi tmito dvoma strnkami sa budeme prepna . Nov strnka sa vytvra tlaidlom . Na hornej lite sa objav jej ikonka (doteraz tam bola len jedna strnka, teraz tam bud dve). S jej pomocou sa mete na strnku kedyko vek prepn . Take sa na nov strnku prepnite a v prkazovom riadku nastavte farbu pozadia na iernu prkazom nechFarbaPozadia "ierna. Potom popridvajte 10 textovch pol a dve tlaidl tak, ako to vidte na obrzku na nasledujcej strane. Vyberte nejak pekn font a rozmiestnite ich tak, aby to dobre vyzeralo. Dbajte na to, aby boli nzvy jednotlivch textovch pol tak, ako je uveden v bublinch na obrzku, bude to dleit, ke sa budeme odvolva na ich hodnoty. Tlaidlm vo
24 iadny program nie je celkom dokonal. V kadom (a teda aj v tomto) s chyby. Ich vyhadanie a opravenie ale nechme na lskavho itatea :)

61

vzh ade zakrtnite vo bu ploch typ a ako nvod na kreslenie im napte nechFp "zelen text [Nov hra] a nechFp "oranov text [Koniec]. Mono ste si vimli, e medzi tmi textami chba text2. To je dan tm, e je umiestnen presne na tom istom mieste, ako text1, ale obsahuje npis Dosiahol si najlepie skre v tejto hre. Oba nadpisy bud normlne skryt (mete im v kolnke vzh ad rovno vypn nastavenie Vidno) a uku sa iba vtedy, ke to bude aktulne. daje, s ktormi budeme pracova , s uloen v textoch text7, text8, text9 a text10. asy s zatia nastaven na 10 mint (predpoklad sa, e za ten as to uhr kad) a meno fiktvneho rekordmana je zatia Jozef Rekordr. Je chyba, e jednotlivm textovm poliam boli ponechan nzvy, ktor im boli pridelen automaticky. Podobne ako je dobr dva vznamov nzvy premennm, pretoe to zvyuje itate nos programu, je dobr to robi aj s inmi objektami v Imaginovskom projekte. Ak si niekto trfa nepomli sa, nech si nzvy k udne zmen. Textov polia text9 a text10 v sebe nes informciu o tom, ak je najlepie skre v histrii a kto ho uhral. Tieto daje treba nejako uchovva aj v ase, ke je hra vypnut. Treba ich teda nejako uloi na disk. Budeme ich zapisova do sboru astehiscore.txt. Procedra uloSkre bude vyzera takto: viem uloSkre Strnka2'text10'nechUpravovanie "nie ;Ak bol ete text10 v reime upravovania, tak sa ten reim vypne ak Strnka2'text7'hodnota <> Strnka2'text9'hodnota [ukoni] ;Ak je posledn uhrat skre (text7) in ako rekord, tak aktulny rekord ;netreba uklada znovu, lebo sa budeme stara aby bol uloen hne po ;dosiahnut psanieDo "astehiscore.txt ;Tmto prkazom spsobme, e vetky vpisy (spsoben prkazmi p ;alebo zobraz skratka zo) sa nebud vypisova do okna, ale bud sa ;zapisova do sboru astehiscore.txt) zo Stranka2'text9'hodnota zo Stranka2'text10'hodnota ;Zapeme potrebn hodnoty do sboru psanieDo [] ;Vypneme psanie do sboru, aby sa tam nezapisovali in hlposti koniec Ke tto procedru vytvorte, skobne ju spustite z prkazovho riadku. (Predtm si nejako zariate, aby asy v poli text7 a text9 boli rovnak.) Ak sa po spusten tejto procedry pjdete pozrie do adresra, v ktorom mte uloen projekt, zistte, e vm v om pribudol sbor astehiscore.txt. Otvorte si ho (naprklad notepadom) a pozrite si jeho obsah. 62

Okrem tejto procedry budeme potrebova aliu, ktor zavolme pri spusten projektu a ktor nm daje zo sboru zase preta. T me vyzera naprklad takto: viem tajSkre ak nieJe sbor? "astehiscore.txt [ Strnka2'text9'nechHodnota "|10:00| Strnka2'text10'nechHodnota "|Jozef Rekordr| ukoni ] ;Najprv si skontrolujeme, i sbor astehiscore.txt vbec existuje. Ak ete ;neexistuje (lebo sme ete hodnoty nezapisovali) textov polia text9 a ;text10 sa nastavia na preddefinovan hodnoty. tanieZ "astehiscore.txt ;Nastavme, e prkaz tajSlovo nebude ta z prkazovho riadku, ale zo ;sboru astehiscore.txt Strnka2'text9'nechHodnota tajSlovo Strnka2'text10'nechHodnota tajSlovo ;Hodnoty textovch pol nastavme pod a toho, ako sme sa dotali ;v sbore. musme v rovnakom porad, v akom sme zapisovali, inak ta ;by sa do po a text9 dostalo nejak meno a do po a text10 nejak as. tanieZ [] ;Znovu prepneme tanie na prkazov riadok. koniec Dobre. Procedry na zpis a tanie z disku sme zvldli. Teraz spravme jednu viu procedru, ktor nm uprav strnku .2 po tom, ako hr dohr partiu. Budeme v nej hojne vyuva procedru porovnajas, ktor sme si spravili na zaiatku kapitoly. viem skre Strnka2 ;Prepneme sa na strnku 2 ak2 (porovnajas Strnka1'hodiny'hodnota Strnka2'text9'hodnota) = 1 [ Strnka2'text1'ukMa Strnka2'text2'skryMa Strnka2'text7'nechHodnota Strnka1'hodiny'hodnota Strnka2'text8'nechHodnota Strnka1'hodiny'hodnota Strnka2'text9'nechHodnota Strnka1'hodiny'hodnota Strnka2'text10'nechHodnota "| | Strnka2'text10'nechUpravovanie "ano ] ;Ak je dosiahnut as lep, ne doteraj rekord, ukeme pochvalu ;nastavme as na hodinch do pol text7, text8 a text9 (dosiahnut as, ;dnen a absoltny rekord), vymaeme starho rekordmana a pole ;nastavme na upravovanie, nech sa tam me dopsa nov. [ ak2 (porovnajas Strnka1'hodiny'hodnota Strnka2'text8'hodnota) = 1 [ 63

text1, text10

Strnka2'text1'skryMa Strnka2'text2'ukMa Strnka2'text7'nechHodnota Strnka1'hodiny'hodnota Strnka2'text8'nechHodnota Strnka1'hodiny'hodnota ] ;Ak sme prekonali dnen rekord, skryje sa pochvala .1, uke sa ;pochvala .2 a stav hodn sa prepe do pol text7 a text8. [ Strnka2'text1'skryMa Strnka2'text2'skryMa Strnka2'text7'nechHodnota Strnka1'hodiny'hodnota ] ;Ak sme ni neprekonali, skryj sa pochvaly a stav hodn sa prepe do ;po a text7. ] koniec

Teraz treba upravi procedru ukas, aby v prpade, e je hra dohran zavolala procedru skre. Dajte si pozor, aby ste volanie procedry umiestnili ete pred prkaz zastav "ukas, pretoe ke sa tento prkaz vykon, zastav sa aj beh procedry ukas a skre sa u neuprav. alia zmena sa bude tka procedry tart. Musme zabezpei dve veci. Jednak to, e sa hra zane na strnke .1. Ak by sme toti spustili procedru tart na druhej strnke, asteroidy by sa nm potulovali pomedzi nadpisy a vyzeralo by to netlovo. Spravme to tak, e cel procedru tart spustme ako proces hlavnho okna (o tom je to hlavnOkno'odtartuj) a na zaiatku procesu prepneme hlavn okno na strnku 1: viem tart hlavnOkno'odtartuj [ Strnka1 .... ] koniec Miesto tch bodiek tam samozrejme bude cel pvodn procedra tart. Druh vec, ktor sa v procedre tart mus udia , je nastavenie skre na strnke .2. Take pred spustenie procesu hlavnej procedry pridajte tieto dva riadky: tajSkre Strnka2'text8'nechHodnota "|10:00| Procedra tajSkre preta z disku najlepie historick skre. Druh prkaz nastav dnen najlepie skre na tandardnch desa mint. Posledn vec, ktor musme spravi , je obsluha tlaidiel t1 a t2. Najprv sa budeme zaobera tlaidlom t2 Nov hra. Vytvorme mu procedru (skromn pre to tlaidlo) novHra, ktor budeme vola pri zapnut (v zkladnch nastaveniach tlaidla teda do kolnky priZapnut napete novHra). Procedra novHra sa od procedry tart li len v detailoch (nepotrebuje natava najlepie skre, zato sa mus postara o to, aby bolo nov najlepie skre uloen) take vm ju predkladme bez komentrov: 64

viem novHra hlavnOkno'odtartuj [ uloSkre Strnka1 bezPV nechFarbaPozadia 0 zruObjekt vetky urob "asteroidy [] urob "strely [] urob "vbuchy [] urob "znien [] nov "raketa [] nov "asteroid [] (kadch 20 [hlavn] "hlavn) vynulujasomer (kadch 500 [ukas] "ukas) ] koniec Tlaidlo t1 m na starosti iba uloenie novho skre a zavretie Imaginu, take mu do kolnky priZapnut napte iba uloSkre bye (prkaz bye zavrie Imagine). Hra je hotov, prjemn zbavu. Mimochodom autorov rekord v ase psania tchto riadkov je 1:17.

65

Dvadsiata piata kapitola

Korytnaka a kalkulaka
Kedysi dvno v deviatej kapitole sme hovorili o tom, e korytnaka je mdra a inteligentn a vie celkom dobre pota . Ale naui star mamu programova v Imagine len preto, aby si mohla spota , i ju pri nkupe neomekli, me by celkom problm. Urite by jej ove a viac prospela ben kalkulaka. Budeme ignorova fakt, e kad slunej systm (MS Windows nevynmajc) obsahuje kalkulaku ako tandardn sas a sksime nejak kalkulaku naprogramova . Take: najprv si vyrobme papier a na ten vyrobme a poukladme tlaidl a textov pole tak, ako to vidme na obrzku. Papier sa bude vola papier1, tlaidl pomenujeme pod a toho, o je na nich napsan, take ich men bud 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, bodka, c, ce, delno, krat, m+, mc, minus, mr, ms, plus, plusminus a rovnasa. Textov pole nazveme originlne displej. Vpravo na displeji pridme ete jedno textov pole (ktor na naom obrzku nie je vidno), vlome do neho jedin psmenko M, nazveme ho memory a v kolnke vzh ad, mu vypneme monos vidno. (no, to je presne ten dvod, kvli ktormu ho na naom obrzku nevidno.) Budeme ho zviditeova a znevidite ova pod a toho, i prve mme nieo uloen v pamti. Okrem tlaidiel a displeja (ktorho hodnota nm bude sli ako jedna z premennch) si potrebujeme zriadi ete nejak alie premenn. Mete si ich vyrobi z prkazovho riadku prkazom urob alebo priamo v okne pam . Prv z nich bude starecislo. Bude dobr na nasledujcu vec: Ke na kalkulake rtame naprklad 2 + 3, tak najprv musme zada dvojku, potom operciu, ktor chceme urobi a potom trojku. Ke to dozadvame, trojka je stle na displeji, t dvojka je ale u zmazan. Aby sme ale mohli set vyrta , musme si ju niekde pamta . A na to budeme pouva prve premenn starecislo. A samozrejme, musme si pamta aj zvolen operciu a na to budeme ma premenn operacia. Na zaiatku v nej bude hodnota nic. alia premenn sa bude vola hotovecislo a bude obsahova bu no alebo nie. V tejto premennej si budeme pamta , i je slo na displeji hotov, alebo ete nie. Rozdiel je toti v tom, e ak zadme kalkulake 2 + 3 = a na displeji sa objav 5, tak tto p ka je hotov. Ak teraz stlame tlaidlo 1, tak p ka zmizne a objav sa jednika, ktor bude patri k aliemu vpotu. Ak ale vpoet zaneme tm, e stlame tlaidlo 5, tto p ka hotov nie je. Ak po nej stlame tlaidlo 1, na displeji bude 51. No a posledn premenn, ktor budeme pouva , je premenn pamat. Budeme do nej uklada to, o bude ma kalkulaka v pamti. Tlaidl mme, premenn mme, teraz ete treba urobi nejak procedry, aby to cel fungovalo. Zaneme procedrou ciselko, ktor sa bude vola , ke niekto stla nejak slicu: viem ciselko :a ak :hotovecislo [ urob "hotovecislo "nie displej'nechHodnota :a ukonci 66

] ;Ak bolo slo na displeji hotov, tak ho zrume a miesto neho tam dme ;nov slicu a pozname si, e slo hotov nie je. ak zaroven (displej'Hodnota = 0) (nieJe prvok? ". displej'Hodnota) [ urob "hotovecislo "nie displej'nechHodnota :a ukonci ] ;Ak je na displeji 0 a nebola spusten desatinn iarka, tak obsah displeja ;prepeme novou cifrou (aby sa nedali vyrobi pakvily typu 007) displej'nechHodnota (slovo displej'Hodnota :a) ;V ostatnch prpadoch pripojme (s pomocou prkazu slovo) slicu ;na koniec displeja. koniec Jednotlivm tlaidlm s slicami ete nastavme, aby pri stlaen procedru ciselko zavolali. Teda naprklad na tlaidle 1 bude v kolnke priZapnut prkaz ciselko 1. aliu procedru, ktor bude obhospodarova stlaenie desatinnej iarky, nazveme rafinovane bodka. Bude vyzera takto: viem bodka ak :hotovecislo [ displej'nechHodnota "0. urob "hotovecislo "nie ukonci ] ;Ak je na displeji hotov slo, zrume ho a dme tam 0. ak prvok? ". displej'hodnota [ukonci] ;Ak u tam desatinn iarka je, nerobme ni. displej'nechHodnota (slovo displej'hodnota ".) ;V ostatnch prpadoch na koniec pripojme bodku. koniec Hlavnou procedrou, ktor sa bude stara o vpoty, bude procedra vyhodnot. Bude ma na starosti pozrie , o je v starom sle, ak opercia bola zvolen a spravi patrin operciu. Vsledok hod aj na displej, aj do premennej starecislo. Bude vyzera takto: viem vyhodnot ak2 :operacia = "nic [ urob "starecislo displej'hodnota ] ;Ak nie je iadna opercia, tak sa toho moc nedeje [ akje :operacia [ plus [ urob "starecislo :starecislo + displej'hodnota ] minus [ urob "starecislo :starecislo - displej'hodnota ] krat [ urob "starecislo :starecislo * displej'hodnota ] deleno [ urob "starecislo :starecislo / displej'hodnota ] 67

] ;Ak je opercia uren, pod a nej sa prevedie patrin vpoet ] displej'nechHodnota :starecislo urob "hotovecislo "ano ;Vsledok hodme na displej a ozname ho ako hotov koniec Meme rovno poveda , o sa m sta pri stlaen =. Musme zavola vyhodnotenie a sasne nastavi , e momentlne iadnu operciu nerobme. Do kolnky priZapnut je teda treba dopsa vyhodnot urob "operacia "nic Z procedr nm chba spravi u len najjednoduchiu procedru operacia. Ak stlate nejak operciu, treba vyhodnoti to, o bolo predtm a operciu si zapamta . Take naa procedra bude vyzera takto: viem operacia :aka vyhodnot urob "operacia :aka koniec Teraz treba na tlaidlo plus zavesi prkaz operacia "plus, na tlaidlo minus prkaz operacia "minus, na tlaidlo krat prkaz operacia "krat a na tlaidlo deleno prkaz operacia "deleno. Teraz nm ostva u len sfunkni ostatn tlaidl. To pjde celkom jednoducho. Na tlaidlo plusminus zavesme prkaz displej'nechHodnota -1 * displej'hodnota (ke nieo vynsobme mnus jednotkou, zmenme tomu znamienko). Na tlaidlo ce zavesme prkaz displej'nechHodnota 0 Na tlaidlo c zavesme prkaz displej'nechHodnota 0 urob "starecislo 0 urob "operacia "nic (Musme vynulova plne vetko. Aj star slo a operciu.) Na tlaidlo ms zavesme prkaz urob "pamat displej'hodnota memory'nechVidno ( :pamat <> 0 ) (Do pamte vlome hodnotu displeja. Ak je to, o je v pamti, nenulov, rozsvieti sa M. Ak je to nula, M zhasne.) Na tlaidlo m+ zavesme prkaz urob "pamat : pamat + displej'hodnota memory'nechVidno ( :pamat <> 0 ) (To, o je na displeji, pripotame k pamti. Zas pod a toho, o je v pamti, rozsvietime, alebo zhasneme M.) Na tlaidlo mr zavesme prkaz displej'nechHodnota :pamat urob "hotovecislo "ano (To, o je v pamti, hodme na displej a zapamtme si, e je to hotov.) Na tlaidlo mc zavesme prkaz urob "pamat 0 memory'nechVidno "nie (Vynulujeme pam a zhasneme M) No a to je vetko. Mete kalkulakova , ko ko len chcete.

68

You might also like