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;
	    			
	    		}


실행화면


ShinExample_7.zip




Posted by App.SHIN
:

BLOG main image
by App.SHIN

공지사항

카테고리

분류 전체보기 (27)
안드로이드 (12)
추천앱 (0)
맛집 (0)
영화 (0)
핫이슈 (2)
서버 (2)
mac os 적응기 (8)
java (1)
mysql (1)
tomcat (1)

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

글 보관함

달력

«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Total :
Today : Yesterday :