top of page
Search
Learn with Shin

小朋友學coding

Updated: Jun 13, 2021



今天來跟大家介紹一個有趣的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


Post: Blog2_Post
bottom of page