You are on page 1of 6

Interaktívne programovanie a vizuálne modelovanie – Imagine prednáška 02 Ivan Kalaš

Prednáška 02
Interaktívne programovanie a vizuálne modelovanie – Imagine

Na minulej úvodné poznámky a informácie


prednáške: základné korytnačie príkazy na pohyb a otáčanie
niektoré nastavenia (atribúty), o nastavovaní farieb
pomôcky
náhodné vstupy pomocou "slova" any
vlastné procedúry (príkazy); parametre
vypĺňanie pomocou príkazu fill
globálne premenné

forward; fd clearScreen; cs random repeat


back; bk setPenColour; setPc make edit; ed
right; rt setPenWidth; setPw to … end
left; lt setFillColour; setFc any
pu; pd fill

Doplňujúce
poznámky:

Pomôcky Zvyčajne ich (pre detského používateľa) otvára chyba alebo


predčasné stlačenie Enter...
Ak ich chceme úmyselne používať ako pomôcky na
špecifikáciu vstupov (napr. pre farbu, písmo, hrúbku, noty... ),
napíšeme v príkazovom riadku alebo pri definovaní príkazu
meno logovského príkazu a stačíme F9.

Globálne premenné Môžu mať napr. číselnú hodnotu, hodnotou však môže byť aj
obrázok – napr. zo súboru:
? make "potvorka loadImage "bug3
do premennej potvorka načíta obsah súboru bug3.LGF
Tvar korytnačky (budeme skúmať neskôr podrobnejšie)
? setShape :potvorka
premennej
? setShape "bug3
? setShape [] štandardný tvar (korytnačka)

Relatívny a absolútny rámec Korytnačia geometria – relatívny rámec, akoby sedím na


korytnačke, riadim ju dopredu, vpravo, vľavo ... a
nepotrebujem vedieť, kde je "sever".

Naproti tomu – karteziánska súradnicová sústava, pozície,


uhly. Smer 0 je "sever". Príkazy
setPos pozícia
setHeading smer ; setH smer

O konštantách čo je konštanta? Príklady


? show 2 + 3 ; nie je konštanta
5 ; prebehol výpočet
? sh 20
20
? sh "Jano
Jano
? sh [1 2 3 4]
[1 2 3 4]
? sh [a b c d]
[a b c d]
? sh [fd 100]
Interaktívne programovanie a vizuálne modelovanie – Imagine prednáška 02 Ivan Kalaš

[fd 100]
? make "A 100
? sh :A
100
? sh [:A :A]
[:A :A]
? sh [:A :A "A]
[:A :A "A]
? sh "any ; toto sa postupne objasní
any
? sh any
any

1 Príkaz polygon
polygon návod-na-kreslenie

Korytnačka nakreslí vo svojom mieste vyplnený polygón pomocou vstupného návodu na kreslenie. Obrys polygónu sa
nakreslí momentálnou farbou pera a hrúbkou pera korytnačky a je vyplnený momentálnou farbou výplne.

(Ak obrys polygónu nie je uzavretý (t.j. ak posledný bod nie je identický s prvým), Imagine ho uzatvorí pridaním jednej koncovej čiary. Preto polygon
[repeat 2 [fd 100 rt 120]] nakreslí to isté ako polygon [repeat 3 [fd 100 rt 120]].)

Príklady:
? setFc "darkBlue
? polygon [repeat 3 [fd 100 rt 120]]
Nastavenia farieb (a ďalšie veci) môžeme urobiť aj na začiatku
návodu na kreslenie, pozri nižšie.
Alebo pekný vyplnený štvorec – bez použitia príkazu fill:
? polygon [setPw 3 setPc any setFc any repeat 4
[fd 50 rt 90]]

to plnyStvorec :velkost
polygon [setPc any
setFc any
repeat 4 [fd :velkost rt 90]]
end

? cs repeat 10 [plnyStvorec 30 fd 30 lt 36]


? cs repeat 10 [plnyStvorec 60 fd 30 lt 36]
? cs repeat 10 [plnyStvorec 30 fd 40 lt 36]
? cs repeat 10 [plnyStvorec 10 + random 50 fd 30
lt 36]
porovnaj!
? cs repeat 10 [plnyStvorec any fd 30 lt 36]

to plnyStvorec :velkost
if :velkost = "any [make "velkost 5 + random 50]
polygon [setPc any
setFc any
repeat 4 [fd :velkost rt 90]]
end

? cs repeat 10 [plnyStvorec any fd 30 lt 36]


Interaktívne programovanie a vizuálne modelovanie – Imagine prednáška 02 Ivan Kalaš

Podmienka s jednou a dvoma


v Imagine Logo ich musíme dôsledne rozlišovať (pretože už neexistuje
alternatívami
obmedzenie na dlhé riadky)
if <podmienka> [príkaz príkaz … ]
ifElse <podmienka> [príkaz … ] [príkaz … ]

pokus:
vypnem pero a urobím takýto nekonečný rekurzívny
vlastný príkaz:
skoč na ľubovoľnú pozíciu a nakresli ľubovoľne veľký vyplnený štvorec
to skac
setPos any
vyplnenyStvorec any
skac
end
teraz do príkazu skac pridajme takúto podmienku:
vyplneny štvorec nakresli iba vtedy, ak si od stredu strany vzdialeny
aspon 100 krokov
to skac
setPos any
if abs pos > 100 [vyplnenyStvorec any]
skac
end
operácia pos vrátila pozíciu [X Y], čiže vlastne vektor
z počiatku do tohto bodu. Preto abs pos je veľkosť tohto vektora,
a teda vzdialenosť od počiatku.
Príkaz polygon vždy vyplní vnútro polygónu. Pre zložitejšie polygóny sa ich
"vnútorná oblasť" dá len ťažko predpovedať. Napríklad:
? polygon [setFC "purple repeat 24 [fd 200 rt 165]]

Nezabudni:
v návode na kreslenie v príkaze polygon sa dá používať všeličo (pozri Help),
nastavenia farby, hrúbky a farby výplne – ak ich zadáme vnútri príkazu polygon – sú len
dočasné a akceptujú sa iba na začiatku návodu
pozri niekoľko pekných príkladov

to pokus1 to pokus2 :a :b
polygon polygon
[setPw 3 [setPw 3
setPc any setPc any
setFc any setFc any
repeat 4 [fd 20 lt 90 repeat 4
repeat 90 [fd 1 rt 4] [repeat 2 [fd :a rt 90 fd :b rt 90]]
rt 90 bk 20 rt 90]] lt 90]
end end
Interaktívne programovanie a vizuálne modelovanie – Imagine prednáška 02 Ivan Kalaš

to pokus3
pu
setPw 3
repeat 5 [setPc any
setFc any
polygon [repeat 90 [fd 2 rt 4]]
fd 30
lt 72]
end

Zaujímavá a užitočná úloha:


Definujte príkaz, ktorý dostane tri vstupy: šírku, výšku a farbu. Korytnačka na svojom mieste nakreslí obdĺžnik
danej farby (aj obrysov, aj výplne) a daných rozmerov. Takýto príkaz môžeme použiť napr. na zmazanie určitej
oblasti.

2 Náhodné prechádzky, If a IfElse


to nahodnaP to potulkaKvet
rt any rt any
fd 5 fd 5
if abs pos > 100 [bk 5] ifElse abs pos < 50
nahodnaP [setPc "yellow]
end [setPc "red]
if abs pos > 90 [bk 5]
potulkaKvet
end
Skúste:
to nahodnaP
rt any
fd 5
if abs pos > 159 [bk 5]
setPc div abs pos 10
nahodnaP
end

3 Vývoj jednoduchých projektov (prevažne) priamymi manipuláciami


Čo tu uvidíme: projekt Album fotografií; zmena tvaru
korytnačky
dialógové okno ZmeňMa korytnačky,
prehliadka základných nastavení
nastavenie X => existuje operácia X, a tiež príkaz setX, napr.
pc => operácia pc, príkaz setPc
stránka, papier, zruš korytnačku, vytvor
korytnačku
projekt Loptička na papieri
oblasť rangeStyle – wrap; window; bounce
proces na posúvanie guličky; proces s
menom
tlačidlo, posúvač, textBox
udalosti
Projekt Album
Interaktívne programovanie a vizuálne modelovanie – Imagine prednáška 02 Ivan Kalaš

pravý klik na korytnačku t1, automatické ťahanie


autoDrag
skús ťahať, potom ešte raz – vypni jej pero
kópia tejto korytnačky (Skopíruj do schránky;
Prilep zo schránky.) – bude sa volať t2 (o
automatickom generovaní mien objektov)
pravý klik na t2, Tvar..., zvolím fotografiu,
záložka Tvar – Zväčšenie 0.2
pre t2 definujem udalosť onClick –
t1′setShape shape
čo znamená zápis s apostrofom
pridaj do pozadia obrázok „album“, alebo ho
nakresli pomocou panelu na kreslenie
urob niekoľko kópií korytnačky t2 a zmeň im
fotografie

Prehliadka dialógu ZmeňMa


Záložky

Keď neviem alebo nemôžem na korytnačku pravokliknúť:


? t1′changeMe

o poznámke (hint)
Udalosť priKliknutí – onClick

Udalosti, premenné, procedúry

Projekt Loptička na papieri (1. časť)


Nový projekt, zruš korytnačku t1
vytvor na ploche papier, v ňom korytnačku
zmeň jej tvar na lopta.lgf
? repeat 360 [fd 3 rt 1 wait 10]
zmeň jej Oblasť na S odrazom
? repeat 10000 [fd 3 rt 1 wait 10] – je fajn, ale nemôžem ďalej nič robiť.
Zastav tento dlhý proces bežiaci v príkazovom riadku a rozbehni celkom iný proces:
? every 20 [fd 3 rt 1] – nezávislý proces, môžem ďalej pracovať v
command line. Metafóra motorček. Meň hrúbku, farbu…
Pridaj tlačidlo – definuj jeho správanie priZapnutí – onPush ako p1′clean
pridaj ďalší proces – every 1000 [setPc any] a ešte jeden every 2000
[setPw any]. Je krajšie uvádzať, “komu” proces patrí – keďže budeme mať veľa korytnačiek. Preto
? t1′every 1000 ...
Do stránky pridajme kopírovaním druhú korytnačku – t2. Spustime pre ňu proces
? t2′every 30 [setPos t1′pos]
Ak chcem zmeniť iba jeden proces, musím zastaviť všetky. Riešenie – dávať
procesom mená
? (t2′every 30 [setPos t1′pos] ″copy)
? cancel ″copy
iná možnosť (t2'every 20 [setPos t1'pos/2] "copy)
iná možnosť (t2'every 20 [setPos rotate 45 t1'pos/2] "copy)
Interaktívne programovanie a vizuálne modelovanie – Imagine prednáška 02 Ivan Kalaš

Pridajme vodorovný posúvač na regulovanie rýchlosti


t1.
? (t1'every 20 [fd s1'value rt 1] "go)

alebo
? (t1'every 20 [fd s1 rt 1] "go)
toto je dôsledok operácie defaultAction pre posúvače
to defaultAction
op value
end

Rozšírenie: pomocou Copy a Paste vytvorte druhý


posúvač a riaďte ním uhol zahýbania pre t1.

You might also like