使用清單和廣播建立兩個角色間的對話

讓角色說話

在Scratch的程式設計中,對話是經常被使用的功能,傳統使用說話的方法,是透過以下的方式,循序來完成:

這樣的做法如果要說的內容很多的話,就會發現積木的長度太長了,程式會變得不好維護。而且最嚴重的問題是,如果在新增了很多(例如超過100句話)的說出積木之後,臨時想要說話的速度要加快一點,想想看要修改100個積木中的秒數,會是多麼煩瑣的事?!

利用清單來簡化角色說話的程序

因為我們已經會使用清單了,所以可以把這樣的作業利用清單來完成。首先,建立一個清單變數dialog,然後把所有要說的話放在這個清單中,如下所示:

接下來,就是我們所熟悉的,利用一個迴圈把所有的話都說出來,程式積木如下:

同學們可以仔細想一下這個程式,如果要說的內容有所改變的話,此程式積木內容是否需要跟著改變呢?

新增一個角色

現在讓我們新增加一個角色,讓他們可以完成對話的功能。舞台的介面如下:

接著把dialog改為dialogA,然後新增一個清單叫做dialogB,清單的資料項目則改為對話的內容,如下所示:

因為把資料加入清單是屬於初始化的操作,因此在哪一個角色中都是可以使用的,我們把它放在貓咪的程式碼中,執行之後,舞台中即可看到兩個清單的內容,如下所示:

因為有兩個清單,我們希望每個角色各自負責說明自己的清單中內容。看前面不一樣的地方是,之前的例子是一口氣把所有的清單都說完,因此只要使用一個重複迴圈就可以了,但是,現在的情況是,每個角色各講一次,因此我們需要有兩個索引變數各自指向目前正要說出的清單索引值,在此,我們設計一個為indexa,另外一個則是indexb,一開始都要把它們設定為1,也就是要開始說第一句話。

開始來進行廣播

啟始對話的事件,以貓咪為主,因此我們讓貓咪的角色被點擊事件中加入以下的程式積木:

上述的程式因為是初始化用,所以別忘了要把兩個索引變數都設定為1喔。

在說出一句話之後,別忘了要把自己的索引值加1,表示接下來如果要說話的話,是下一句話喔。

貓咪被點擊之後會發出一個叫做「boysay」的訊息,此時,另外一個角色就不需要任何人點擊它,而是等著接收「boysay」訊息,如下所示:

同學們有看到講完一句話之後改發出「catsay」訊息了嗎?所以,很明顯的,在貓咪那邊就要再建立一個「當收到訊息catsay」的事件,如下所示:

問題與討論

執行上述的程式是可以順利地把話講完了,但是請仔細觀察,程式似乎是有哪裡不對勁,同學們看出來了嗎?

那,這個問題該如何解決呢?