書名: 瘋狂Java實戰演義作者名: 楊恩雄 麥凱翔編著本章字數: 1152字更新時間: 2018-12-27 17:17:01
1.4 棋盤類實現
在此類中,主要是用一個String[][]類型的二維數組board去保存棋盤,board[i][j]代表棋盤的某個位置(i代表x坐標,j代表y坐標),如果此位置沒有棋子,默認值為“十”,如果有棋子,則board[i][j]的值為“●”或者“○”。用一個不可改變的常量BOARD_SIZE來表示棋盤的大小,所以保存這個棋盤的是一個BOARD_SIZE?BOARD_SIZE的二維數組。圖1.3描述了為什么需要使用一個二維數組來代表一個棋盤。如果把棋盤的一列當做一個數組,那么N列的棋盤就是一個二維數組,用數組能很好地存儲與表現這個棋盤。

圖1.3 棋盤與數組的關系
1.4.1 初始化棋盤
在1.3節中介紹過,此類主要是實現棋盤初始化、輸出與更新,本節便用代碼一步一步地實現各個功能。首先我們需要初始化棋盤的實現,看以下代碼片段。
代碼清單:code\gobang\src\org\crazyit\gobang\Chessboard.java
public void initBoard() { //初始化棋盤數組 board = new String[BOARD_SIZE][BOARD_SIZE]; //把每個元素賦值為“十”,用于控制臺輸出棋盤 for( int i = 0 ; i < BOARD_SIZE ; i++ ) { for( int j = 0 ; j < BOARD_SIZE ; j++ ) { board[i][j] = "十"; } } }
上面的代碼中,BOARD_SIZE代表棋盤的大小,用一個String[][]類型的二維數組來代表棋盤,創建此數組后,通過迭代將各個數組元素的值賦為“十”來初始化棋盤。創建了棋盤數組后,如果需要定位到棋盤的某個位置,只需要得到棋盤數組的一維值與二維值即可,例如處理玩家下棋動作的時候,可以將數組中具體的某個“十”替換成具體的棋子字符串。
1.4.2 輸出棋盤
輸出棋盤,只需將Chessboard的board屬性(二維數組)的每一個值打印到控制臺中。要做到更好的可擴展性,我們可以在二維數組中存放棋子對象,而不是簡單的字符串,而存放在二維數組中的每一個棋子對象,都可以實現某個棋子接口或者繼承棋子的抽象類。當然,在本章我們為了簡單起見,只在該二維數組中存放需要打印的字符串,打印時只需得到具體的某個二維數組的元素即可。
代碼清單:code\gobang\src\org\crazyit\gobang\Chessboard.java
public void printBoard() { //打印每個數組元素 for( int i = 0 ; i < BOARD_SIZE ; i++ ) { for( int j = 0 ; j < BOARD_SIZE ; j++ ) { //打印后不換行 System.out.print( board[i][j] ); } //每打印完一行數組元素就換行一次 System.out.print("\n"); } }
棋盤的輸出與棋盤的初始化相類似,都要遍歷保存棋盤的數組,只不過每遍歷到一個元素都要輸出,注意這里的輸出方法用的是System.out.print()而不是常用的System.out.println(),這是因為System.out.println()方法是輸出后自動換行的,如果使用此方法,便達不到我們需要的效果,棋盤的輸出效果如圖1.4所示。

圖1.4 控制臺五子棋的棋盤
打印出來的效果,就好像在控制臺中出現了一個棋盤。
1.4.3 獲取棋盤
在Chessboard中提供了一個getBoard方法,用于返回本對象的棋盤二維數組,該方法一般在游戲類GobangGame中調用,游戲類得到棋盤的二維數組,可以用來判斷棋盤中的某一個位置是否有棋子或者游戲是否勝利。
getBoard方法只需將本對象中的board(二維數組)返回即可,代碼如下。
代碼清單:code\gobang\src\org\crazyit\gobang\Chessboard.java
/** * 返回棋盤 * @return 返回棋盤 */ public String[][] getBoard() { return this.board; }
至此,棋盤類的幾個方法都已經實現,該類的主要功能是創建棋盤、打印棋盤等,實現的過程中涉及了一些Java語言的基本操作,例如嵌套循環、創建二維數組等。在下面的章節中,我們將實現游戲的核心部分。
- 虛擬儀器設計測控應用典型實例
- 傳感器技術實驗教程
- Getting Started with Clickteam Fusion
- PIC單片機C語言非常入門與視頻演練
- Matplotlib 3.0 Cookbook
- 智能工業報警系統
- 完全掌握AutoCAD 2008中文版:綜合篇
- Splunk Operational Intelligence Cookbook
- 愛犯錯的智能體
- SAP Business Intelligence Quick Start Guide
- Ansible 2 Cloud Automation Cookbook
- 機器學習案例分析(基于Python語言)
- 漢字錄入技能訓練
- WPF專業編程指南
- 傳感技術基礎與技能實訓