2013-04-24 2 views
0

Здесь показан класс ChessBoard, который создает массивы массива Multi-D, представляющие шахматную доску (8x8). Когда часть движется, я пытаюсь отсканировать доску, чтобы увидеть, будет ли кусок перемещаться по любым занятым пространствам (и, если это так, выкинет исключение из запрещенного пути). Ниже приведено, как я начал цикл вложенных циклов для каждой шахматной фигуры. Как создать гнездо для петли для сканирования пятна [] [] для вакансии пробела или нетСоздание вложенного для петли для проверки шахматной доски

public class ChessBoard { 

private Piece spots[][]; 

public ChessBoard() { 
    spots = new Piece[8][8];  
} 

public void placePieceAt(Piece piece, ChessPosition position) 
{ 
    spot[position.getX()][position.getY()] = piece; 
    piece.setPosition(position); 
} 
public abstract class Piece { 

private ChessPlayer owner; 
private ChessGame game; 
protected ChessPosition position; 



protected CPiece(ChessPlayer owner, ChessGame game, ChessPosition init_position) { 
    this.owner = owner; 
    this.game = game; 
    this.position = null; 

    game.getBoard().placePieceAt(this, init_position); 
} 

******here is where I was trying 
public void checkIfPositionOccupied(ChessPosition destination){ 
    ChessBoard[][] occupiedSpaces = new ChessBoard[8][8]; 
    for (int i = 0; i <8 ; i++){ 
     for(int j = 0; j<8; i++){ 


     } 
    } 

} 
public void moveTo(ChessPosition destination) 



     throws IllegalMove 
{ 
    // Replace with your code as necessary 
    throw new IllegalMove(this, position, destination); 
} 

public char getMark() { 
    return mark; 
} 

}

class Rook extends Piece { 
public Rook(ChessPlayer owner, ChessGame game, ChessPosition init_position) { 
    super(owner, game, init_position); 
    if (owner == game.getPlayer1()) { 
     mark = 'r'; 
    } else { 
     mark = 'R'; 
    } 
} 

public void moveTo(ChessPosition destination) throws IllegalMove 
{ 
    if((position.getX() == destination.getX() && position.getY() != destination.getY()) || (position.getX() != destination.getX() && position.getY() == destination.getY())){ 
     setPosition(destination); 
    } else { 
     throw new IllegalMove(this, position, destination); 
    } 
} 

}

+3

У меня возникли вопросы. – Dukeling

+0

Как создать гнездо для цикла для сканирования пятен [] [] для вакансии пробела или нет – Fish

+0

Вам нужно пересмотреть этот 'if (owner == game.getPlayer1()) ..' тоже. – Maroun

ответ

0

Не уверен, что если вы спрашиваете это, но хорошо:

ChessBoard[][] occupiedSpaces = new ChessBoard[8][8]; 
    for (int i = 0; i <8 ; i++){ 
    for(int j = 0; j<8; i++){ 
    if (spot[i][j]!=null) 
      //okay, occupied. 
     { 
      // Make whatever you want here. 
     } 
    } 
    } 

Сделайте метод hasPiece(), который возвращает логическое значение, если positi на занят.

+1

У 'busySpaces' еще нет данных. 'spot [i] [j] == null' вместо этого? – Dukeling

+0

Да, мой плохой !!! Нужно еще немного кофе .. Это также может быть == null, да. Более простой. ;) –

+0

так что если (spot [i] [j] = null)? – Fish

0

что-то совершенно неправильно ..

Piece Если что-то вроде Rook Смотрите ваши отношения Rook is Piece. то как ваш ChessBoard имеет 64 (8*8)Piece? Вы должны иметь отдельный класс для Spots и не использовать Piece для определения ChessSPots

также согласно вашему вопросу can the board to see if the piece will move through any spaces

Вам не нужно проверять только DestinationPosition, но и проверять возможные пути к этой позиции для текущего Piece. следовательно, метод Move должен быть специфичным для ConCrete Piece like Rook

Вам не нужен цикл для вашего метода checkIfPositionOccupied.

public void checkIfPositionOccupied(ChessPosition destination){ 
    if(spot[destination.getX()][destination.getY()] !=null){ 
     /*Destination is Occupied*/ 
    }else{ 
     /*Destination is Not Occupied*/ 
    } 

} 
Смежные вопросы