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;
  • left(d) – pööra vasakule (ingl left) d kraadi;
  • right(d) – pööra paremale (ingl right) d kraadi.

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.

  • fd(n) – võrdne käsuga forward(n);
  • bk(n) – võrdne käsuga back(n);
  • lt(d) – võrdne käsuga left(d);
  • rt(d) – võrdne käsuga 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 color(värvi_nimetus), 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.

Näiteks

color("red")                       # Kilpkonn muutub punaseks

või

color("#008000")                   # Kilpkonn muutub tumeroheliseks

Kui värv on valitud, siis tuleb kilpkonnale käsuga begin_fill() 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 end_fill().

Järgmiseks kirjutame programmi, mis joonistab punase ringi. Kilpkonn oskab joonistada ringi (ingl circle) käsuga circle(r), kus r on ringi raadius pikslites.

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.

Litsents

Icon for the Creative Commons Attribution 4.0 International License

Programmeerimine on loodud Eno Tõnisson, Tauno Palts, Merilin Säde, Kaarel Tõnisson jt poolt Creative Commons Attribution 4.0 International License litsentsi alusel, kui pole teisiti märgitud.

Jaga seda raamatut