Python turtle 是一個練習圖形化界面的繪圖函式庫,藉由一些簡單的方法可以模擬程式設計師拿著筆刷在螢幕上畫烏龜,還記得我剛接觸 Python 時老師就有介紹個函式庫,實在有些懷念,今天我就用這個函式庫來當 GUI 系列的第一篇,用一個小小的烏龜比賽程式來決定晚餐要吃甚麼之類的XD
這個小烏龜比賽是我在 youtube 上找靈感的時候在這影片上 https://youtu.be/OXi4T58PwdM 看到的,程式碼直接從他的 github 下載來修改 https://github.com/techwithtim/Turtle-Race ,改成我們想要的形式,感謝這位大大的無私奉獻!
Turtle 是一個很簡單的函式庫,常用的函式用法可以看這邊 http://yltang.net/tutorial/python/5/ ,下面我就直接把修改好的 main.py 放上來,並把程式碼講解寫在註解中。
import math
import random
import turtle
from config import * #引入我們自訂的 config.py
# 設定畫布大小為 500 x 500
win_length = 500
win_height = 500
#設定有八隻烏龜
turtles = 8
#創建新畫布
turtle.screensize(win_length, win_height)
#宣告config class
config = Config()
# 宣告比賽烏龜的型別,有位置、顏色、形狀、名稱等等的參數
class racer(object):
def __init__(self, color, pos, name):
self.pos = pos
self.color = color
self.turt = turtle.Turtle()
self.turt.shape('turtle')
self.turt.color(color)
self.turt.penup()
self.turt.setpos(pos)
self.turt.setheading(90)
self.name = name
#定義賽龜的運動行為,透過 pos + r 來前進
def move(self):
r = random.randrange(1, 20)
self.pos = (self.pos[0], self.pos[1] + r)
self.turt.pendown()
self.turt.forward(r)
#讓賽龜們回到初始位置
def reset(self):
self.turt.penup()
self.turt.setpos(self.pos)
def startGame():
tList = []
turtle.clearscreen() #清空畫布
turtle.hideturtle()
data = config.load() #讀取設定的資料
#將賽龜資料處理並加入 tList[] 中
start = -(win_length/2) + 20
for t in range(turtles):
newPosX = start + t*(win_length)//turtles
tList.append(racer(data[t]["color"],(newPosX, -230), data[t]["name"]))
tList[t].turt.showturtle()
#開始比賽
run = True
while run:
for t in tList:
t.move()
maxColor = []
maxDis = 0
for t in tList:
if t.pos[1] > 230 and t.pos[1] > maxDis:
maxDis = t.pos[1]
maxColor = []
maxColor.append(t.name)
elif t.pos[1] > 230 and t.pos[1] == maxDis:
maxDis = t.pos[1]
maxColor.append(t.name)
#比賽結束後將第一名的以 console 方式輸出
ShowWinText = ""
if len(maxColor) > 0:
run = False
print('The winner is: ')
for win in maxColor:
print(win)
ShowWinText= win
#再宣告一隻烏龜用來顯示結果
pen = turtle.Turtle()
pen.penup()
pen.goto(0,-270)
#到畫布下方寫下第一名的烏龜名稱
pen.write(ShowWinText,False,"center",('Arial', 16, 'normal'))
pen.showturtle()
startGame()
while True:
print('-----------------------------------')
start = input('Would you like to play again')
startGame()
這邊只要修改 name,改成你想要決定的項目,像這邊填入了很多晚餐的選項,可以讓烏龜來幫我們決定XD
class Config():
def load(self):
return [
{"color": "red", "name": "滷肉飯"},
{"color": "green", "name": "乾麵"},
{"color": "blue", "name": "披薩"},
{"color": "yellow", "name": "炒飯"},
{"color": "pink", "name": "小火鍋"},
{"color": "orange", "name": "鐵板燒"},
{"color": "purple", "name": "水餃"},
{"color": "black", "name": "夜市"}
]
看來烏龜幫我們決定要吃乾麵呢~
大致上是這樣,其實 turtle 也可以拿來畫各種美麗的圖,因為他就像是程式設計師在畫畫嘛,不過剛好看到烏龜比賽覺得有趣就介紹給他大家,希望大家對圖形化介面程式有最初始的認識~
參考資料
http://yltang.net/tutorial/python/5/
https://github.com/techwithtim/Turtle-Race