2013-10-23 4 views
2

게임 조각을 초기 위치에서 새 위치로 이동하려고합니다. 참고 : 이동은 "합법적"인 것으로 간주됩니다.이 체스 판 이동이 제대로 작동하지 않는 이유는 무엇입니까?

public void move (int fromRow, int fromCol, int toRow, int toCol) { 
    GamePiece tmp; //Gamepiece is superclass 
    tmp=board[fromRow][fromCol]; 
    board[toRow][toCol]=tmp; 
    board[fromRow][fromCol]=new Gamepiece(); //default constructor 
    System.out.print(toString()); //this method has the board array printed in correct format 
} 

내가 이것을 테스트 할 때 올바른 조각을 옮기지 않고 공백을주지 않습니다. 왜?

+1

은'GamePiece' 클래스와'toString()'메소드처럼 더 많은 코드를 필요로합니다.'board' 클래스가 무엇이든간에 필요할 것입니다. –

+0

이런 경우인지 모르겠지만, 내 경험으로 볼 때 행과 열을 스와핑하는 2D 배열을 처리 할 때 일반적으로 내 문제가 해결되었습니다. 그래서'tmp = board [fromCol] [fromRow]'등이 될 것입니다. – npinti

+0

무언가가 움직일 때마다 새로운 피스를 만들어야할까요? 아마도 그렇지 않습니다. 이것이'null'이 존재하는 이유입니다. 또는, 게임 피스 (GamePiece)의 특별한 인스턴스가 필요하거나 좋아할 필요가 없다면, 아무 것도 의미하지 않습니다. – clwhisk

답변

3

코드에서 수행중인 작업이 서로 바뀝니다. 정기적 인 체스 게임에서 당신은 바꿀 필요가 없습니다. 그냥

 tmp=board[fromRow][fromCol]; // don't need this 
     board[toRow][toCol]=tmp; // don't need this 
     board[fromRow][fromCol]=new Gamepiece(); // don't need this 

을 대체 그냥 수행

 board[toRow][toCol] = board[fromRow][fromCol]; 
     board[fromRow][fromCol] = null 

는 모든 보드가 2D array of ChessPiece들입니다 고려하고,이 문제를 해결할 수 있는지 모르겠어요 예를 ChessPiece[][] board = new ChessPiece[8][8];

를 들어,없이 더 많은 코드를 보았지만, 이것을 지적했다.