使用Scratch製作棋類遊戲有一些挑戰,主要是因為棋子非常多,而且都是以二維平面的方式來排列,在操作的時候經常需要瞭解目前棋盤上的狀況,如果不配合變數以及清單的使用,往往無法達成想要的效果,因此接下來的單元,就來介紹如何完成一個簡單的棋盤,可以提供雙人對戰的功能。首先來看一下成果影片:

如影片上所看到的,在棋盤上有兩個主要的角色,分別是每一個棋子以及一個Replay按鈕。Replay按鈕比較簡單,只要有人按下它,就重新整理棋盤即可,而棋子的部份,雖然看起來有9個,其中都是由同一個角色來產生的分身,因此只要一個角色就可以了,但是此角色需要有3種造型,這些造型需要自行準備,其外型分別如下所示:

因為每一個造型都有其代表的意義,因此分別命名為s0, s1, s2,這些造型名稱在接下來的程式中會使用到。在這個範例中,我們將使用分身的方式來建立每一個棋子,而且是在程式一開始執行的時候就把棋子放上去,因此程式積木如下:

在上面程式積木中同學們應該會發現有一個叫做counter的變鷜,它主要的目的是為了要記錄在分身產生的過程中,目前是在處理的是第幾個分身,除了這個變數之外,為了記錄目前是那一邊在下棋也需要有一個變數,因此在目前的程式設計中,需要有2個資料變數,如下所示:

因為不同的分身放的位置是不一樣的。而當然,一開始要先把本尊隱藏起來。在分身產生之後,真正決定要放在什麼位置,是由分身自己來決定。所以接下來需要建立一個回應當分身產生之後要做的事件程式,如下:

請留意一開始要把造型先確保是s0,顯示出來之後再計算出應該要呈現的位置,最後別忘了要把counter加1,下一個分身才可以放在不同的位置上。在上面的例子中,我們假設以80為間隔,而第一個分身(counter=0)是出現在左下角(-80,-80)的位置。

在所有的棋子都佈置好了之後,接下來就是每一個棋子本身被點擊的時候要根據目前是誰該下棋來決定要顯示的是造型s1還是造型s2,也就是當角色被點擊的時候,要先判斷變數turn中的值,依目前是0或是1來決定,程式積木如下:

在確定顯示的造型之前,別忘了要另外改變turn的內容,也就是宣示要換下一個玩家了。

至於「Replay」按鈕要如何實作呢?要注意的是,因為棋子目前都已經在棋盤上了,所以並不需要重新再產生新的棋子,唯一要做的就是通知每一個分身要重新玩,在此以廣播的方式來達到這個功能,也就是在Replay按鈕被點擊之後,立即廣播「replay」訊息,如下所示(別忘了turny變數也要設定為0):

而在分身之內也要有一個回應的動作,別忘了現在有9個分身,但是每一個分身都會處理自己的事,所以只要一小段程式積木就好了。

到此就算是完成基本的井字棋棋盤的功能,下一步,就是要完成判斷勝負的工作,同學們可以自己挑戰看看喔。

(1303)