0%

🐢 Turtle grafika

Turtle ir Python iebūvēta grafiska bibliotēka, kas vizualizē programmēšanu — "bruņurupucis" pa ekrānu atstāj zīmtu trasi. Lieliski piemērota geometrijas un rekursijas apgūšanai.

python

Pamata kustības

Teksts
import turtle

# Ekrāna iestatīšana
ekrāns = turtle.Screen()
ekrāns.title("Turtle pamati")
ekrāns.bgcolor("white")
ekrāns.setup(width=600, height=500)

# Bruņurupuča izveide
t = turtle.Turtle()
t.shape("turtle")    # arrow, turtle, circle, square, triangle, classic
t.color("darkgreen")
t.speed(3)           # 0=ātrākais, 1=lēns, 10=ātrs, 0=tūlītējs

# Pamatkomandas
t.forward(100)       # ff vai t.fd(100)  – virzīties uz priekšu (pikseļi)
t.right(90)          # rt(90)  – pagriezties pa labi
t.forward(100)
t.left(90)           # lt(90)  – pa kreisi
t.backward(50)       # bk(50)  – atpakaļ

# Koordinātes
t.goto(0, 0)         # Pārvietoties uz punktu (x, y)
t.setx(50)           # Mainīt tikai x
t.sety(-30)          # Mainīt tikai y

# Spalvas vadība
t.penup()            # pu() – pacelts, nekrāso
t.goto(200, 100)
t.pendown()          # pd() – nolaists, krāso
t.forward(80)

# Info
print(t.pos())       # Pašreizējā pozīcija
print(t.heading())   # Pašreizējais virziens (grādi)

turtle.done()        # Gaida, kamēr aizver logu

Krāsas un aizpildīšana

Teksts
import turtle

t = turtle.Turtle()
t.speed(0)   # Maksimālais ātrums

# Krāsas
t.pencolor("blue")            # Tikai līnija
t.fillcolor("yellow")         # Tikai aizpildījums
t.color("red", "orange")      # Abi uzreiz: (līnija, aizpildījums)

# Līnijas biezums
t.pensize(3)   # vai t.width(3)

# Daudzstūra aizpildīšana
t.begin_fill()
for _ in range(6):
    t.forward(80)
    t.right(60)
t.end_fill()

# Krāsu dažādošana ar ciklu
t.penup()
t.goto(-200, 0)
t.pendown()

krāsas = ["red", "orange", "yellow", "green", "blue", "purple"]
for i, krāsa in enumerate(krāsas):
    t.color(krāsa)
    t.begin_fill()
    for _ in range(4):
        t.forward(40)
        t.right(90)
    t.end_fill()
    t.penup()
    t.forward(50)
    t.pendown()

turtle.done()

Ģeometriskās formas

Teksts
import turtle

t = turtle.Turtle()
t.speed(0)

# Kvadrāts
def kvadrāts(garums, krāsa):
    t.color(krāsa, krāsa + "1")   # Piezīme: ne visos gadījumos strādā
    t.begin_fill()
    for _ in range(4):
        t.forward(garums)
        t.right(90)
    t.end_fill()

# Aplis
def aplis(rādiuss, krāsa):
    t.color(krāsa)
    t.begin_fill()
    t.circle(rādiuss)
    t.end_fill()

# Trīsstūris
def trijstūris(garums):
    t.begin_fill()
    for _ in range(3):
        t.forward(garums)
        t.left(120)
    t.end_fill()

# Piecstūris ar aprēķinātu leņķi
def daudzstūris(malas, garums):
    leņķis = 360 / malas
    t.begin_fill()
    for _ in range(malas):
        t.forward(garums)
        t.right(leņķis)
    t.end_fill()

# Spirāle
t.color("purple")
for i in range(50):
    t.forward(i * 3)
    t.right(91)   # 91 grāds = spirāle (ne 90!)

turtle.done()

Rekursija – Koka zars un Koch sniegs

Teksts
import turtle

t = turtle.Turtle()
t.speed(0)
t.color("brown")

# Rekursīvs koks
def koks(garums, dziļums):
    if dziļums == 0:
        return
    # Krāsa atkarībā no dziļuma
    if dziļums <= 2:
        t.color("green")
    else:
        t.color("brown")

    t.forward(garums)

    t.left(30)
    koks(garums * 0.7, dziļums - 1)   # Kreisais zars

    t.right(60)
    koks(garums * 0.7, dziļums - 1)   # Labais zars

    t.left(30)
    t.backward(garums)   # Atpakaļ uz sākumu

t.left(90)   # Virzīt uz augšu
t.penup(); t.goto(0, -150); t.pendown()
koks(80, 7)

# --- Koch sniegpārsla ---
def koch(garums, kārtība):
    if kārtība == 0:
        t.forward(garums)
        return
    for leņķis in [60, -120, 60, 0]:
        koch(garums / 3, kārtība - 1)
        t.left(leņķis)

def sniegpārsla(garums, kārtība):
    t.penup(); t.goto(-garums/2, garums/3); t.pendown()
    t.color("blue")
    for _ in range(3):
        koch(garums, kārtība)
        t.right(120)

# sniegpārsla(300, 4)   # Nokomentēt koku un palaist šo

turtle.done()

Animācija un ekrāna kontrole

💡 Turtle vs. Pygame

Turtle ir ideāla mācību rīks, bet nav piemērota sarežģītām spēlēm. Ja vajag ātru animāciju, spēļu fiziku un skaņu – izmanto Pygame.

Teksts
import turtle
import math

ekrāns = turtle.Screen()
ekrāns.bgcolor("black")
ekrāns.tracer(0)   # Izslēgt automātisko zīmēšanu (ātrāk)

t = turtle.Turtle()
t.hideturtle()     # Paslēpt bruņurupuci
t.color("white")
t.speed(0)

# Lemniscate (bezgalības simbols)
t.penup()
a = 150   # Lielums

for i in range(360):
    kuts = math.radians(i)
    r = a * math.sqrt(abs(math.cos(2 * kuts)))
    x = r * math.cos(kuts)
    y = r * math.sin(kuts)
    t.goto(x, y)
    t.pendown()

ekrāns.update()   # Zīmēt visu uzreiz (ar tracer(0))

# Varavīksnes spirāle
t.clear()
t.penup(); t.goto(0, 0); t.pendown()
ekrāns.bgcolor("#1a0f06")
krāsas = ["red", "orange", "yellow", "green", "cyan", "blue", "violet"]

for i in range(200):
    t.color(krāsas[i % len(krāsas)])
    t.forward(i * 1.5)
    t.right(137.5)   # Zelta leņķis ≈ 137.5°

ekrāns.update()
turtle.done()