-1

4 つの方法を完了する必要がありますが、それらを理解するのに苦労しています。を完成させようとしていwhitemove()ます。ボードを繰り返し処理する必要があることはわかっていますが、どのように行うべきかを完全には理解できません!

import java.util.List;
import java.util.ArrayList;

public class HexapawnBoard {
private static final int WHITE_PIECE = 1;
private static final int BLACK_PIECE = 2;
private static final int EMPTY = 0;

private static final int BOARD_SIZE = 3;

private int[][] board;

/**
 * Create a board position from a string of length BOARD_SIZE*BOARD_SIZE (9).
 * The first BOARD_SIZE positions in the string correspond to the black player's home
 * position. The last BOARD_SIZE positions in the string correspond ot the white player's
 * home position. So, the string "BBB   WWW" corresponds to a starting position.
 * 
 * @param pos the string encoding the position of the board
 */
public HexapawnBoard(String pos)
{
    if(pos.length() != BOARD_SIZE * BOARD_SIZE)
        throw new RuntimeException("HexapawnBoard string must be of length BOARD_SIZExBOARD_SIZE");

    board = new int[BOARD_SIZE][BOARD_SIZE];
    for(int row=0;row<BOARD_SIZE;row++)
    {
        for(int col=0;col<BOARD_SIZE;col++)
        {
            switch(pos.charAt(row*BOARD_SIZE+col))
            {
            case 'B':
            case 'b':
                board[row][col] = BLACK_PIECE;
                break;
            case 'W':
            case 'w':
                board[row][col] = WHITE_PIECE;
                break;
            case ' ':
                board[row][col] = EMPTY;
                break;
            default:
                throw new RuntimeException("Invalid Hexapawn board pattern " + pos);
            }
        }
    }
}

/**
 * A copy constructor of HexapawnBoard
 * 
 * @param other the other instance of HexapawnBoard to copy
 */
public HexapawnBoard(HexapawnBoard other)
{
    board = new int[BOARD_SIZE][BOARD_SIZE];
    for(int i=0;i<BOARD_SIZE;i++)
        for(int j=0;j<BOARD_SIZE;j++)
            this.board[i][j] = other.board[i][j];
}


/**
 * Return a string version of the board. This uses the same format as the 
 * constructor (above)
 * 
 * @return a string representation of the board.
 */
public String toString()
{
    StringBuffer sb = new StringBuffer();
    for(int row=0;row<BOARD_SIZE;row++)
    {
        for(int col=0;col<BOARD_SIZE;col++)
        {
            switch(board[row][col])
            {
            case BLACK_PIECE:
                sb.append('B');
                break;
            case WHITE_PIECE:
                sb.append('W');
                break;  
            case EMPTY:
                sb.append(' ');
                break;
            }
        }
    }
    return sb.toString();
}

/**
 * Determine if this board position corresponds to a winning state.
 * 
 * @return true iff black has won.
 */
public boolean blackWins()
{
    for(int col=0;col<BOARD_SIZE;col++)
        if(board[BOARD_SIZE-1][col] == BLACK_PIECE)
            return true;
    return false;
}

/**
 * Determine if this board position corresponds to a winning state
 * 
 * @return true iff white has won
 */
public boolean whiteWins()
{
    for(int col=0;col<BOARD_SIZE;col++)
        if(board[0][col] == WHITE_PIECE)
            return true;
    return false;
}

/**
 * Determine if black has a move
 * 
 * @ return truee iff black has a move
 */
public boolean blackCanMove()
{

    return false;
}

/**
 * Return a List of valid moves of white. Moves are represented as valid 
 * Hexapawn board positions. If white cannot move then the list is empty.
 * 
 * @return A list of possible next moves for white
 */
public List<HexapawnBoard> whiteMoves()
{
    return null
}

/**
 * Determine if two board positions are equal
 * @param other the other board position
 * @return true iff they are equivalent board positions
 */
public boolean equals(HexapawnBoard other)
{

    return true;
}

/**
 * Determine if two board positions are reflections of each other
 * @param other the other board position
 * @return true iff they are equivalent board positions
 */
public boolean equalsReflection(HexapawnBoard other)
{

    return true;
}

 }
4

1 に答える 1

0

まず第一に、あなたがこれまでに持っているコードは正しいようです。

さて、あなたが残した4つの方法については、このヘキサポーンゲームでの移動のルールがわからないため、blackCanMove()またはの方法については実際にはお手伝いできません。whiteMoves()ルールを説明していただければ、お手伝いさせていただきます。

equals()andメソッドに関する限り、equalsReflection()基本的にはコピーコンストラクターで行ったことを実行する必要がありますが、コピーする代わりに、条件付きテストを実行します。2つの位置が想定どおりに一致しない場合は、を返しfalseます。それ以外の場合は、各正方形をチェックしてすべて正しい場合は、を返しtrueます。

方法に関してwhiteMoves()は、ボードを繰り返し処理して、すべての白い部分を見つける必要があります。白い部分ごとに、いくつかの(最大で3つの)有効な動きがある場合があります。それらの位置のそれぞれをチェックして、それらが可能かどうかを確認してください。その場所に黒いピースがある場合はピースが斜めに移動する場合があり、そのスポットにピースがまったくない場合はピースが前方に移動する場合があります。有効な移動ごとに、HexapawnBoardその移動後にボードがどのように見えるかを表す新しいものを作成します。メソッドの最後に、HexapawnBoard作成したすべてののリストを返します。

于 2012-06-26T13:17:36.557 に答える