2013-05-24 2 views
0

저는 자바를 처음 접했고 내가 만든 게임에서 배열에 문제가 있습니다. 이는 비주얼드와 유사합니다.타일 스왑 위치를 만드는 데 문제가 있음 - 보석으로 장식 됨

이 게임에서는 보드의 열과 행 (정수)과 함께 보드에 하나의 컬러 타일을 나타내는 Tile이라는 클래스가 있습니다. Board라는 또 다른 클래스를 가지고 있습니다.이 클래스는 열과 행으로 구성된 정수의 2D 배열로 이러한 타일을 관리합니다.

화면에 두 개의 타일을 바꿔 놓았습니다. 이 경우 열과 행이 서로 바뀌지 만 저장된 열은이 변경 사항을 인식하지 못합니다. 화면에서 모든 것이 잘 보입니다. 두 개의 타일이 위치를 전환합니다.

예를 들어 전환하려는 인접한 타일이 두 개있는 경우 (column0, row0)(column1, row0)입니다. 내 타일 배열에있는 타일은 array[0][0]array[1][0]입니다. 전환 할 때 첫 번째 타일은 두 번째 타일의 이전 위치에 있고 두 번째 타일은 이제 첫 번째 타일의 이전 위치에 있습니다. 그러나 첫 번째 타일은 array[1][0]이더라도 여전히 array[0][0]으로 인식됩니다.

내 프로그램이 동일한 색상의 연속 된 타일 세 개를 인식하지 못하기 때문에 보드에서 지워지지 않습니다. 해결 방법이 있습니까?

제안 사항이 있으시면 도움이 될 것입니다. 고맙습니다.

+1

스와핑을 수행하는 코드 세그먼트를 게시 할 수 있습니까? 스와핑의 일반적인 실수는 a = b를 수행하는 것입니다. b = a; 그러나 그것은 두 변수를 b의 이전 값에 실제로 할당합니다. a의 이전 값을 저장하기위한 임시 위치가 필요합니다 : tmp = a; a = b; b = tmp. –

+0

예 열과 행을 전환하기위한 자리 표시자가 있습니다. 나는 이것이 여전히 화면에 정확하게 그려져있는 이유라고 생각합니다. 좋은 생각이긴하지만 – user2415988

+0

배열 요소를 바꿔 치기를합니까? 배열은 자동으로 타일 내부의 좌표를 변경한다는 것을 알지 못합니다 ... 여전히 tmp = array [c0] [r0]; 배열 [c0] [r0] = 배열 ​​[c1] [r1]; 배열 [c1] [r1] = tmp –

답변

1

설명에서 정확히 무엇이 잘못 되었습니까? 코드는 다음과 유사해야합니다.

class Tile { 
    int col; 
    int row; 
    void setPos(int newCol, int newRow) { 
    col = newCol; 
    row = newRow; 
} 

class Board { 
    Tile[][] array; 

    void swap(int col0, int row0, int col1, int row1) { 
    // Get hold of the tile objects to swap 
    Tile tile0 = array[col0][row0]; 
    Tile tile1 = array[col1][row1]; 

    // Swap the positions stored in the tile objects 
    tile0.setPos(col1, row1); 
    tile1.setPos(col0, row0); 

    // Swap the tile objects in the array 
    array[col0][row0] = tile1; 
    array[col1][row1] = tile0; 
    } 
} 
+0

네, 꽤 많이 가지고 있습니다. 그것은 내가 가지고있는 다른 메서드에서 nullpointerexception 오류를 일으키는 것입니다. 나는 지금 그것에 대해 연구 중이다. 고맙습니다. – user2415988

관련 문제