黃建 段志舉 陳杉杉 周紹景 溫志雄



摘要:本文主要闡述以面向對象的程序開發語言,Android Studio為開發工具, 基于Android平臺設計開發一個五子棋游戲。本程序中設定了黑白兩方的對戰模式,并進行輸贏方的判定。
關鍵詞:五子棋;Android;游戲開發
中圖分類號:TP317 文獻標識碼:A 文章編號:1007-9416(2020)01-0161-02
0 引言
五子棋是一種兩人對弈的純策略型棋類游戲,起源于中國古代,它容易上手,老少皆宜,是全國智力運動會競技項目之一。隨著近幾年來使用Android手機的用戶不斷增加,Android平臺游戲憑借其可玩性高、上手容易、游戲穩定、交流方便和擴展性高等特點受到更多人的喜歡[1]。本文將基于Android平臺設計一個五子棋游戲,實現黑棋玩家與白棋玩家對弈并判定輸贏。
1 應用設計分析
1.1 應用功能分析
游戲開始時,由黑子開局,將一枚棋子落在棋盤一坐標上,然后由白棋落子,如此輪流下子,直到某一方首先在棋盤的豎、橫或斜三方向上的五子連成線,則該方該局獲勝。功能劃分如圖1所示,(1)開始;(2)黑棋或白棋落子;(3)勝負判斷;(4)重玩;(5)任意一方悔棋;(6)退出游戲。
1.2 應用邏輯分析
五子棋游戲邏輯分為四個部分:黑棋下、判斷黑棋是否獲勝、白棋下、判斷白棋是否獲勝;在判斷獲勝的黑白子方法相同,所以只需完成黑棋下、白棋下、判斷獲勝三個部分。
1.3 方法設計
onTouch()負責監聽觸摸屏幕事件調用悔棋、重玩等功能,判斷玩家觸摸棋盤是否符合五子棋規則,goBack()實現悔棋功能,rePlay()清空所有棋子數據實現重玩游戲功能,checkWinner()判斷勝負。
2 應用關鍵功能實現
2.1 應用界面繪制
五子棋界面的開發主要在Activity中使用自定義View完成。在自定義View中基于Canvas重寫onDraw()呈現圖像、文字、線條等二維圖形和坐標。
2.1.1 棋盤繪制
在ChessFiveView類中,定義繪制線條的起始點x0、y0,間距D,最大行數maxRows如圖2所示,最大列數maxColx如圖3所示,復寫父類的onDraw方法,設置畫筆顏色為黑色,使用for循環調用drawLine方法即可繪制出垂直交叉的棋盤線如圖4所示。
2.1.2 棋子繪制
重寫onTouch方法監聽玩家觸摸事件,通過event即可獲取玩家手指觸摸棋盤的x、y值。根據棋盤線條的繪制規則進行運算,用對應的棋子占據該位置。使用三目運算符更換下一個棋子類型,調用postInvalidate()方法重新繪制界面,將棋子繪制在棋盤上。當使用postInvalidate()方法后,在onDraw()方法中根據二維數組行列號繪制棋子,如圖5所示。
2.2 應用功能實現
2.2.1 悔棋功能
在goBack()方法中從已下子對象數組中取出最后的一個元素lstStep.get(n-1),獲得lstStep中當前行和列的信息,將對應位置的二維數組清零chess[row][col]=0,使用postInvalidate方法重新畫圖,把最后一個元素移除lstStep.remove(n-1)。
2.2.2 重玩功能
在rePlay()方法中用for循環將chess[row][col]數組數值清零,重置棋子類型和勝負,并重新畫圖。
2.3 五子棋勝負判斷
checkWinner()中給定一個點、一個方向、一個相對坐標值,就能得到一個二維坐標。將坐標代入當前棋盤數組chess中,保存對應位置每個棋子的類型。在游戲中,每當玩家下一步棋后獲取該棋子,判斷其橫、豎、正斜、反斜4個方向是否符合贏的條件[2]。若某一方向同類型棋子大于等于5,則獲取當前棋子類型進行勝負判斷,游戲結束。
參考文獻
[1] 衛少林,衛文學.基于JavaScript的人機五子棋游戲的設計與實現[J].現代計算機(專業版),2016(25):58-62.
[2] 彭健,陳蘭蘭.基于Java語言開發五子棋游戲項目的教學設計與實踐[J].江蘇科技信息,2016(33):47-48.