官术网_书友最值得收藏!

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語言的基本操作,例如嵌套循環、創建二維數組等。在下面的章節中,我們將實現游戲的核心部分。

主站蜘蛛池模板: 屏山县| 陈巴尔虎旗| 辰溪县| 安泽县| 湘潭县| 微山县| 榆社县| 蒙阴县| 贺州市| 思南县| 额敏县| 东安县| 道孚县| 延安市| 五家渠市| 灵石县| 宁都县| 钟山县| 吉水县| 廊坊市| 沈阳市| 额尔古纳市| 象山县| 枣阳市| 同仁县| 香格里拉县| 静海县| 夹江县| 沂南县| 抚松县| 寻甸| 南充市| 佳木斯市| 慈溪市| 吉木乃县| 志丹县| 汶上县| 乌兰浩特市| 九台市| 巩义市| 朝阳区|