• 沒有找到結果。

1. 程式設計教學的發展。

N/A
N/A
Protected

Academic year: 2021

Share "1. 程式設計教學的發展。 "

Copied!
98
0
0

加載中.... (立即查看全文)

全文

(1)

附錄一 研究者教學日誌

時間: 2006.02.24 授課單元: Alice 第一章

項目 重要記事

教學內容

1. 程式設計教學的發展。

2. 介紹 Alice 的起源、優點及下載和安裝。

3. Alice 環境操作說明,包含:

(1) 加入背景、物件,並指定物件位置。

(2) 利用物件工具列控制物件方向、大小,及複製物件。

(3) 如何拖曳程式標籤至正確位置。

4. 要求學生實地操作一次,編輯一個具有物件,且物件可以動 作的 World,讓學生藉此熟悉 Alice 操作環境。

學生反應與教 學心得

為了節省學生下載的時間,研究者在教學之前已先將 Alice 分 別下載於教師用電腦,及部份學生電腦中,讓學生直接透過網 路芳鄰傳送至自己的電腦。因為 Alice 的預設安裝路徑在 C:\,在安裝 Alice 的時候特別花了一些時間強調安裝路徑及 方法,以防止學生安裝之後無法執行,還得在重新安裝一次浪 費時間,並一一巡視是否每台電腦都可以正確無誤的執行 Alice。因為學生曾經使用網路芳鄰上傳檔案至其他電腦,因 此在下載時沒有太大問題。

在操作 Alice 時,學生剛開始遇到的困難是在加入物件的時 候,因為 Alice 中的的物件眾多,分屬在 Animals、Beach、

Buildings 等各種不同分類下,需要額外花時間找出物件所在 分類,另一個常見問題是學生加入物件之後,易忘記按 DONE 按鈕,導致無法回到程式編輯區,而無法編輯程式碼。

為了讓學生熟悉 Alice 環境,應多指定學生加入不同物件,讓 學生對於物件可能屬於哪個分類項能有基本概念,可減少加入 物件時的搜尋時間,例如 rabbit 是屬於 animals 的分類,table 是屬於 furniture 的分類。

時間: 2006.03.03 授課單元: Alice 第二章

項目 重要記事

(2)

教學內容

1.物件、屬性、方法、事件的定義

2.介紹 Alice 中的物件、屬性、方法、事件

(1) 物件列表

(2) 屬性:color、opacity、vehicle、fillingStyle

(3) 方法:move、turn、roll、resize、say、think

(4) 事件:when the world starts、when the key is typed、

when the mouse is clicked on something

學生反應與教 學心得

有少數同學無法跟上進度,雖然目前仍未正式進入程式碼編輯 階段,但因為對初學者而言,加入物件的動作略嫌瑣碎,加上 學生回家不一定會自行複習課程,電腦課又是一週才上一次,

有些學生已無法記得所有加入物件的動作。

部份學生會自己嘗試,除了老師上班講解的 move、 turn 、 roll 之外等的指令。

即使是很簡單的步驟也要確認多數學生都能操作無誤,才進行 下一階段的教學,否則學生在一開始即心生排拒的話,無法有 良好的教學效果。教學者在學生實作時應多花時間確認學生的 的熟練度是否精熟。

時間: 2006.03.10 授課單元: Alice 第二章

項目 重要記事

教學內容

本週教學內容以學生自行做完一個練習題為主。前兩週都是由 老師說明一個範例,再加以講解程式碼內容和操作步驟,這次 在老師說明範例內物件的動作和流程之後,即由學生自己動手 操作。

進行第一階段隨堂評量,講解過題意之後,讓學生有一節課的 時間完成題目。

學生反應與教 師反思

由於已經是第三週,所以學生更熟悉 Alice 的操作環境,也不 會像前兩週一樣,光是開啟 Alice 就要花將近 20 分鐘的時間。

但是仍有 2、3 個同學連最基本的 move 指令都不會用。約有 5 個同學是整整兩節課都不做練習題的。

本週採取獎勵制度,只要學生有教其他同學,教滿三位同學則

會加 1 分,平均每班有三位同學會教去其他同學,每位去教同

學的學生在兩節課內會教約 3~5 位同學,有些只會做一半的學

生經由同學協助之後,完成度提高很多。班上學生做完練習題

的比率由一班 15 人提高到一班 20 人。但是有個缺點是,去教

(3)

目前的錯誤做改正,或是學生會直接幫別人做,這樣就失去同 學互助的精神了。

本週是獎勵制度實施的第一週,成效不錯,但不知道學生會不 會只是三分鐘熱度,過了幾週之後就不想去教別人了。需要持 續觀察,如果效果良好的話即繼續執行獎勵制度。

時間: 2006.03.17 授課單元: Alice 第三章

項目 重要記事

教學內容

檢討上週評量題目,將成績優秀學生的考卷掃瞄之後,廣播給 學生看並做重點說明,學生反映良好,特別是考卷被廣播給全 班同學看的學生,會被激勵,更有動力學習。

本週是講授參數的部份,由於參數(parameters)是用來傳遞不 同 methods 之間所需的資料,只要善用參數就可以將許多功能 相同的 methods 集合成一個。我先讓學生做完原本該做的四個 methods 之後,再告訴他們要參數的功能及怎麼用參數,讓學 生知道用參數的好處是什麼。

學生反應與教 師反思

學生自從上週開始使用獎勵制度之後學習成效逐漸提昇,學生 都會跑來問老師,他還有幾個課堂練習沒做,他想要補做。

另外就是我在講課的時候,只要同學有回答問題,我都會登記 號加分,同學因為這樣都特別喜歡回答問題,上課氣氛也不會 死氣沉沉的。

教學並沒有辦法完全遷就學生,不能因為學生不想學就不教 因為在教 methods 的時候花了不少時間讓學生做了兩個練習 題,所以學生能清楚的了解 methods 的用法,所以學生在本週 參數的學習上並沒有遇到什麼問題。學生漸漸開始認為 Alice 是個有趣的程式編輯軟體了。

時間: 2006.03.24 授課單元: Alice 第三章

項目 重要記事

教學內容

延續上週第三章的課程,延用上週甲蟲樂團的範例,除了原本

有的 bandMember 這個參數之外,讓學生自行新增 music 和

height 這兩個參數,觀察新增這兩個參數之後,對物件產生的

影響,以及填寫期中問卷,並於第二節課進行參數隨堂評量測

驗。

(4)

學生反應與教 師反思

藉由新增 music 和 height 這兩個參數之後,學生漸漸可以體 會到參數的用途,尤其是。在考試的部份,學生不適應實作題 的考試方式,需要多花時間說明題意和題目要求,我想這種考 試方式目前還不適合學生,也許應該在更後面階段的時候再試 實作題的方式,有鑑於學生此次考試表現並不理想,將在下次 上課時檢討考卷,針對學生概念不清的地方再做說明,再考一 次隨堂評量,觀察學生的理解程度是否有增加。

時間: 2006.04.07 授課單元: Alice第四章

項目 重要記事

教學內容

第 一 節 課 先 檢 討 上 次 parameter 的 考 試 內 容 , 再 考 一 次 parameter 的部份。

第二節課講授 Alice 第四章,內建 functions 和簡單的 if/else 概念,範例是月球登陸機器人和滾動的球。月球登陸機器人所 用到的 function 是內建的 distance to ,利用這個 function 得 到兩個物件之間的距離,再決定機器人要移動的長度。第二個 範例滾動的球,需要自行編寫 function 的內容,在 function 編 輯好公式,取得球的直徑(3.14*toyBall’s width)之後,再決 定球滾動的圈數。

在這階段教學中,為了編輯公式的需要,還另外教授 math 標 籤(+-﹡/)的使用方法。

學生反應與教 師反思

學生對於 functions 內的英文涵義不是很了解,例如 distance 是距離,width、height、depth 也不懂,還有 smaller、shorter 等等…也不懂,不像 methods 內的英文意思比較簡單。

有些數學程度較弱的學生不了解球滾動的圈數是:距離/(3.14*

直徑),不能理解球的寬度(ball’s width)等球的直徑。

在下週上課時將針對 function 的標籤功能再做說明,並讓學生 多做幾個類似的範例,讓學生藉此體會 function 的用法。

時間: 2006.04.28 授課單元: Alice複習 第四章

項目 重要記事

教學內容

複習第四章後面的範例-滾動的球,這題上週已經教過了,但是因

為大部份的同學認為教太快,而且很多同學沒也做完這一個範

例,所以我示範一次之後,讓學生再繼續把這個範例做完。剩下

的時間讓學生補做他們之前沒有完成的練習題或範例。

(5)

學 生 反 應 與 教 師 反 思

因為是延續上週進度,所以學生神情顯的較為輕鬆,也不會覺得 整整兩堂課都在做 Alice 太累了。其他已經做完範例的學生通常 會上網收信或是看奇摩家族。

還是要留給學生多一點自由時間,不要整整兩堂課都在做 Alice,

才不會讓學生造成反感。畢竟上學期原本的電腦老師教課進度就 是比較慢,學生如果本來對電腦就不感興趣,太過要求他們一定 要學會什麼的話,容易造成學生反彈,反而達不到學習效果。

每週都教新的進度的話容易造成學生的壓力,適度的複習和評量 可以讓學生有喘息和回憶以前教過的重點,而不是盲目跟著老師 教的步驟做過一遍而己。

問卷結果整理:

-麥克風音量(不夠大聲)

-不喜歡英文介面,覺得不好用

-可以自已設計 world,不要只是做跟老師一樣的 -能有多一點自由運用的時間

-不要再寫考卷了

-不要太常切換螢幕,每次切螢幕講解的內容少一點,太多會記不 起來-講義圖片太黑看不清楚,太厚不想看

-練習時間多一點

時間: 2006.05.05 授課單元: Alice 第五章

項目 重要記事

教學內容 複習第四章重點,再進行第五章的教學。

學生反應與教 師反思

學生挑的題目,大部份是我認為對他們來講最難的那一個 (lightBulb),而且很多人都有做出來,雖然有些人比較早做 完,有些人花的時間比較久,有些人用三行就做完了,有些人 用了六行。但是如果他使用 if-else 的概念正確的話,我認為 這樣就可以了。

可能是因為今天上課的內容(第五章),和前一個進度的內容 (第四章)有部份重疊,第四章的重點是 functions,但是有提 到一些 if-else 的概念,第五章的重點是 if-else,但是有需 要用到 functions 的概念,再加上題目是讓學生三題選一題,

做完之後學生就可以自由上網,所以這次學生的反彈不像之前

上課那麼大。我想學生會挑我認為最難的那題做也許是因為我

(6)

給那題配分比較高的關係吧,由此可知,大部份學生還是會在 意電腦課的成績,只要給的分數夠高,還是能吸引學生完成課 堂練習題。

時間: 2006.05.12 授課單元: Alice 第五章

項目 重要記事

教學內容

第一節課教了兩個範例,第一個範例是複習 function 概念,

第二個範例除了使用 function 概念之外也教 if/else 的用 法,教學過程中除了講解程式碼概念之外,會讓學生猜這段程 式碼對於 Alice 中的物件會產生什麼影響。

第二節課複習 function 及考試(function)。考試的時候學生 可以用電腦操作 Alice,也可以看講義。

學生反應與教 師反思

上課提問的時候,學生發言擁躍,比如說我在執行一段程式碼 的之前,我會先問他們,這個機器人會做什麼動作,很多學生 都會搶著發言,或是我問他們這行程式碼的作用,學生也會搶 著回答,等學生發言的差不多的時候,我再執行程式碼,當學 生發現執行結果和當初預想一樣的時候,就會非常高興。學生 願意去猜為什麼這個物件會做這個動作,而不是死氣沉沉的等 老師提供答案,整體而言,上課氣氛熱絡。介紹完範例之後,

給學生三題難易度不同的題目,讓學生自己挑著做,難度愈難 的題目給分愈高。學生出乎意料的都會選擇比較難的題目做,

反而沒有學生挑最簡單的題目。

時間: 2006.05.19 授課單元: Alice第五章

項目 重要記事

教學內容 講授 loop 的概念,範例操作及說明。

學生反應與教 師反思

在教 loop 的時候,我是利用旋轉摩天輪做範例,這個範例的

好處是容易讓學生了解什麼是 loop,而且也容易帶進巢狀

loop 的概念,大部份學生都認為這個範例容易做而且很有趣。

(7)

時間: 2006.05.26 授課單元: Alice第六章

項目 重要記事

教學內容

本週教 while 的觀念,因為 while 的用法和 loop 的完全不同,

所以讓講解完範例之後就讓學生自己試著操作一遍,而且在 while 範例中也順便複習 function 的概念和用法。

學生反應與教 師反思

至於第二節課上的 while 條件式迴圈,程式碼的部份比較複 雜,但是執行效果生動有趣,學生也蠻願意花時間看講義,並 照著講義上的說明步驟一步一步跟著做,當他們做完看到實際 的執行結果時,會覺得很好玩。

不一定難的教材內容學生就會排斥不想學,只要內容夠有趣,

並給予足夠的練習時間,學生還是願意花時間去練習,學生比 我想像中有耐心。也許這是因為他們對於 Alice 漸漸上手,也 熟悉 Alice 物件和標籤的操作動作和方法,所以此時他們只要 把注意力放在學習程式,而不必再去想如何改變物件的位置,

程式碼的複製、刪除等動作

時間: 2006.06.02 授課單元: 專題

項目 重要記事

教學內容

讓學生二至三人一組,自行設計一個 world,這個 world 中必 須要用到這學期上課所教到的程式碼標籤,如 do together,

do in order,if/else,function,loop,while 等等。

學生反應與教 師反思

學生對於可以自行創做一個 world 很感興趣,組員彼此之間會

討論要如何設計 world,並會多次嘗試不同的程式碼標籤,在

完成 world 之後,也會去觀摩其他小組的作品,當學生做出具

有創意的作品,得到同儕稱讚的時候,很有成就感,效果比得

到老師的讚美還大的多。

(8)

附錄二 協同研究者教學日誌 2006.02.24

第一次上 Alice,同學們對於新老師還在摸索適應,由於是下學期換一位老 師上 Alice 造成同學要適應新老師的教法,因為我平常上課時並沒有那麼嚴肅,

加上 PhotoImpact 較容易,很快可以得到想要的結果,會造成同學對於新老師有 點排斥。第一次上課同學對於 Alice 的反應比我想像中的好,同學對於視覺化的 物件接受度高,例如兔子放大縮小覺得有趣,第一週的進度學生能認真學習。

2006.03.03

第二週的 Alice 課程,開始極少數有同學跟不上進度,雖然課程不是很難,

但程式設計學生目前的程度與興趣較低,在教學上不容易達到預期效果,加上學 生回家沒時間練習,上週的進度過了一週就忘了,這週上課若跟不上進度容易自 我放棄。

老師在教學上的表現大致都很好,上課有範例,講解亦清楚,對於教材內容 更是完全掌握,且課程內容組織良好能讓學生一步步學習,這兩週來與學生互動 良好,能耐心解決學生舉手發問的問題,若上課講解的速度可以再放慢一點點會 更好。以下有幾點建議:

1. 建議準時下課,讓學生有一點自由的空間,學生可以出去走走,要在電 腦教室上網亦可,上課時當然要把學生拉回來上課的情境中。

2. 對於學生的上課實作,如有學生想要廣播給全班看,可以完成學生的心 願,上課氣氛會更輕鬆。

樂高 RCX,可以訓練學生寫簡單的程式再傳輸到 RCX 中,然後馬上測試

RCX 機器是否能按照自己寫的程式運作。Alice 或是其他的程式語言教學皆無法

與樂高 RCX 相比,只能藉助有趣的例子來提升學生的學習興趣,而恬忻老師在

班級學習氣氛的引導方面表現良好,但隨著課程難度的加深,當越多學生趕不上

(9)

進度時,這方面的挑戰將會越來越嚴苛。

2006.03.10

本次上課採用了新的策略讓同學互助學習,程度較好同學可以較快完成本週 作業進度,因此讓程度好的同學協助程度差的同學進行學習,較不會產生不懂的 同學放棄這次的作業的情況,經過嘗試,目前學生學習情況已有改善。對於上課 不練習的同學有以下的建議方法:

1. 先口頭警告,如未完成作業即上網閒逛,則會將其網路斷線。同學若真 的屢勸不聽則網路斷線。

2. 先罰站 5 分鐘以示懲戒,再讓學生回座位繼續操作,屢勸不聽則命令學 生遠離電腦,不讓學生再碰電腦,要他觀看隔壁同學的操作,若學生有 誠意悔改,可以跟他談談再決定如何處置。

目前遇到的瓶頸跟上週類似,要如何才能提升學習的興趣,因為上學期的學 期末電腦課進度非常慢,程度較好的學生有較多時間上網,造成現在他們覺得進 度太快,教學不能完全被學生給牽制住,誰然目前學習意願較低,但該交給學生 的觀念或技巧一定還是要說明。

2006.03.17

課程進度如果未能達到預期,則可以加快上課的進度,但也要兼顧學生的吸

收狀況,還是會有學生不專心聽講,到了要操作練習只好四處求助同學,若無法

得到同學的幫助則會自我放棄學習開始上網,研究者本學期才在天母任教,較不

好意思管太嚴厲,這方面可能還是需要我去跟學生溝通。我下週會協助勸導學生

學習,若未成進度而去瀏覽無意義的網站,我將會斷掉學生的網路而強迫他學

習。目前遇到的困境是學生因為知道其他班未上 Alice 課程,而一直詢問為何我

們班要上 Alice?Alice 學會了有什麼用途?我們何時才能和別班一樣可以上原訂

的課程?因為 Alice 較難學生在學習上常遇到挫折,我會找一個時間學生做精神

(10)

講話,希望能提高學生的學習興趣與上課配合度,若無成效則我們再集思廣益有 無其他更好的教學方法與班級經營策略。

本次上課讓我感到研究者的用心,將考卷掃瞄之後,廣播給學生看並做重點 說明,學生對於自己的考卷能掃描並播給全班看感到有趣,因為成績好的同學才 會有此殊榮。

2006.03.24

上課秩序稍微吵鬧了一點,可在秩序方面多要求一點,欣慰的是學生間能發 揮互助學習的精神,會的同學努力教導不會的同學,所以本週的作業大部分同學 皆能完成。上課時常幫有回應的學生加分,此方法甚好可以提高學生學習的興趣 與學生上課更認真,因為認真所以他們都有加分的機會。上課時通常是前 2 排的 同學較會有回應,加分的機會也較多,後排的同學因為電腦或是其他雜音的干 擾,造成老師沒聽到而喪失加分的機會,可以提問讓後排的同學來回答,讓他們 有加分的機會。

鼓勵學生發揮創意:

1. 除了上課的進度,鼓勵學生做的更多,可以多做一個類似的,做完找老 師檢查後再加分。

2. 學生不依照上課規定的作業,用其他圖案、或是圖案一樣但是移動的方 向不同,經過檢查如果他的作業所使用的功能、函數或是其他方法皆和 本次規定作業相符,仍然可以給予分數甚至更高分。

2006.03.17

段考停課一次。

(11)

上課秩序稍有改善還可再進步,作業繳交狀況持續進步中,有少數幾位同學 仍沉迷於上網,這幾位同學口頭告誡雖然馬上會終止上網,當老師離開時又故態 復萌,我建議拔掉學生電腦的網路線,直到該生作業完成。學生的可塑性可以被 要求,該班導師對學生要求非常嚴格,各科任老師有任何問題時可以向導師反 應,但透過導師來壓學生可以在課堂秩序與作業繳交上獲得立即且顯著的改善,

但師生關係會受損,因為是新任教師在班級經營上有很多要學習的地方,不是每 班導師都要求的很嚴格且每班狀況亦不相同,將來在教學上是否要透過導師來要 求,這是根據每各班級的狀況而定。

本週發了學習單,30 分鐘的時間讓學生實作完成,因為內容有用到前幾週 的進度,很多學生都忘了,所以學習單的題目學生很多都無法完成,可以在發學 習單之前稍微複習前幾章課程的重點進度,或是提醒學生要考試,這會讓學生更 專心學習,因為學生很怕考試,更何況電腦科很少有考試。

2006.04.28

天母國中學生大多的家庭經濟狀況都很好,校內的老師們多年來的感受是學 生們接受的文化刺激較多,但挫折忍受力較差,遇到困難如果求助後仍無法改 善,學生們會漸漸的放棄學習。

學生們對於 Alice 沒有興趣,其實大多數學生是因為 Alice 是英文介面,很 多英文單字不懂,而造成不想學習,學生最常問我有沒有中文畫面的,這是我認 為以 Alice 為主的程式設計教學所遇到的最大障礙,學生的反應是 Alice 其實很 有趣,但是畫面是英文的就不想多練習了。

2006.04.21

班際直笛比賽,停課一週。

(12)

雖然學生都會抗拒考試,但是仍需按照原訂教學進度進行,該有的評量與實 作仍需實施,由評量與實作的結果作為改善我們教學策略的參考依據。

學生態度不佳或是上課不專心時,研究者可以施加一些壓力,當學生有好的 表現時則不吝嗇的給予讚美,當學生做規定之外的程式設計,若是合乎本章程式 技巧,這可以幫他額外加分,若是不合乎本章規定,則要求學生再補交。

2006.05.12

本週交作業的狀況有顯著的改善,研究者給予學生明確的目標,完成考卷與 完成課堂練習的題目就可以上網,學生們就會努力去完成,較不努力的學生就用 語言規勸他們未完成作業不準上網,這是大部分學生都能接受的,也就不會反抗 因為他們自知理虧,隔壁同學 30 分鐘就可以完成課堂練習作業,而他不努力當 然無法完成。

只要老師用心教學,相信學生也會感同身受,只要老師將這學期以來的學習 單、作業繳交情況與分數公佈出來,學生有缺的分數大部分同學還是會想補救,

而且將課堂講義放在網頁上供學生下載,除了看印的黑黑講義還多一項選擇。

(13)

附錄三 Alice 程式設計教材 第一章 Alice 簡介 [學習重點]

學習下載、安裝 Alice,並能自行加入物件,設計一個簡單可以執行的程式。

一、什麼是 Alice?

程式設計聽起來像是件有趣但卻很難很難的事情,就算是大學生也不一定能 學的好程式設計,為了讓程式設計變的更好玩,更容易學習,美國卡內基麥隆大 學(Carnegie Mellon University)研發出一套免費程式設計軟體,它非常具有親 和力,適合從來沒有學習過程式設計的初學者使用,這套軟體就叫做 Alice。

Alice 提供互動的、立體的模擬情境,所有放在 Alice 圖庫中的物品或人都是 具有前後左右上下六個面向,就像真的一樣。除此之外,Alice 還提供程式語法 標籤,使用者不用自己鍵入程式碼,只要利用拖曳的方式將程式語法標籤放在正 確的地方就可以了。如此一來,使用者可以不需要將時間浪費在打字上,也可以 避免因為打錯字而造成程式碼錯誤。完成的 Alice 作品在執行時候,看起來就像 連續性的動畫,如同你在看卡通一樣。

要去哪裏下載這套軟體呢?在http://www.alice.org 即可下載,目前有PC和 MAC兩種版本可供使用,最新的版本為Version 2.0 04/05/2005。

二、下載及安裝:

作業系統需求:

Windows ME, Windows 2000, 或 Windows XP 硬體需求:

.Pentium 500 MHz 以上

.16bit(以上)的 VGA 顯示卡

.128MB 記憶體

.螢幕可支援的解析度 1024x768 以上

(14)

.音效卡 步驟:

(一)連接至 Alice 官方網站。

http://www.alice.org

(二)下載 Alice2.0 解壓縮之後執行 Alice.exe。

務必將解壓縮之後的資料夾放至 c:\ 下方能正確執行!

(15)

三、環境說明

物件列表

屬性

方法

動作

物件 事件

程式執行程序

流程控制 免安裝,直接執行

SlowAndSteadAlice.exe

(16)

四、歡迎進入 Alice 世界 [範例]:

在設計每一個程式之前,我們要先想好程式的”情境”,決定好場景、物件、

每個物件要執行的動作和流程。建議設計者可以先自己畫張「手繪草稿」做記錄。

手繪草稿

1:在草地上有一隻兔子和一隻蝴蝶,兔子在左邊,蝴蝶在右邊,兔子面朝蝴蝶 的方向。

2:兔子先向上跳 1 公尺。

3:兔子向下跳 0.5 公尺並向前進 0.5 公尺。

1:初始情境

2:向上跳

3:向下跳並往前進

(17)

開始實作

現在我們可以自己來動手試試看,練習一個範例,可以幫助你更了解 Alice 的操 作環境。

(一)開啟新檔,在選單上先選擇 File,再選擇 New World。

1、首先加入所需要的背景、物件,並指定物件位置。

加入背景

(18)

2、加入物件。

3、選擇動物(方框裏的路徑是 Home->Local Gallery,表示你現在取用的圖庫 是存在你電腦裏的) 。

按此按鈕加入物件

4、加入”兔子”和”蝴蝶”。 (在 animals 中可以找到兔子,在 animals/bugs 中可以

找到蝴蝶)

(19)

工具列

完成按 done

補充說明:

右邊工具列: (由左而右)

--選擇物件

--利用滑鼠上下移動物件 --用滑鼠向左或向右移動物件 --使物件向前或向後

--翻轉物件

--重新改變物件大小 --複製物件

(二)現在我們來開始編輯程式碼:

1、選擇編輯程式碼的區域。

(1)點選左邊樹狀結構中最上面那一項 World。

(2)再點選左下方 Methods 標籤,可以看到右下角有個程式編輯區。上面有個

標籤是 world.my first method,這就是我們要開始編寫程式碼的地方。

(20)

(1)

(2)

程式編輯區

2、在寫程式碼之前我們要先想好物件的動作,也就是說,按照我們所設計的情

境,我們希望兔子先向上跳 1 公尺,接下來是向下跳並往前進,所以我們需

用到的流程標籤有 Do in order 和 Do together。Do in order 的意思是,包含

在此項目內的各個動作,是由上往下完成的;Do together 的意思是,只要包

含在此項目內的每個動作,都同時進行。

(21)

3、接下來(1)點選左邊 whiteRabbit 標籤, (2)再選擇左下角的 method

4、將 move 方法拉進右邊 Do in order 下的 Do nothing,再設定 up 1 公尺。

(1)

(2)

(22)

5、再將 Do together 拉進 Do in order 裏,接下來要處理 Do together 程式部份。

將左邊的 move 標籤拉進右邊的程式碼編輯區內,這個動作重覆兩次。

6、接下來我們來看看 move 這個方法有什麼參數可以調整?

(1)方向:up(向上) 、down(向下) 、left(向左) 、right(向右) 、forward(前 進) 、backward(後退)。

因為兔子需要先向上跳,所以在第一個動作這邊,我們設定是 up(向上)。

(2)

(1)

(23)

(2)距離:以 meter(公尺) 為單位

在這裏我們希望兔子向上跳 1 公尺, 所以就選擇 1 meter。

(3)其他:duration(時間長短) 、style(形式) 、asSeenBy(相對於某物的方 向) 、isScaledBySize(調整大小)

duration 是用來設定動作時間的長短。兔子向上跳的時間有多長呢?只有

0.5 秒!所以我們在 duration 的項目中只要設定成 0.5seconds(秒)就好

了。

(24)

補充說明:

style(形式) 、

style 總共有分四種,分別是 gently,abruptly,begin gently,end gently gently 的意思是溫和地,abruptly 的意思是突然地,也就是在執行動作時,

是慢慢的進行,或是快速的進行。選擇 gently 的話,表示動作在開始會結 束的時候都是慢慢的,選擇 abruptly 的話,表示表示動作在開始會結束的 時候都是快速的,流暢,沒有停頓的感覺。begin gently 和 end gently 則分 別在動作開始和結束的時候會慢下來。

asSeenBy(相對於某物的方向)

asSeenBy 是一個有趣的功能,意思是拿某物件的方向來當做自己的方向。

以下圖為例,直昇機 helicopter 在天上飛不可能永遠都保持水平的狀態囉!

像下圖的這架直昇機飛斜的,Up1 是直昇機的正上方,所以當我們設定 helicopter move up 1 metes 的時候,直昇機是往 Up1 的方向飛去,但如 果我們希望直昇機是向上朝天空的方向飛去呢?這時候我們就要用到 asSeenBy,將程式碼改寫成 helicopter move up 1 metes asSeenBy ground,也就是以 ground(地面)的上方為直昇機移動的上方,這樣直昇 就會往 Up2 的方向飛去。

Up1

Up2

試著將 duration0.5 秒改成 2 秒,比較 0.5 秒和 2 秒在執行上的差異有什麼不

同?

(25)

都做好了之後,我們要怎麼觀看結果呢?注意到了嗎?在 Alice 的左上角有個 Play 的按鍵!

看看剛剛完成的作品,你做好的兔子有沒有往蝴蝶的方向跳過去呢?

(26)

[概念說明]:

設計這個範例的目的是為了要讓你熟悉 Alice 的操作環境,知道如何從圖庫

(gallery)裏插入物件,並了解如何使用 Alice 裏的標籤,如 Do together、Do in order、if \ else 等,來編輯程式碼。如果你對這些標籤還不懂沒有關係,我們在 後面的章節中會有更詳細的說明。

在 Alice 中的每個物件都是 3D 模式,圖庫在你安裝的時候就會一併安裝在 Alice 的資料夾裏,如果你覺得 Alice 圖庫內的物件不夠你使用時,或是你在做這份教 材的範例時,在 Local Gallery 內找不到你需要的物件,你可以選擇 Web Gallery,進入分類中再點選你所需的物件。

[課後練習]:

1 請完成像下圖的 world,利用工具列中的移動和旋轉,來調整小島和魚的放置

位置,及魚朝向的方向。 (可參考 1-7 頁的工具列說明)

(27)

2 剛剛教的程式碼你都會了嗎?請設定蝴蝶向右飛走的動作,想想看要怎麼做?

向右飛

(28)

第二章 物件、屬性、方法、與事件

[學習重點]

本單元的目的在於使學生了解「物件」 、 「屬性」 、 「方法」 、 「事件」的定義,並能 將此概念對應到 Alice 的操作環境中。

一、定義

1、物件(objects) :

最簡單的定義是:物件是一個可被碰觸,看見,感覺的一個物品。在我們的 生活中充斥著許多物件:如房子、車子、時鐘、兔子、獅子、電話等…..。

2、屬性(properties) :

屬性就是物件的特徵,用以描述這個物件的外觀或反應其作用, 這些特有 的性質稱為「屬性」 。例如免子有長耳朵,大門牙,白色毛皮。

3、方法(methods) :

方法是物件的會做的動作。以兔子為例,他會磨牙,吃蘿蔔,跳躍,這些就 屬於兔子的方法。

4、事件(events) :

事件是「某事情的發生」 ,使得物件改變目前的動作或狀態。例如兔子本來 在「睡覺」 ,但是「獅子出現跑向兔子」 ,於是兔子就「跳」走了。因為這「獅子」

出現跑向兔子,讓兔子的動作由「睡覺」 ,轉為「跳」 ,所以「獅子出現跑向兔子」 ,

這就是屬於事件。

(29)

二、Alice 中的物件、屬性、方法、事件 1、物件:

在 Alice 的環境中,左上方有一個物件區,Alice 以樹狀結構顯示存在於 Alice 中的物件。World、camera、light 是每個新開檔案時,Alice 自動產生的物件;

兔子和蝴蝶則是自己新增的。

World

camera

light ground butterfly

2、屬性:

選擇「whiteRabbit」,下面再選擇 properties(屬性),則會顯示所有 whiteRabbit 的屬性。在這裏我們可以看到 whiteRabbit 的屬性有 color(顏色)、

opacity(透明度) 、vehicle(運載工具) 、fillingStyle(填充形式) 、pointOfView

(視野) 等等。

(30)

3、方法:

在 Alice 中,每個物件都有其內建的方法。我們不需要了解這些方法是怎 麼寫成的,我們只需要知道某個物件有什麼方法我們可以直接使用。

選擇「whiteRabbit」,下面再選擇 methods,則會顯示所有 whiteRabbit 的方法。在這裏我們可以看到 whiteRabbit 的方法有 move(移動) 、turn(轉 向) 、roll(旋轉) 、resize(重新調整大小) 、 say(說話) 、think(想) 、moveTo

(移向)等等。

(31)

補充說明:常用的 Methods 以下圖的場景為例

左邊 methods 右邊的程式編輯區

企鵝向右移動 0.5 公尺

企鵝向右轉 0.5 公尺

企鵝向右轉 0.5 公尺

※請注意 turn 和 roll 的不同,turn 是以垂直方向 為軸心旋轉,roll 是以水平方向為軸心旋轉

企鵝會變成原本的 1.5 倍大

企鵝說 hello

企鵝心裏想”I wonder may I be your friend?”

播放聲音

(32)

企鵝移到貓的位置上

企鵝向貓的方向移動一公尺

意思是說,如果這時候免子的面朝右,但是企鵝的 面卻是朝左的話,企鵝的面會跟著免子的面朝右。

讓企鵝站起來,如果這時候企鵝是躺著的

Methods 有兩種,像前面說明的 move、turn、roll 等等,是 Alice 中已經內 建好

d’s details 中選擇 create new method

的,但是有些我們需要的方法是 Alice 裏面沒有的,例如我們需要一個跳躍 的 method,但是在 Alice 中沒有 jump 這個 method,這時候我們可以自己新增 需要的 method。

方法如下:

(1)在 worl

(33)

(2)按下 create new method 之後會產生一個對話框,你可以在對話框中輸入 你要新增的 method 的名字,在這裏我們輸入 jump。

(3)你會發現在 world.my first method 的右邊多了一個名為 jump 的 method,

這時候我們就可以開始編輯這個 method 了。

(4)加入兔子向上跳和向下跳的動作

(5)編輯完 jump 之後要記得將 world.jump 放進 world.my first method 中,這 樣程式才會順利執行哦!因為當你按下 play 的時候,Alice 會先去檢察 Events 區域內有哪些 Events,Alice 內預設的 events 是 when the world starts, do world.

My first method,也就是說,當這個程式一開始執行的時候就會先執行 world.my

first method,所以如果你沒有把 jump 放在 world.my first method 中的話,Alice

是不知道要去執行 jump 的。

(34)

4、事件:

在 Alice 的右上方有個設定事件的區域,按下 create new event(創造新的 事件) 即可以新增事件,可以決定要觸發的事件是什麼,可以選擇由滑鼠觸 發或是由鍵盤觸發,或是設觸發條件。

設定事件 的區域

補充說明:常用的 events

‧When the world starts(當程式開始執行):

當 Alice 開始執行時,所執行的動作,這個動作有通常是任何一個你指定的 method。

‧When a key is typed(當有個按鍵被按下時):

當有個按鍵(如空白鍵,或方向鍵等等)被按下時,開始執行的動作。

‧When the mouse is clicked on something(當滑鼠按下某個物件時):

(35)

[動手試試看]

為了使你能更了解「物件」 、 「方法」 、 「事件」的概念,請你自己試試看下面 這三個動作。

(1)將兔子的左右腳加上淡粉色,蝴蝶顏色改成綠色。

(2)在右邊 create new event 中選擇 when the mouse is clicked on something

(當滑鼠點在某物件上) 。

(36)

(3)在 anything(任何物件)下拉式選單中選「whiteRabbit」 ,再選擇「the entire whiteRabbit」 (整隻兔子) 。意思就是指當滑鼠點在兔子身上的時候,程式 會執行的動作。

(4)接下來設定執行的動作,do 就是指要執行的 method,在這裏我們設定為

jump,如此一來,當使用者將滑鼠點在兔子身上的時候,兔子即會向上跳。

(37)

[課後練習]

1、下面總共有 3 個選項,請舉出他們分別具有什麼屬性和方法,並將你想到的 屬性和方法填入表格內。

物 件 屬 性 方 法

汽 車

時 鐘

2、餅乾是小海龜最愛吃的食物了。請你設計一個如下圖的 world,有一隻海龜,

一個小矮凳,矮凳上面有一個餅乾。使用 move(移動)這個 method(方法) , 將海龜移動到距離矮凳 2 meters 的地方,並且使用 turn to face(把臉轉向)

這個 method 讓小海龜面向餅乾。小海龜很高興有餅乾可以吃,於是對著鏡

頭揮揮手。

(38)

3、在冰天雪地裏有三個雪人,左邊是男雪人,右邊是女雪人,當男雪人看到女 雪人的時候,它發 ahem 的聲音引起女雪人注意,女雪人頭轉過去看男雪人,很 害羞的臉紅了,又把頭轉向右邊的女雪人,男雪人這時候也很不好意思,頭低低 的轉向另一邊了………(在 people 的分項下,可以找到 snowman(雪人)和 snowwoman(女雪人) ) 。

1 男雪人吸引雪人的注意 2 女雪人臉紅了…… 3 男雪人很不好意思的 轉過頭

4、有一隻袋鼠在溴洲內地四處尋找早餐,就在他四處尋覓的時候,看到一個 z 字型的標誌,於是他就照上牌子的指示。請寫一個 hopLeft 的 method,讓袋 鼠稍微向右轉向並且跳躍,。再寫一個 hopRight 的 method,讓袋鼠稍微向 左轉向並且跳躍,。最後在 World.my first method 裏交叉使用 hopLeft 和 hopRight 這兩個 methods 兩認,使袋鼠看起來像 Z 字型的跳躍,跳往標誌 那裏。 (你可以在 animals 裏找到袋鼠這個物件,在 Roads and Signs 裏找到 Z 字型標誌) 。

1 袋鼠向下蹲 2 袋鼠向上跳 3 袋鼠向下跳

(39)

右圖是 Z 字型標誌的特寫=>

5、凱莉是個年輕的業餘馬術師,這次他要準備一個騎著馬跳個柵欄的競賽。他 很緊張,所以不停的練習。請你在 world 裏新增兩個 methods,其中一個命 名為 gallop,讓馬和騎馬者都向前跳一步;另一個命名為 jump,是馬跳過柵 欄的動作,當馬跳過柵欄的時候,要讓馬的四肢都舉起來,看起來像真的跳 過柵欄一樣。 (你可以在 Animals 分類下找到 horse(馬) ,在 Buildings 分類 下找到 fence(柵欄))。

1 準備跳躍 2 向上跳

3 跳躍過柵欄 4 最後停止動作

(40)

第三章 參數 parameter

[學習重點]

了解參數的使用方法及使用時機。

[範例說明]甲蟲樂團 beetle

這個甲蟲樂團裏共有四個成員,讓每個人各表演一段音樂。輪到該表演的成 員會向上跳一次。當我們不用參數時,必須要寫四組相同的程式碼讓這四隻甲蟲 做相同的動作,有了參數之後,我們只需要寫一組程式碼,利用參數傳遞的方式,

就可以控制這四隻甲蟲做相同的動作。

[自己動手做]

步驟一:打開已經佈置好的情境的範例檔案。

請注意在 World’s details 中有四個聲

音檔。

(41)

步驟二:編輯程式碼

一、 新增方法,取名為 georgeSolo。

1、在這裏的每隻甲蟲都有自己的名字,現在我們先 編輯 georgeBeetle 演奏並且向上跳的程式碼。

2、這隻叫 george 的甲蟲會先做向上再向下跳的動作,同時演奏樂器,所以在 Do together 內放入 Do in order,在 Do inorder 內放進 move up 和 move down 的動作。

3、完成了 georgeSolo 的動作之後,將這個方法放進 world.my first method 裏,

如下圖。

4、接下來我們幫其他三隻甲蟲設定向上跳躍跟演奏樂器的動作,分別是

lennonSolo、paulSolo、ringoSolo。在 World 中設完這三個 methods 之後,

再去編寫 world.my First Method,使這四隻甲蟲可以由左往右分別開始動作。

(42)

5、請在下面這兩個方框中分別寫下你剛所寫的 paulSolo 和 world.my First Method 這兩部份的程式碼。

PaulSolo:

World.my First Method:

二、使用參數(parameter)

有沒有發現這四隻甲蟲的程式碼很類似?有沒有什麼方法可以使它更精簡?

這個時候我們可以使用”parameter”這個新的功能。

1、先在 world’s details 新增一個方法

(method),取名為 solo。

(43)

2、按下新增 parameter(參數) ,注意 要將 parameter 的 Type(型態)設定 為 object。

3、將 Do together 和 Do in order 放入 World.solo 中。

4、直接將 bandMember 拉進 Do in order 的區塊中。

(44)

5、這時候 Alice 會要求我們設定樂團成員(bandMember)的動作,把動作設 定為向上跳 1 / 2 公尺(move up 1 /2 meter)。

6 、 完 成 bandMember 的 move up 動 作 後 , 重 覆 剛 剛 的 動 作 , 一 併 將 bendMember move down 完成,對照你完成之後的程式碼和下圖是不是相符 合?

7、回到 world.my first method,把 solo 拉進 world.my first method 裏,因為我 們把 bandMember 這個參數的型態設為 obj(物件),所以這時候 Alice 會要 求我們設定傳給 solo 的物件。為了要讓 georgeBeetle、lennonBeetle、

paulBeetle、ringBeetle 這四隻甲蟲都各表演一次,所以將 solo 拉進 world.my

first method 裏的這個動作需要做四次。

(45)

8、完成之後如下圖,只需要寫一個 world.solo 的程式之後,透過傳遞參數,可 以把不同的成員名字傳給 world.solo,Alice 就可以知道這時候該讓哪隻甲蟲 表演。

三、新增另一個參數 music

甲蟲既然是表演樂器,那當然要來點音樂才逼真,現在利用新增一個 music 的參數,把樂器聲音名稱傳給 world.solo。

1、打開剛剛編完的 World.solo 的程式碼,新增一個 parameter,取名為 music,

因為是聲音,所以我們選擇 Other,再選擇 Sound。

(46)

2、加入聲音,先選擇 bassGuitar,放進 World.solo。

3、將 world.bassGuitar 用 music 取代。

(47)

4、完成後的 World.solo 如下圖,請注意 world play sound music more 是放在 Do together 裏,並不是放在 Do in order 裏。

5、再打開剛剛編輯的 world.my first method,現在的 world.my first method 和 剛剛的 world.my first method 有什麼不一樣?

我覺得不一樣的地方是….

6、在 music 右邊倒三角形的下拉式選單中,選擇分別相對應的樂器演奏聲音。

(48)

[概念說明]

參數(parameters)是讓兩個不同的方法(functions),彼此之間用來傳遞 所需要的數值。在本課的範例中,我們在 world.solo 裏新增了兩個變數,一個是 bandmember,另一個是 music。當 world.my first method 呼叫 world.solo 的時 候,world.my first method 必須傳遞 bandmember 和 music 這兩個參數給 world.solo,這樣 world.solo 才會知道現在是輪到哪個樂團成員表演。

重新再看我們剛編寫的程式碼(如下圖) ,在 world.my first method 裏,呼 叫了 world.solo,並且將 bandMember 設定成 geogeBeetle,music 設定成 World.bassGuiter,

當 world.solo 被呼叫的時候,它會自動將 bandMember 和 music 替換成 georgeBeetle 和 World.bassGuitar

對照上圖一起看,也就是說實際上它在執行時,已經變成了像下圖的程式 碼,所以當你將 bandMember 設定成 georgeBeetle,music 設定成

World.bassGuiter 的時候,就會是 georgeBeetle 執行表演動作並且往上跳一次。

Do together

World play sound World.bassGuitar more Do in order

georgeBeetle move up 0.5 meters duration = 0.5 seconds more georgeBeetle move down 0.5 meters duration = 0.5 seconds more

也就是說,當 my first method 取用 world.solo 的時候,my first method 會分別

(49)

bandMember=lennonBeetle、music= World.guitar;

bandMember=ringoBeetle、music= World.Drum;

bandMember=paulBeetle、music= World.saxophone;這些參數值傳給

world.solo 的 member 和 music,world.solo 會再根據所收到的參數值做不同的 動作。

請問將 bandMember 設定為 lennonBeetle,music 設定為 World.guitarSolo 時, World.solo 實際在執行時的程式碼為何?填入括號內

Do together

( )

Do in order

( )

( )

(50)

[課後練習]

1、現在我們來試試看別種型態的參數吧!在剛剛的範例中,每隻甲蟲都會向上跳 0.5 meter 再往下跳 0.5meter,修改範例,新增一個 parameter,取名為 height,

讓每隻甲蟲向上跳的高度都不一樣。

2、請設計一個如下圖情境,在一個池塘旁有四隻青蛙在做日光浴,這時候有一 條饑餓的蛇在池塘的四周徘徊,當青蛙一發現有蛇靠近的時候,它就跳進池 塘裏去。你必須替這四隻青蛙取四個不同的名字,並且利用傳遞參數

(parameters)的方式指定是哪隻青蛙跳進池塘裏。

1、池塘旁有五隻青蛙,有隻蛇朝青 蛙們爬去

2、第一隻青蛙轉向池塘

3、第一隻青蛙跳進池塘裏 4、蛇繼續朝青蛙們爬去

3、利用 Alice,可以設計一場魔術表演哦!請設計一個如下圖的場景,有個魔術 師,一個女助手,一張桌子,還有在魔術表演裏一定不可缺少的兔子囉!

魔術師的手先朝向女助手並向上舉起再放下,女助手會向上升起再降下,接

著魔術師的手再朝向兔子並向上舉起再放下,兔子會向上升起再降下。因為

這兩個動作是相同的,所以請你寫一個 method,利用傳遞參數的方式,將

(51)

移動的距離是不同的。 (在 People 這個分類裏可以找到 Magician(魔術師) ; 在 People 這個分類裏可以找到 girl(女助手) ;在 Web gallery 裏的 Furniture 這個分類裏可以找到;在 animals 這個分類裏可以找到 rabbit(兔子))

1 魔術師的手朝向女助手 並向上,女助手跟著向上 升

2 魔術師的手再朝向兔子 向上舉起,兔子跟著向上 升

3 魔術師的手放下,兔子 降下

4、如果能有個機器人來幫忙整理家裏是多麼棒的一件事啊!這個小孩的房間丟 了滿地的玩具,有個猩猩機器人看到這些玩具就把他收到櫃子去了。請你將 Alice 的場景佈置成如下圖的樣子:有個猩猩機器人,一個大的啞鈴,一個小 鹿布偶,一個小熊布偶。 (你可以在 SciFi 的分類下找到 gorilla robot(猩猩 機器人) 、在 Object 的分類下找到 barbell(大的啞鈴) 、Pinata(小鹿布偶)、

teddyBear(小熊布偶) )

你需要寫三個 methods,它們的功能分別是:

pickup(撿起) :機器人走到物品的旁邊把東西撿起來 putdown(放下) :機器人把手上的東西放下

putInCloset(放到櫃子裏) :機器人走向櫃子並且把櫃子的門打開 這個例題同樣的需要利用傳遞參數的方式,指定機器人要收哪樣東西,大的 啞鈴或小鹿布偶或是小熊布偶。

1、機器人走到物品的旁邊 2、把東西撿起來 3、機器人走向櫃子並且把

櫃子的門打開,把東西放

進櫃子裏

(52)

第四章 函數及數學表示式

[學習重點]

1 如何使用 function 得到我們自己想要的值 2 了解 boolean 的用法

3 知道什麼是比較表示式 4 對 if/else 有初步的概念

一、使用內建函數(function)

[範例一] 探測機器人

在月球上的探測機器人 spiderRobot。機器人偵測到右邊有石頭 rock,於是 頭向右轉,並往石頭的方向移動,而且 spiderRobot 移動的距離等於它和 rock 之間的距離,但是我們並不知道 spiderRobot 和 rock 之間的距離是多長,所以 這時候就需要用到 function,讓 Alice 幫我們計算兩者之間的距離。

1 在月球上有一台登陸器 和探測機器人,還有岩石

2 spiderRobot 朝向 rock 3 spiderRobot 朝 rock 走過 去,移動距離等於它和 rock 之間的距離。

[自己動手做]

步驟一:加入物件

1、你可以在 SciFi 這個分類中,找到 lunarLander 和 spiderRobot 這兩項物件。

2、你可以在 Nature 這個分類中,找到 Rocks 這項物件。

3、將物件佈置成如範例的情境。

(53)

步驟二:編輯程式碼

1、編輯 spiderRobot 向前移動的動作。

完成上個動作可看到程式碼如下,表示 spiderRobot 會向前移動 1 公尺。

2、使用內建函數 spiderRobot distance to

如果我們想要 spiderRobot 移到 rock 旁邊,也就是移動的長度等於

spiderRobot 和 rock 的距離,這時候我們就需要用到 functions。因為我們不 知道實際上 spiderRobot 和 rock 的距離,使用 functions 會自動告訴我們這 個距離值。

點選樹狀結構中的 spiderRobot’s,再選擇 Function 中的 distance to,將此

標籤移至 1 meter 的方框中,此時會出現一個下拉式選單,請在 object 中選

擇 rock。

(54)

完成後,你可以看到如下圖的程式碼。spiderRobot 所移動的長度,將會等 於 spiderRobot 和 rock 的距離

3、改變 spiderRobot 往前移動的方向

按下 play 之後,你發現 spiderRobot 是往哪個方向移動呢?有沒有照我們所 預期的,往 rock 的方向移動呢?沒有,對不對?所以我們現在在 spiderRobot 向前移動之前先做一個動作,就是讓 spiderRobot 面向 rock,怎麼做?

(1)選擇 spiderRobot 中的 method – turn to face 放在 move toward 之前:

(55)

(2)target (目標) 選擇 rock,這樣 spiderRobot 就會面向 rock,並且朝 rock 的方向移動。再按下 play 觀看執行結果。

----

4 、Alice 中物件的中心點

看看執行結果 spiderRobot 竟然 跑進 rock 裏去了,怎麼會這樣呢?這是 因為在 Alice 中,所有物件的距離都是 以物件的中心點起算的.

所以 spiderRobot 和 rock 的距離,

如右圖所示:

5 修正 spiderRobot 移動的距離

為了不讓 spiderRobot 跑進 rock 中,我們可以再針對程式碼做修正,縮短 spiderRobot 移動的長度。注意看下圖,

(1)選擇 rock 右邊的倒三角形

(56)

(2)先選擇 math

(3)再選擇 spiderRobot distance to rock -

(4)再選擇 1

(3)

(2) (4)

(1)

如果你的動作正確的話,你應該會看到如下圖的結果,下圖這行程式碼的意 思是:spiderRobot 向前移動的長度是,spiderRobot 到 rock 的距離再減 1

6、利用另一個內建函數 rock’s width

但是現在我們希望移動的長度不是 spiderRobot 到 rock 的距離再減 1,而是 spiderRobot 到 rock 的距離再減”rock 的寬度”。在 rock 的 function 中選擇 rock’s width,將這個標籤拉至數字 1 的方框中。

完成後如下圖:

7、完成,可以按 play 看執行結果是否正確。

(57)

[概念說明]

(一)內建函數

Alice 將大部份和物件有關的資料儲存在 functions(函數)裏,例如:

Proximity-

和距離相關的屬性 Size --

和長、寬、高,及大小相關的屬性 Spatial relation --

與其他物件的相對位置。如 to left of,在某物 件的左邊;to right of ,在某物件的右邊 Point of view --

此物件在 Alice 中的方位 Other --

其他無法歸類在前四項的屬性,如 the name of a subpart of the object(物件其中一部份的 名字)

像這種在 Alice 裏面已經自動建好的 functions(函數),稱為內建函數。我們可 以藉由使用 functions 獲得我們想要關於物件的資訊,例如使用 distance to 可以 得到 spiderRobot 和 rock 的距離,使用 spiderRobot’s width 可以得到

spiderRobot 的寬度等等。不同的 functions 會傳回不同資料型態的值,例如:

number(數字) :2 , 45 , 31

Boolean value(布林值) :True 或 False String(字串) : “hello world”

Object(物件) :a spiderRobot

(二)運算式

運算式是由運算元及運算子混合而成。例如下面這個運算式:

a + b * c

a 、b、 c 是運算元,+ (加號)、*(乘號)是運算子,在 Alice 當中提供四種常用

的運算子:+(加)、−(減)、*(乘)、/(除)。運算式可以在 Alice 的下拉式選單中選

擇。

(58)

選此倒 三角形

[範例二]

利用 if/else 設一個判斷條件,如果 spiderRobot 的高度小於 rock 的寬度的 話,spiderRobot 的脖子會先向上伸再向下縮。

1 spiderRobot 脖子向上伸 2 spiderRobot 脖子向下縮

[自己動手做]

1、先將 if/else 標籤拉進程式碼編輯區中,設定執行條件為 true。

(59)

2、選擇 world 中的 functions,

(1)將 a < b 這個標籤拉進 if 右邊 true 的方框中,

(2)先暫時將兩數 a 設為 1,

(3)b 設為 2

(3)

(1)

(2)

完成後,if 右邊的程式敘述應該如下圖

3、利用內建函數 spiderRobot’s height

(1)因為我們要設定的條件是 spiderRobot ‘s height < rock’s width,所以在

spiderRobot’s details 中選擇 spiderRobot’s height,在 rock’s details 選擇 rodk’s

(60)

width

(2)設定 < 右邊的值,將 rock’s width 拉進 < 右邊的方框裏

完成後可以看到 if 那一行的程式碼如下:

4 編輯 if 內的區塊

接下來再分別設定 spiderRobot 的動作,選擇 spiderRobot 中的 neck,再設定

move up 和 move down

(61)

5 到這裏你已經完成範例二了,按下 play 看看你的程式執行結果是不是和老師 示範的一樣?

[概念說明]

(一) 、控制結構

到目前為止我們所編輯的程式碼都是一定會執行的,但是有些區段的程式碼,我 們希望他在某種特定情況下才會執行,這時候我們就會需要用到控制結構,也就 是我們在前面所用到的 if / else 功能。If 的中文意思是「如果」 ,else 的中文意思 是「否則」 。if 後面那一行寫的是判斷條件,當條件成立的時候,Alice 會執行 if 後面那幾行程式碼的動作;如果條件不成立的時候,則會執行 else 後面程式碼 的動作,要注意在 else 的部份,可以什麼事不做,也就是 Do nothing。

以程式碼型態表示的話則是

If

Else

<

<你所設定的條件成立>

<去做某件事情>

做另一件事情>

以上面的例子來說(可以看下圖) ,當 subject = spider’s height < subject = rock’s

width 時,方框中 spiderRobot.neck move up 0.2 meters duration = 0.5 seconds

more 和 spiderRobot.neck move down 0.2 meters duration = 0.5 seconds more

這兩行程式碼才會執行,否則的話,就什麼事都不做。也就是說,當 spider 的

高度大於或等於的時候,spider 並不執行任何動作。

(62)

(二) 、關係運算子

在 World 的 functions 標籤中,我們可以看到有一個選項是”math”,在 math 中 有六個選項,分別是

a == b 當 a 和 b 的數值相等時,回傳 true 給 Alice a != b 當 a 和 b 的數值不相等時,回傳 true 給 Alice a > b 當 a 的數值大於 b 的數值時,回傳 true 給 Alice a >= b 當 a 的數值大於或等於 b 的數值時,回傳 true 給 Alice

a < b 當 a 的數值小於 b 的數值時,回傳 true 給 Alice a <= b 當 a 的數值小於或等於 b 的數值時,回傳 true 給 Alice

在這個範例中,我們所用到的關係運算子是 a < b,也就是說,這兩個數相比,

如果 a < b 時,則條件成立(true),Alice 便會執行在 if 區塊中的程式碼,也就是 spiderRobot.neck move up 和 spiderRobot.neck move down

二、自己新增函數 [範例三]

一顆在草地上滾動的球,而且球滾動的圈數是依照球滾動的距離來決定。例如當

球的圓周是 3.14 公尺,而滾動的距離是 10 公尺的時候,那麼球滾動的圈數大約

是 10/3.14=3.18 圈。

(63)

[自己動手做]

步驟一:加入物件

在 sports 的分類中,找到 volleyBall 這個物件,並加入在 Alice World 中 步驟二:編寫程式碼

1、計算球轉動的圈數

一顆球轉動一圈是轉動一個圓周長,那一個圓周長是多長呢?是 3.14 x 圓的直 徑。如果說,我們要讓一個球轉5公尺的話,那麼這顆球要轉幾圈呢?請你用一 個數學式子表示,並將這個式子寫在下面的方框裏。

一顆球轉動 5 公尺的圈數是:

2、新增自己所需的函數

在 Alice 中除了使用內建函數之外,我們也可以自己新增自己所需的函數,知道

怎麼算出球轉動的圈數之後,在 toyBall1’s details 中按新增函數的按鈕,將新增

的函數取名為 numberOfRevolutions,利用這個函數算出轉動的圈數,將這個函

數寫好之後,以後當我們使用這個函數時,不需要自己去計算球在 10 公尺的時

候滾動幾圈,或是球在 25 公尺的時候滾動幾圈,函數會自動幫我們算出來,並

將算出來的值傳給使用這個 function 的 method。

(64)

在這個函數中新增一個變數,取名為 distance(距離),利用這個變數來接收球 要移動的距離。下面的 type 是決定 distance 這個變數的型態,因為距離是數字,

所以我們選擇 Number。

3、接下來我們把剛剛的公式編進函數中。編輯順序是由左而右,也就是先選擇 除號(\)再選擇乘號(*)。

(1)先在 1 右邊的下拉式選單中選擇 math。

(2)再選擇 1/,在這裏我們不用在意為什麼是 1,可以稍後再設定這個數值。

(3)設定 b 的值,選擇 1

(3)

(1)

(65)

4、再來是設定右邊乘號(*)的值

(1)在 1 右邊的下拉式選單中選擇 math

(2)再選擇 1 *,在這裏我們不用在意為什麼是 1,可以稍後再設定這個數值。

(3)設定 b 的值,選擇 1

(1)

(3)

(2)

(4)完成之後,你的 Return 那行程式碼應該會出現如下圖的形式

5、編輯 functions 內的數學式

(1)現在來把該填的數字填進方框裏,將 distance 這個標籤拉進最左邊 1 的框

框中

(66)

(2)再設定第二個 1 為 3.14,在下拉式選單中,選擇 other,會出現一個數字 鍵盤,在鍵盤上按 3.14

6、使用內建函數 toyball1’s width

可是我們並不知道一個球的寬度是多少?所以我們可以利用內建函數 toyball1’s width(球的寬度) ,讓 Alice 告訴我們球的寬度。

7、編輯讓球轉動的 method

寫好計算球轉圈數之後,現在開始寫讓球「轉動」的動作。

(1)在 world.my first method 裏分別設定 toyBall1 向前移動(move forward)

和向前轉動(turn forward)的動作。因為球是同時向前移動又向前轉動,

所以我們需要先放入一個 Do together 標籤。在 move forward 要設定的是 meters(公尺) ,也就是距離;在 turn forward 中要設定的是 revolution,

一個 revolution 是一個 360 度,也就是一個圓周長。在這裏我們一樣都先

設為 1 meter 和 1 revolution。

(67)

(2)由於我們要讓球向前移動,所以需要在 move forward 的後面再設定 asSeenBy 為 ground,也就是以 ground 的前方為球的前方。到這邊為止,你可 以按下 play 看看球是如何移動的,球會向前移動一公尺並滾動一圈。

(3)將剛剛編輯好的 numberOfRevolutions 放進 turn forward 的後面。

4)完成之後如下圖,你可以自由更改球移動的距離,

toyball.numberOfRevolutions 這個 function 會根據距離的長短回傳滾動的圈數 給 World.my first method,turn forward 就利用這個回傳值來決定球要滾幾圈。

要注意的是,move forward 的距離和你傳給 toyball.numberOfRevolutions 的

distance 要一致,如下圖的圈圈所示。

(68)

[概念說明]

前面我們介紹完了利用 Alice 內建的 functions 來得到我們想要的資訊,但 是如果我們想要的資訊,Alice 裏面沒有的話,就必須自己新增一個 function。

在 Alice 中,functions 和 methods 其實很像,不同的地方是,methods 功用在 於執行動作,而 functions 在於回傳數值,但並不會使物件動作,也就是說 functions 並沒有辦法讓物件進行 move、turn、roll 等的動作。但是可以使用 functions 確認 world 的狀態,以便決定該使用何種 method。

在每新增一個 function 的時候,我們都會看到裏面有一個 return 標籤,你 會發現,這個標籤是你怎麼移都移不掉的!因為 functions 一定要有一個回傳 值,傳給 method,有了這個回傳值之後,method 才能進行之後的動作。回傳 值可以是數值(1,2,50...)、布林值(true ,false) 、物件(object)等。在這個範例中,

從 return (distance / 3.14 * rollball1’s width)這行可以知道

numberOfRevolutions 所回傳的資料型態是數值,因為 distance / 3.14 * rollball1’s width 最後算出來的值是數字

[課後練習]

1、利用剛剛的第一個 spiderRobot 範例改寫,在 spiderRobot 向 rock 移動之後,

使 spiderRobot 面向 lunarLander(月球登陸器),並使 spiderRobot 向前移動 spideerRobot 和 lunarLander 的一半距離

lunarLander

參考文獻

相關文件

為此,國立中正大學防制藥物濫用教育中心與台灣藥物濫用防治研究學會,在教育部學生事 務及特殊教育司之支持下,將於 2019 年 10 月

本教材設定使用對象為國中數學低成就的學生,考量《補救教學基本學習內 容》 , 並配合不同學習狀態的學生,發展了兩套教材:「精進教材」適用於百分等 級

接收機端的多路徑測量誤差是GPS主 要誤差的原因之一。GPS信號在到達 地球沒有進到接收機之前,除了主要 傳送路徑之外,會產生許多鄰近目標 反射的路徑。接收機接收的首先是直

• 利用緊扣 課程設計 讓同學做討論,使同學 必須要讀過內容才能針對議題發表意見,這 樣不只讓教師知道學生的學習情況,也能慢

工作紙 合作學習 同質分組 腦基礎 電子學習 自主學習 異質分組 翻轉教室 生活應用 提問技巧 探究式..

● 每間學校訂購 myTV SUPER 應用程式版 /網頁版 通行證最 低限額: 50張。.. 1 OTT 網路串流平台

 TPR教學法是一種利用肢體動作和聲音 連結的直覺教學法,研究發現TPR教學

 智能電話 、平板電腦的出現  無線網絡普及.  小班教學優化課堂