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