延續上一個發牌程式的內容,假設我們想要做到讓玩家可以在發完牌之後要求指定的牌(最多5張)進行換牌的操作,在介面上是讓玩家在點擊任一張牌時即讓該張牌翻到背面,此時如果按下「換牌」的按鈕時就把所有被翻到背面的牌從新發給新的牌,首先需要把介面加上一個換牌的換鈕:
為了接下來檢視牌面內容的能,在此我們先準備了一個整數的清單用來記錄目前牌面的現況,使用之清單變數如下:
其中cardsValue就是用來記錄目前已發牌的牌面內容的,還記得另外兩個的用途嗎?cards用來放所有的牌(按鈕型態),而deck則是用來放整副牌的清單。多了cardsValue這個清單,我們的Screen初始化事件和「重新發牌」按鈕被點擊的事件內容就要分別改為如下的樣子:
多了把所有變數清空,以及把清單加上預設值的功能。不知各位同學有沒有發現,其實這兩個事件做的內容一模一樣?所以其實是可以先建立一個程序,然後再加以呼叫即可,程序如下:
這樣做事情就單純多了。接著在發牌的按鈕點擊事件中,除了原有的改變牌面cards清單的內容之外,還多了改變cardsValue的相對應內容:
當然別忘了,當有人點擊牌面的時候,要有把牌翻面的功能:
還有長按事件翻回原來牌面的功能:
由於在翻牌的時候程式會順便把cardsValue清單中的內容一併換成0,因此當使用者按下「換牌」按鈕的時候,我們要做的就是從這個清單中去找出內容為0的項目,然後把在deck清單中的第5個之後的牌依序拿來替換在cardsValue清單中的內容,以及在cards中相對應的那些牌的牌面檔案就可以了。
在這個事件中我們使用的deckIndex這個變數用來記錄目前在deck中可以拿來補牌的那個位置,而一定要記得的是,在補完牌之後要把deckIndex的值加以,以避免每次都補到同樣的牌。在這個例子中,我們把deckIndex設定為區域變數,每一次換牌的時候都從6開始,由此可知,不管你按下幾次換牌的按鈕,都會從6開始補牌喔。因此,為了避免重複換牌,我們可以在init程序中以及換牌動作之後加上一個積木讓這個換鈕不能再按了:
當加了這個積木,那麼在發牌的按鈕中也要加上把它設定為啟用狀態的積木才行喔,積木如下所示:
One thought on “【APP Inventor】撲克牌補牌程式”