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