今天來跟大家介紹一個有趣的Python模組,適合小朋友在遊戲中學習coding(大人也可以玩玩看喔)!
這個模組叫做turtle。Python內建,不需要另外安裝,省時省力 :)
我們可以利用Python的interactive shell來測試turtle - 或者你也可以用Jupyter Notebook。
試著打下面的code:
>>> import turtle
>>> t = turtle.Turtle() # create a Turtle object
>>> t.shape("turtle") # make it a "turtle" shape
你應該會看到下面的視窗跳出來,裡面有一個小烏龜 🐢
嗯...這個烏龜看起來有點小,而且背景太單調。讓我們稍微修飾一下:
>>> t.turtlesize(5, 5, 5) # change turtle size
>>> turtle.Screen().colormode(255) # RGB scale color mode
>>> t.color(9, 185, 13) # specify RGB values for this turtle obj
>>> t.pencolor(0, 128, 0) # change outline color
>>> turtle.Screen().bgcolor(29, 162, 216) # background color
現在視窗應該變得像這樣,是不是更像在海裡游的烏龜了!
我們現在看到的這些指令,基本上是turtle模組所給我們的功能,讓我們可以用來控制各個遊戲中的物件。
現在讓我們來試著移動這隻烏龜:
t.forward(200) # move forward 200 pixels
小烏龜往前移動了!
我們看到他走過的痕跡呈現一條線,如果想要去掉這些線,可以用:
>>>t.clear()
如果你不想要移動線出現的話,可以使用:
t.penup()
penup就像把筆拿起來的意思,反之如果要畫線的話:
t.pendown()
你可以利用以下這些指令來移動你的烏龜:
.right(degree): E.g., t.right(90) - 使物件往右轉90度
.left(degree): E.g., t.left(90) - 使物件往左轉90度
.forward(pixels): E.g., t.forward(200) - 使物件前進200 pixels
.back(pixels): E.g., t.back(200) - 使物件後退200 pixels
到這裡,小朋友可以練習用寫code的方式來操控烏龜。試試看前進後退,轉彎,或者移動小烏龜到達指定的目的地。這對小朋友來說是接觸Coding,以及理解所謂的物件導向(Object Oriented Programing)的好機會喔!
龜龜賽跑
接下來我們來做一些比較進階的遊戲吧!
首先,只有一個烏龜好像有點寂寞,讓我們再做另一隻烏龜吧。
這次我們叫它t2。
>>>t2 = t.clone() # make a clone from the first turtle object
>>>t2.color("yellow") # change the color to yellow
>>>t2.pencolor(153, 153, 0) # change the outline color
>>>t2.penup() # stop printing line
>>>t2.goto(0, 0) # move t2 to starting point
現在我們看到第二隻小黃烏龜!
t.clone() 讓我們可以直接拷貝一個Turtle物件,接下來只要改變一些屬性(attribute)譬如顏色,就可以快速的造一隻烏龜出來了。.
.penup的這個method是阻止移動線·被劃出來。原始設定是會畫出移動線來,我們剛剛用了clear將它清除。
這裡我們用到t2.goto(0, 0),將t2移動到起點(正中央)。.goto這個method讓我們可以直接指定移動目的地的座標,相當方便。
接著把兩隻烏龜放到特定的位置:
>>> t.penup() # penup our first turtle object
>>> t.goto(-250, 250)
>>> t2.goto(-250, -250)
看起來還不錯。下一步我想要在畫面右側畫一條垂直線:
>>>pen = turtle.Turtle()
>>>pen.pensize(5)
>>>pen.penup()
>>>pen.goto(280, 300)
>>>pen.right(90)
>>>pen.pendown()
>>>pen.goto(280, -300)
>>>pen.hideturtle() # hide the object itself
pen = turtle.Turtle() 會創造一個新的Turtle物件。這裡要說明的是,雖然它是Turtle物件但他不一定要長的像烏龜 (我知道,這很令人感到混亂><)。所有這裏的圖形物件都是Turtle物件,
基本上,這裡我們就是把它當成筆並畫了一條垂直線。
OK, 接下來我們要想辦法讓這兩隻烏龜賽跑,並看誰先抵達終點線!可以怎麼做呢?
我會可以利用一個模組叫做random。利用它來產出隨機數字。
>>>from random import randint
>>>from time import sleep
>>>goal = 200
>>>while t.pos()[0] < goal and t2.pos()[0] < goal:
>>> t.forward(randint(0, 30))
>>> t2.forward(randint(0, 30))
>>> sleep(0.3)
在這個while loop中,各個烏龜每一次會隨機前進0-30pixels,期間並停止0.3秒,直到抵達終點為止!
t.pos()會給我們當下的座標,我們利用它來確認是否已到達終點。
最後,我們對勝利的烏龜加上一些文字:
>>>if t.pos()[0] > t2.pos()[0]:
>>> t.write("I win!", font=("Calibri", 36, "bold"))
>>>else:
>>> t2.write("I win!", font=("Calibri", 36, "bold"))
當你執行這個程式,他會跑出像這樣的畫面:
Cool!!!
每一次 run這個code都會有不同的結果,下一次猜哪一隻烏龜會贏呢?🏆
完整的code可以參考這裡喔:
Kommentare