【正文】
實現(xiàn)代碼如下: public boolean hasWin(int r, int c) { ChessType chessType = chessMap[r][c]。 (chessType)。 int count = 1。 ( 1)縱向搜索,檢測是否有相同五子連成一線: for (int i = r + 1。 i r + 5。 i++) { if (i = ) break。 if (chessMap[i][c] == chessType) { count++。 } else break。 } for (int i = r 1。 i r 5。 i) { if (i 0) break。 基于 Android 平臺五子棋游戲的設計與實現(xiàn) 22 if (chessMap[i][c] == chessType) count++。 else break。 } // (count + +1)。 if (count = 5) return true。 ( 2)橫向搜索,檢測是否有相同五子連成一線: count = 1。 for (int i = c + 1。 i c + 5。 i++) { if (i = ) break。 if (chessMap[r][i] == chessType) count++。 else break。 } for (int i = c 1。 i c 5。 i) { if (i 0) break。 if (chessMap[r][i] == chessType) count++。 else break。 } // (count + +2)。 if (count = 5) return true。 ( 3)反斜向搜索,檢測是否有相同五子連成一線: count = 1。 for (int i = r + 1, j = c + 1。 i r + 5。 i++, j++) { if (i = || j = ) { break。 } if (chessMap[i][j] == chessType) count++。 else break。 基于 Android 平臺五子棋游戲的設計與實現(xiàn) 23 } for (int i = r 1, j = c 1。 i r 5。 i, j) { if (i 0 || j 0) break。 if (chessMap[i][j] == chessType) count++。 else break。 } // (count + +3)。 if (count = 5) return true。 ( 4)斜向搜索,檢測是否有相同五子連成一線: count = 1。 for (int i = r + 1, j = c 1。 i r + 5。 i++, j) { if (i = || j 0) break。 if (chessMap[i][j] == chessType) count++。 else break。 } for (int i = r 1, j = c + 1。 i r 5。 i, j++) { if (i 0 || j = ) break。 if (chessMap[i][j] == chessType) count++。 else break。 } // (count + +4)。 if (count = 5) return true。 return false。 } 重新開始 此時再次點擊屏幕,則會出現(xiàn)重新開始界面 。 點擊重新開始,可以重新開始本局游戲。 基于 Android 平臺五子棋游戲的設計與實現(xiàn) 24 圖 重新開始 該功能的實現(xiàn)代碼如下: public void reStart(){ initChess()。 gameOver = false。 } new ( context ) .setTitle ( 提示 ) .setMessage( 游戲已結束 ,是否重新開始 ? ) .setPositiveButton( 確定 , new () { @Override public void onClick(DialogInterface dialog, int which) { reStart()。 } }) .setNegativeButton( 取消 , null).show()。 } ()。 基于 Android 平臺五子棋游戲的設計與實現(xiàn) 25 return (event)。 棋子類 在算法中,將棋子分為三種狀態(tài),分別是 活、死和半活狀態(tài),為系統(tǒng)的評分系統(tǒng)做準備。實現(xiàn)代碼如下: public enum ChessStatus { ALIVE, DIED, HALFLIVE} 棋盤上的棋子分為三種,一種是白色, 一種是黑色,另外一種是空,所以這三種狀態(tài)用代碼表示如下: enum ChessType { NONE, WHITE, BLACK } 輔助評分類 此類是用來輔助 αβ剪枝算法的判定計算,用來計算下一步棋子的權重,并依此來選擇下一步的落子點,提高 AI 智能程度。其實現(xiàn)代碼如下: public class ScoreTable { private ScoreTable() {} public final static int FIVE = 100。//成 5 public final static int DOUBLE_ALIVE_FOUR = 99。//雙活 4(分析對手用 ) public final static int ALIVE_FOUR_AND_DEAD_FOUR = 98。//活 4死 4(對手分析用 ) public final static int ALIVE_FOUR_AND_ALIVE_THREE = 96。//活 4活 3(分析對手用 ) public final static int ALIVE_FOUR_AND_DEAD_THREE = 95。//活 4死 3(分析對手用 ) public final static int ALIVE_FOUR_AND_ALIVE_TWO = 94。//活 4活 2 public final static int ALIVE_FOUR = 93。//活 4 public final static int DOUBLE_DEAD_FOUR = 92。//雙死 4 public final static int DEAD_FOUR_AND_ALIVE_THREE = 91。//死 4活 3 public final static int DEAD_FOUR_AND_ALIVE_TWO = 90。//死 4活 2 public final static int DOUBLE_ALIVE_THREE = 80。//雙活 3 public final static int ALIVE_THREE_AND_DEAD_THREE = 70。//活死 3 public final static int HALF_ALIVE_FOUR = 65。//半活 4(類似 ○○ ○形 ),優(yōu)先級小于活 4 public final static int ALIVE_THREE = 60。//活 3 public final static int DEAD_FOUR = 50。//死 4 public final static int DOUBLE_ALIVE_TWO = 40。//雙活 2 基于 Android 平臺五子棋游戲的設計與實現(xiàn) 26 public final static int DEAD_THREE = 30。//死 3 public final static int ALIVE_TWO = 20。//活 2 public final static int DEAD_TWO = 10。//死 2 public final static int SINGLE = 0。//單個 } 開始控制類 該類用來控制游戲開始的方式及進入游戲主體的邏輯。主要代碼如下: public class StartActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { (savedInstanceState)。 ()。 findViewById().setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Loading()。 } })。 } private void Loading() { Intent intent = new Intent()。 (, )。 startActivity(intent)。 ()。 } 主要交互類 用來控制游戲界面交互相關事件。主要代碼如下: public class MainActivity extends Activity { private Screen screen。 private GameView gameView = null。 @Override protected void onCreate(Bundle savedInstanceState) { (savedInstanceState)。 ()。// 得到屏幕的大小 gameView = new GameView(this)。 setContentView(gameView)。 基于 Android 平臺五子棋游戲的設計與實現(xiàn) 27 } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu。 this adds items to the action bar if it is present. // getMenuInflater().inflate(, menu)。 (重新開始 )。 (退出 )。 return true。 } @Override public boolean onOptionsItemSelected(MenuItem item) { if (().equals(重新開始 )) { ()。 } else if (().equals(退出 )) { finish()。 } return (item)。 } 基于 Android 平臺五子棋游戲的設計與實現(xiàn) 28 5 系統(tǒng)測試 軟件測試 在此游戲的各模塊基本功能都已實現(xiàn)后,開始進行軟件測試,以求能夠保證程序完整運行的同時,還能 夠經受住時間的檢驗。 軟件測試簡介 軟件測試是使用人工操作或者軟件自動運行的方式來檢驗它是否滿足規(guī)定的需求或弄清預期結果與實際結果之間的差別的過程。 它是幫助識別開發(fā)完成(中間或最終的版本)的計算機軟件(整體或部分)的正確度、完全度和質量的軟件過程 [12]。 軟件測試原則 1.測試應該盡早進行,最好在需求階段就開始介入,往往需求分析會與客戶要求產生差異,這是軟件開發(fā)過程中的最大錯誤。 2.由于自我認知的差異,編程人員應該避免檢查測試自己的程序,軟件測試應該由第三方來負責,以用戶的 身份進行測試。 3.設計測試用例時應考慮到各種情況。例如,合法的輸入和不合法的輸入以及各種邊界條件,特殊情況下要制造極端狀態(tài)和意外狀態(tài),如網絡異常中斷、電源斷電等。 4.應該重點注意測試中的群集現(xiàn)象。 5.對錯誤結果要進行一個確認過程。一般由 A 測試出來的錯誤,一定要由 B 來確認。嚴重的錯誤可以召開評審會議進行討論和分析,對測試結果要進行嚴格地確認,是否真的存在這個