Turtle to jedna z pierwszych bibliotek w Python, którą uczy się większość osób. Pozwala tworzyć proste programy graficzne, w tym bardzo, bardzo proste gry. Wyścig żółwi jest klasycznym przykładem i grą polecaną jako jeden z pierwszych projektów, które warto zrobić. Pozwala ona przećwiczyć podstawowe operacje w Python, takie jak pętle, funkcje czy też wyrażenia warunkowe.

Wyścig żółwi, jest bardzo prosta. Na planszy mamy 2 lub więcej zawodników, które w przemieszczają się w kierunku mety. Wykonują ruchy na zmianę, natomiast długość ruchu zależy od wylosowanej liczby.

Przed rozpoczęciem gry, warto przeczytać wstęp do Python Turtle.

Struktura gry

Import bibliotek

Zaczynamy od zaimportowania bibliotek, które będą nam potrzebne, ostawienia koloru tła na czarne, oraz nadaniu nazwy okienku programu

import turtle
import time
import random

turtle.bgcolor('black')
turtle.title("Wyścig żółwi")

Meta

Na początku możemy zająć się, narysowaniem mety. Tworzymy do tego celu nowy obiekt Turtle(), ustawiamy go w odpowiednim miejscu, piszemy – Finish Line. Następnie przesuwamy go na początek mety i rysujemy.

meta = turtle.Turtle()
meta.color('white')
meta.penup()
meta.goto(240,220)
meta.write("Finish Line", font=("Arial", 15, "bold"))

meta.penup()
meta.goto(300,200)
meta.pendown()
meta.goto(300,-200)
meta.hideturtle()

Zawodnicy

Kolejnym krokiem jest utworzenie 2 żółwi. Odpowiednio – czerwonego oraz niebieskiego. Podnosimy długopis (penup), oraz ustawiamy je na swoich miejscach startowych.

red = turtle.Turtle()
red.shape('turtle')
red.color('red')
red.pensize(7)
red.penup()
red.goto(-200,100)
red.pendown()

blue = turtle.Turtle()
blue.shape('turtle')
blue.color('blue')
blue.pensize(7)
blue.penup()
blue.goto(-200,-100)
blue.pendown()

Odliczanie

Jak żółwie zajmą już pozycję, możemy rozpocząć odliczanie. W naszym przypadku 3, 2, 1, Start !!!

odliczanie = turtle.Turtle()
odliczanie.color('white')
odliczanie.penup()
odliczanie.goto(-200,200)
odliczanie.hideturtle()

for x in range(3):
    odliczanie.write(3-x, font=("Arial", 40, 'bold'))
    time.sleep(1)
    odliczanie.clear()

odliczanie.write("Start !!!", font=("Arial", 30, 'bold'))

Przemieszczanie się żółwi

Żółwie przemieszczają się na zmianę. raz jeden raz drugi. Aby było uczciwie, musimy zacząć od wylosowania, który z żółwi zaczyna. Następnie losujemy liczbę o jaką ma się przesunąć do przydu, z przedziału od 0 do 70. Pętlę powtarzamy co 0.3 sekundy.

Wartości 0-70 oraz 0.3 sekundy, są dobrane tylko po to, aby żółwie nie przesuwały się ani za szybko ani za wolno. Można umieścić dowolne inne wartości.

Po każdym ruchy, wywołujemy funkcję sprawdź, która sprawdza czy dany żółw, przekroczył linię mety. Jeżeli tak, to pętla zostaje przerwana i żółwie przestają się ruszać.

first = random.choice(['red','blue'])

while True:

    if first == 'red':
        red.forward(random.randint(0,70))
        if sprawdz(): break
        blue.forward(random.randint(0,70))
        if sprawdz(): break
    else:
        blue.forward(random.randint(0,70))
        if sprawdz(): break
        red.forward(random.randint(0,70))
        if sprawdz(): break
        
    time.sleep(0.3)

Sprawdzanie czy któryś z żółwi wygrał

Jednocześnie nasza funkcja, drukuje komunikat o tym, który z zawodników wygrał.

def sprawdz():
    
    if red.position()[0] >= 300:
        odliczanie.clear()
        odliczanie.color('red')
        odliczanie.write('Wygrał CZERWONY !!', font=("Arial", 20, 'bold'))
        return True

    if blue.position()[0] >= 300:
        odliczanie.clear()
        odliczanie.color('blue')
        odliczanie.write('Wygrał NIEBIESKI !!', font=("Arial", 20, 'bold'))
        return True

    return False

Całość kodów

import turtle
import time
import random

turtle.bgcolor('black')
turtle.title("Wyścig żółwi")


# meta

meta = turtle.Turtle()
meta.color('white')
meta.penup()
meta.goto(240,220)
meta.write("Finish Line", font=("Arial", 15, "bold"))

meta.penup()
meta.goto(300,200)
meta.pendown()
meta.goto(300,-200)
meta.hideturtle()


# zawódnicy

red = turtle.Turtle()
red.shape('turtle')
red.color('red')
red.pensize(7)
red.penup()
red.goto(-200,100)
red.pendown()

blue = turtle.Turtle()
blue.shape('turtle')
blue.color('blue')
blue.pensize(7)
blue.penup()
blue.goto(-200,-100)
blue.pendown()

# odliczanie

odliczanie = turtle.Turtle()
odliczanie.color('white')
odliczanie.penup()
odliczanie.goto(-200,200)
odliczanie.hideturtle()

for x in range(3):
    odliczanie.write(3-x, font=("Arial", 40, 'bold'))
    time.sleep(1)
    odliczanie.clear()

odliczanie.write("Start !!!", font=("Arial", 30, 'bold'))

# czy wygrał

def sprawdz():
    
    if red.position()[0] >= 300:
        odliczanie.clear()
        odliczanie.color('red')
        odliczanie.write('Wygrał CZERWONY !!', font=("Arial", 20, 'bold'))
        return True

    if blue.position()[0] >= 300:
        odliczanie.clear()
        odliczanie.color('blue')
        odliczanie.write('Wygrał NIEBIESKI !!', font=("Arial", 20, 'bold'))
        return True

    return False

# petla główna

first = random.choice(['red','blue'])

while True:

    if first == 'red':
        red.forward(random.randint(0,70))
        if sprawdz(): break
        blue.forward(random.randint(0,70))
        if sprawdz(): break
    else:
        blue.forward(random.randint(0,70))
        if sprawdz(): break
        red.forward(random.randint(0,70))
        if sprawdz(): break
        
    time.sleep(0.3)

turtle.exitonclick()

Python Turtle