如果只是把棋盤和棋子畫出來並沒有什麼有趣的,真正要和玩家互動,則當玩家在畫面上按下滑鼠按鍵的時候,才是需要開始判斷到底是按到了哪一個棋子,以及要做出什麼樣的互動關係。在前面的例子中,我們使用分身的功能把棋子依序放在舞台上,然後偵側任一個角色是否被按下了,如果被按下的話,就使用蓋章的功能覆蓋原有的角色,然而重要的是,在玩家選擇了角色的時候,如何判斷他是選了哪一個角色?

其中有一個方法是檢查玩在在按下滑鼠按鍵時的 (x, y)座標位置,然後依據這個位置去換算出究竟是按到哪一個格子。回想當初在放置棋子的時候,我們使用了以下的式子:

這個式子隱含了最左下角的那個棋子位置是(-80, -80),然後每隔80個點放置一個棋子。棋子的放置順序如下所示:

最左下角的那個棋子的中心位置是(-80,-80),但是它的最左下角座標位置則是(-100,-100),因此我們可以把它切成3×3的格子如下:

顯然我們要做的事就是當滑鼠按下去的時候,把當時的座標換成轉換成這些格子的數字,就可以知道是哪一個角色被按下去了。以x座標來看,滑鼠在此角色的範圍內按下按鈕再加上100,就是它和最左側的距離,把它整除以66,就可以得到它是處於第幾欄(col),同理,以y座標來看,做同樣的運算就可以得到它是位於第幾個列(row),有了列和欄,只要再執行row*3+col,就可以知道是第幾個角色被點擊下去了。為了瞭解運算的過程,在程式中需建立兩個變數分別是mx, my,用來記錄滑鼠被按下去時的(x, y)座標,還用row和col,分別用來記錄是第幾列和第幾欄,資料變數設定如下:

然後在角色被點擊的事件中,加上如下所示的運算:

以下是執行的結果:

可以計算出正確的列和欄之後,就可以把被點擊的角色狀態填入相對應的列表中。先加上一個chessno變數用來記錄是哪一個棋子被選中,算式如下:

執行結果如下:

然後再定義一個清單變數chessno,一開始的時候把chessboard的內容都清為-1,如下:

然後把計算到的chessno加上1(因為清單是從1開始算的),把turn這個變數的內容放到對應的清單元素中:

如此就完成了。以下是執行的結果:

有了chessboard這個清單掌握目前的棋盤狀態之後,下一步就是可以藉由檢查清單的內容來判斷遊戲的結果了。

 

(271)