3X3의 슬라이딩 퍼즐을 만들어봅니다.
강좌 6번의 뷰를 복사하여 CustomView를 하나더 만듭니다.
PuzzleView.java 와 SlidingPuzzleActivity를 만들었습니다.
기본적인 Idea는 2차원 배열을 만들고
이동이되면 해당 배열을 계속해서 업데이트합니다.
그래고 2차원배열이 순서대로 되면 게임이 끝나는 것이 기본 idea입니다.
게임 2차원 배열을 만듭니다.
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
그리고 해당 내용에 대해 비트맵을 9개로 나누어 각각 가지고있습니다.
그리고 onDraw에서 각각의 퍼즐 블록을 그려주고 , 라인을 그려줍니다.
canvas.drawBitmap( mBitmapCube[i][j] , mCubeRect[i][j].left , mCubeRect[i][j].top , paint);
그리고 각블록에 대해 Rect 정보를 가지고있습니다.
Rect는 left, right , top , bottom 값으로 사각형의 위치정보를 가지고있습니다.
Rect는 두가지로 mCubeOriginRect 원래위치 그리고 mCubeRect
이번버전에는 빈칸이 위치한 부분에 대해서만 같은행 같은 열을 선택하였을떄
해당 블록이 움직일수있게 처리해보았습니다.
클릭되었을경우 선택된 블록의 index 를 저장해둡니다.
for( int i = 0 ; i < 3; i++ ) { for( int j = 0 ; j < 3 ; j++ ) { if( mCubeOriginRect[i][j].contains( startPoint.x , startPoint.y ) == false ) continue; mSelectedCubeHeightIndex = i; mSelectedCubeWidthIndex = j; invalidate(); break; } }
그리고 MOVE이벤트가 발생했을경우 해당 CubeRect의 값을 바꿔줍니다.
// 같은 행에 있으면 if( mSpaceCubeHeightIndex == mSelectedCubeHeightIndex ) { int moveXpos = endPoint.x - startPoint.x; mCubeRect[mSelectedCubeHeightIndex][mSelectedCubeWidthIndex].left = mCubeOriginRect[mSelectedCubeHeightIndex][mSelectedCubeWidthIndex].left + moveXpos; mCubeRect[mSelectedCubeHeightIndex][mSelectedCubeWidthIndex].right = mCubeOriginRect[mSelectedCubeHeightIndex][mSelectedCubeWidthIndex].right + moveXpos; } // 같은 열에 있으면 if( mSpaceCubeWidthIndex == mSelectedCubeWidthIndex ) { int moveYpos = endPoint.y - startPoint.y; mCubeRect[mSelectedCubeHeightIndex][mSelectedCubeWidthIndex].top = mCubeOriginRect[mSelectedCubeHeightIndex][mSelectedCubeWidthIndex].top + moveYpos; mCubeRect[mSelectedCubeHeightIndex][mSelectedCubeWidthIndex].bottom = mCubeOriginRect[mSelectedCubeHeightIndex][mSelectedCubeWidthIndex].bottom + moveYpos; }
실행화면
'안드로이드' 카테고리의 다른 글
FCM(Firebase Cloud Messaging ) 따라하기 (1) | 2017.04.08 |
---|---|
안드로이드 'd:skin' 이클립스 실행하자마자 팝업 (0) | 2015.07.23 |
[안드로이드 강좌 예제 따라하기 6] 커스텀 뷰 및 Bitmap 표시 (0) | 2014.11.04 |
[안드로이드 강좌 예제 따라하기 5] 계산기만들기 - 계산부분(2/2) (2) | 2014.11.04 |
[안드로이드 강좌 예제 따라하기 4] 계산기만들기 - 틀만들기(1/2) (2) | 2014.11.04 |