public void select(int eventX, int eventY) { for (int i = colorRects.size() - 1; i >= 0; i--) { ImageRect rect = colorRects.get(i); if (rect.isBelong(eventX, eventY) && rect.getIsDrawable()) { colorRects.remove(i); colorRects.add(rect); recID = rect.getID(); isSelected = true; recentX = eventX; recentY = eventY; // invalidate(); return; } } }
// the method that draws the rectangles @Override protected void onDraw(Canvas canvas) { // canvas.drawBitmap(backgroundImage.getBitmap(), 0, 0, null); // canvas.drawBitmap(imgBack.getBitmap(), imgBack.getX(), // imgBack.getY(), null); // // if (AppSettings.soundIsOn) { // canvas.drawBitmap(imgSoundOn.getBitmap(), imgSoundOn.getX(), // imgSoundOn.getY(), null); // } else { // canvas.drawBitmap(imgSoundOff.getBitmap(), imgSoundOff.getX(), // imgSoundOff.getY(), null); // } canvas.drawBitmap(imgShow.getBitmap(), imgShow.getX(), imgShow.getY(), null); if (isPressedInShow) { canvas.drawBitmap( frameColorRect.getBitmap(), frameColorRect.getX(), frameColorRect.getY(), null); } else { canvas.drawBitmap( backFrameColorRect.getBitmap(), backFrameColorRect.getX(), backFrameColorRect.getY(), null); } for (int i = 0; i < colorRects.size(); i++) { canvas.drawBitmap( colorRects.get(i).getBitmap(), colorRects.get(i).getX(), colorRects.get(i).getY(), null); } countOfUndragebleImages = 0; for (int i = 0; i < colorRects.size(); i++) { if (!colorRects.get(i).getIsDrawable()) { countOfUndragebleImages++; } } if (countOfUndragebleImages == 12 && gameIsOnProcess) { PuzzleGame.this.showWinDialog(); gameIsOnProcess = false; } }
@Override protected void onDestroy() { super.onDestroy(); ImageRect.resetCount(); }
// events when touching the screen public boolean onTouchEvent(MotionEvent event) { int eventaction = event.getAction(); int X = (int) event.getX(); int Y = (int) event.getY(); switch (eventaction) { case MotionEvent.ACTION_DOWN: // touch down so check if the finger // is on // a rectangle // recID = 0; if (imgShow.isBelong(X, Y)) { isPressedInShow = true; } // if (imgBack.isBelong(X, Y)) { // // isPressedInBack = true; // // PuzzleGame.this.finish(); // // } // if (imgSoundOn.isBelong(X, Y) || imgSoundOff.isBelong(X, Y)) // { // if (AppSettings.soundIsOn) // AppSettings.music.pause(); // else // AppSettings.music.start(); // AppSettings.soundIsOn = !AppSettings.soundIsOn; // // } for (int i = 0; i < colorRects.size(); i++) { if (colorRects.get(i).isBelong(X, Y)) { select(X, Y); // recID = colorRects.get(i).getID(); break; } else { isSelected = false; } } break; case MotionEvent.ACTION_MOVE: // touch drag with the rectangle // move the rectangles the same as the finger currentImg = getImageById(recID); if (isSelected) { currentImg = getImageById(recID); switch (recID) { case 3: if (Math.abs(currentImg.getX() - frameColorRect.getX()) <= currentImg.getWidth() / 3 && Math.abs(currentImg.getY() - frameColorRect.getY()) <= currentImg.getHeight() / 2) { currentImg.setX(frameColorRect.getX()); currentImg.setY(frameColorRect.getY()); if (currentImg.getIsDrawable()) { PuzzleGame.this.playClick(); currentImg.setIsDragable(false); } } break; case 4: if (Math.abs(currentImg.getX() - frameColorRect.getX() - currentImg.getWidth()) <= currentImg.getWidth() / 3 && Math.abs(currentImg.getY() - frameColorRect.getY()) <= currentImg.getHeight() / 2) { currentImg.setX(frameColorRect.getX() + currentImg.getWidth()); currentImg.setY(frameColorRect.getY()); if (currentImg.getIsDrawable()) { PuzzleGame.this.playClick(); currentImg.setIsDragable(false); } } break; case 5: if (Math.abs(currentImg.getX() - frameColorRect.getX() - 2 * currentImg.getWidth()) <= currentImg.getWidth() / 3 && Math.abs(currentImg.getY() - frameColorRect.getY()) <= currentImg.getHeight() / 2) { currentImg.setX(frameColorRect.getX() + 2 * currentImg.getWidth()); currentImg.setY(frameColorRect.getY()); if (currentImg.getIsDrawable()) { PuzzleGame.this.playClick(); currentImg.setIsDragable(false); } } break; case 6: if (Math.abs(currentImg.getX() - frameColorRect.getX() - 3 * currentImg.getWidth()) <= currentImg.getWidth() / 3 && Math.abs(currentImg.getY() - frameColorRect.getY()) <= currentImg.getHeight() / 2) { currentImg.setX(frameColorRect.getX() + 3 * currentImg.getWidth()); currentImg.setY(frameColorRect.getY()); if (currentImg.getIsDrawable()) { PuzzleGame.this.playClick(); currentImg.setIsDragable(false); } } break; case 7: if (Math.abs(currentImg.getX() - frameColorRect.getX()) <= currentImg.getWidth() / 3 && Math.abs(currentImg.getY() - frameColorRect.getY() - currentImg.getHeight()) <= currentImg.getHeight() / 2) { currentImg.setX(frameColorRect.getX()); currentImg.setY(frameColorRect.getY() + currentImg.getHeight()); if (currentImg.getIsDrawable()) { PuzzleGame.this.playClick(); currentImg.setIsDragable(false); } } break; case 8: if (Math.abs(currentImg.getX() - frameColorRect.getX() - currentImg.getWidth()) <= currentImg.getWidth() / 3 && Math.abs(currentImg.getY() - frameColorRect.getY() - currentImg.getHeight()) <= currentImg.getHeight() / 2) { currentImg.setX(frameColorRect.getX() + currentImg.getWidth()); currentImg.setY(frameColorRect.getY() + currentImg.getHeight()); if (currentImg.getIsDrawable()) { PuzzleGame.this.playClick(); currentImg.setIsDragable(false); } } break; case 9: if (Math.abs(currentImg.getX() - frameColorRect.getX() - 2 * currentImg.getWidth()) <= currentImg.getWidth() / 3 && Math.abs(currentImg.getY() - frameColorRect.getY() - currentImg.getHeight()) <= currentImg.getHeight() / 2) { currentImg.setX(frameColorRect.getX() + 2 * currentImg.getWidth()); currentImg.setY(frameColorRect.getY() + currentImg.getHeight()); if (currentImg.getIsDrawable()) { PuzzleGame.this.playClick(); currentImg.setIsDragable(false); } } break; case 10: if (Math.abs(currentImg.getX() - frameColorRect.getX() - 3 * currentImg.getWidth()) <= currentImg.getWidth() / 3 && Math.abs(currentImg.getY() - frameColorRect.getY() - currentImg.getHeight()) <= currentImg.getHeight() / 2) { currentImg.setX(frameColorRect.getX() + 3 * currentImg.getWidth()); currentImg.setY(frameColorRect.getY() + currentImg.getHeight()); if (currentImg.getIsDrawable()) { PuzzleGame.this.playClick(); currentImg.setIsDragable(false); } } break; case 11: if (Math.abs(currentImg.getX() - frameColorRect.getX()) <= currentImg.getWidth() / 3 && Math.abs( currentImg.getY() - frameColorRect.getY() - 2 * currentImg.getHeight()) <= currentImg.getHeight() / 2) { currentImg.setX(frameColorRect.getX()); currentImg.setY(frameColorRect.getY() + 2 * currentImg.getHeight()); if (currentImg.getIsDrawable()) { PuzzleGame.this.playClick(); currentImg.setIsDragable(false); } } break; case 12: if (Math.abs(currentImg.getX() - frameColorRect.getX() - currentImg.getWidth()) <= currentImg.getWidth() / 3 && Math.abs( currentImg.getY() - frameColorRect.getY() - 2 * currentImg.getHeight()) <= currentImg.getHeight() / 2) { currentImg.setX(frameColorRect.getX() + currentImg.getWidth()); currentImg.setY(frameColorRect.getY() + 2 * currentImg.getHeight()); if (currentImg.getIsDrawable()) { PuzzleGame.this.playClick(); currentImg.setIsDragable(false); } } break; case 13: if (Math.abs(currentImg.getX() - frameColorRect.getX() - 2 * currentImg.getWidth()) <= currentImg.getWidth() / 3 && Math.abs( currentImg.getY() - frameColorRect.getY() - 2 * currentImg.getHeight()) <= currentImg.getHeight() / 2) { currentImg.setX(frameColorRect.getX() + 2 * currentImg.getWidth()); currentImg.setY(frameColorRect.getY() + 2 * currentImg.getHeight()); if (currentImg.getIsDrawable()) { PuzzleGame.this.playClick(); currentImg.setIsDragable(false); } } break; case 14: if (Math.abs(currentImg.getX() - frameColorRect.getX() - 3 * currentImg.getWidth()) <= currentImg.getWidth() / 3 && Math.abs( currentImg.getY() - frameColorRect.getY() - 2 * currentImg.getHeight()) <= currentImg.getHeight() / 2) { currentImg.setX(frameColorRect.getX() + 3 * currentImg.getWidth()); currentImg.setY(frameColorRect.getY() + 2 * currentImg.getHeight()); if (currentImg.getIsDrawable()) { PuzzleGame.this.playClick(); currentImg.setIsDragable(false); } } break; } if (currentImg.getIsDrawable()) { getSelected().move(X - recentX, Y - recentY); recentX = X; recentY = Y; } } break; case MotionEvent.ACTION_UP: // touch drop - just do things here after dropping isPressedInShow = false; break; } // redraw the canvas invalidate(); return true; }