12 Kilpkonnagraafika
Seni oleme saanud programmide töö tulemused tekstilisel kujul ekraanile väljastatuna, samuti oleme sisendi andnud tekstilisel kujul. Reaalselt kasutavad paljud programmid hoopis graafilist kasutajaliidest, milleni jõuame hilisemates peatükkides. Praegu vaatleme Pythoni moodulit turtle
(tõlkes “kilpkonn”), mille abil saab ekraanile kujundeid joonistada. Joonistamiseks liigub tegelane (kilpkonn) oma virtuaalmaailmas ringi ning jätab liikudes maha jälje. See jälg võib teinekord päris huvitava ja isegi kunstilise kujuga olla.
Ajalugu
Virtuaalne kilpkonn ilmus esmakordselt hariduslikus programmeerimiskeeles LOGO, mille lõid aastal 1967 Wally Feurzeig ja Seymour Papert. See keel oli mõeldud just lastele algoritmilise mõtlemise õpetamiseks. Praeguseks on kilpkonnagraafikat võimalik kasutada mitmetes programmeerimiskeeltes, ka Pythonis. Viimasel ajal eriti populaarses hariduslikus programmeerimiskeeles Scratch on samuti tuntavaid kilpkonnagraafika mõjutusi. LOGO programmeerimist võib proovida siin. Võib-olla on huvitav teada, et üks esimesi interneti kaudu toimunud kursusi (aastal 1996, tol ajal e-posti kaudu) Eestis oli just programmeerimiskeele Logo kursus.
Alustamine ja liikumine
Järgnevalt uurime, kuidas kilpkonna Pythonis kasutama hakata, ning vaatame, kuidas kujundeid joonistada. Kokkuleppeliselt nimetatakse kilpkonnaks väikest kolmnurka joonistamisväljal.
Selleks, et joonistamisega alustada, tuleb esmalt importida vajalikud käsud kilpkonna moodulist. Selleks kirjutame programmi esimesele reale:
from turtle import *
Järgnevalt proovime kirjutada programmi, mille abil joonistataks ruut. Selleks kasutame sobivaid kilpkonnakäske:
forward(n)
– liigu edasi (ingl forward) n sammu võrra (ühe sammu pikkus on 1 piksel ehk üks täpike ekraanil);back(n)
– liigu tagasi (ingl back) n sammu võrra;
– pööra vasakule (ingl left) d kraadi;left(d)
– pööra paremale (ingl right) d kraadi.right(d)
Eelnevaid käske sobivas järjekorras rakendades saame järgneva programmi:
Näiteprogramm. Ruut
from turtle import * # * lisamisel imporditakse kõik kilpkonna käsud forward(100) # Kilpkonn liigub edasi 100 pikslit left(90) # Kilpkonn pöörab 90° vasakule forward(100) # Kordame eelnevaid käske, sest ruudul on neli külge left(90) forward(100) left(90) forward(100) exitonclick() # Saame akna sulgeda hiireklõpsuga
(NB! Ära pane oma Pythoni programmi nimeks turtle.py. See ajab Pythoni segadusse, sest moodulil on täpselt sama nimi.)
Programmi tulemuseks saame
Tegelikult võib kilpkonn järjekindlalt pöörata ka 90° paremale, tulemuseks on ikka ruut.
Näiteprogrammis märkame, et kilpkonn peab täitma korduvalt samu käske: minema 100 pikslit edasi ja pöörama seejärel 90° vasakule. Seega on siin tegemist tsüklilise tegevusega. Tsüklitest räägime edasistes osades.
Selleks, et vähendada kirjutamisvaeva, saab kilpkonna liikuma panna ka lühemate käskudega, kasutades pikemate esituste esimesi ja viimaseid tähti.
– võrdne käsugafd(n)
forward(n)
;
– võrdne käsugabk(n)
;back(n)
– võrdne käsugalt(d)
;left(d)
– võrdne käsugart(d)
.right(d)
Robot-kilpkonn oskab teha veel palju muudki. Täpsemalt võib vaadata Pythoni dokumentatsioonist.
Värvimine
Kilpkonn oskab joonistatud kujundeid värvida ja muuta taustavärvi. Selleks, et värvima hakata, tuleb esmalt valida sobiv värv. Seda saab teha käsuga
, kus värv antakse sõnena, mille väärtuseks on värvi ingliskeelne vaste või värvi kuueteistkümnendkoodis esitus. Näiteks musta värvi esitus kuueteistkümnendkoodis on #000000. Värvikoode saab vaadata siit.color(värvi_nimetus)
Näiteks
color("red") # Kilpkonn muutub punaseks
või
color("#008000") # Kilpkonn muutub tumeroheliseks
Kui värv on valitud, siis tuleb kilpkonnale käsuga
teada anda, et nüüd tuleb värvimist alustada. Seda peab tegema vahetult enne kujundi joonistamist, mida värvida soovime. Värvimise lõpetamiseks tuleb peale kujundi lõppu kirjutada käsk begin_fill()
.end_fill()
Järgmiseks kirjutame programmi, mis joonistab punase ringi. Kilpkonn oskab joonistada ringi (ingl circle) käsuga
, kus r on ringi raadius pikslites.circle(r)
Näiteprogramm. Jaapani lipp
from turtle import * color("red") # Kilpkonn muutub punaseks begin_fill() # Kilpkonn alustab ringi värvimist circle(100) # Kilpkonn joonistab ringi raadiusega 100 pikslit end_fill() # Kilpkonn lõpetab ringi värvimise exitonclick()
Kui eelmise programmi puhul oli täpselt teada, mis toimub, siis täiendame seda programmi juhuslikkusega. Selles programmis imporditakse käske lausa kahest moodulist:
Näiteprogramm. Sinine, must või valge
from turtle import * from random import randint värv = randint(1, 3) if värv == 1: color("blue") # Sinine if värv == 2: color("black") # Must if värv == 3: color("white") # Valge valgel taustal begin_fill() # Kilpkonn alustab ringi värvimist circle(100) # Kilpkonn joonistab ringi raadiusega 100 pikslit end_fill() # Kilpkonn lõpetab ringi värvimise exitonclick()
Praegu tõime kilpkonna mängu selleks, et edasisi natuke keerulisemaid teemasid paremini illustreerida. Kohtume temaga ka edaspidi.
Videomaterjal
Vaata ka kilpkonna kasutamise kohta käivat kokkuvõtvat videot.