🐢 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.
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()