public boolean moveTetrominoRight() { Log.d(TAG, "move tetromino to right"); synchronized (lockObj) { if (currentTetromino.moveRight(oldMap)) { currentMap.copyFrom(oldMap); currentTetromino.putOnMap(currentMap); lastMoveMap.copyFrom(currentMap); // if old position will collision but new moved position will not, then need remove the new // tetromino message and send tetromino move message= if (!currentTetromino.isCollisionY( currentTetromino.getY() + 1, currentTetromino.getSharp(), oldMap)) { if (handler.hasMessages(MSG_NEW_TETROMINO)) { handler.removeMessages(MSG_NEW_TETROMINO); handler.sendEmptyMessageDelayed(MSG_TETROMINO_MOVE, TETROMINO_MOVE_INTERVAL_RESEND); } } for (ITetrisListener listener : customizedListeners) { listener.onTetrominoMove(); } return true; } return false; } }
public boolean rotateTetromino() { Log.d(TAG, "rotate tetromino"); synchronized (lockObj) { if (currentTetromino.rotate(oldMap)) { currentMap.copyFrom(oldMap); currentTetromino.putOnMap(currentMap); lastMoveMap.copyFrom(currentMap); for (ITetrisListener listener : customizedListeners) { listener.onTetrominoRotated(); } return true; } return false; } }
public boolean moveTetrominoDown() { Log.d(TAG, "move tetromino down"); synchronized (lockObj) { if (currentTetromino.moveDown(oldMap)) { currentMap.copyFrom(oldMap); currentTetromino.putOnMap(currentMap); lastMoveMap.copyFrom(currentMap); for (ITetrisListener listener : customizedListeners) { listener.onTetrominoMove(); } return true; } else { return false; } } }
public void dropTetromino() { Log.d(TAG, "drop tetromino down"); synchronized (lockObj) { while (currentTetromino.moveDown(oldMap)) { currentMap.copyFrom(oldMap); currentTetromino.putOnMap(currentMap); lastMoveMap.copyFrom(currentMap); for (ITetrisListener listener : customizedListeners) { listener.onTetrominoMove(); } } handler.removeMessages(MSG_TETROMINO_MOVE); Log.d(TAG, "drop tetromino down, send new tetromino message"); handler.removeMessages(MSG_NEW_TETROMINO); handler.sendEmptyMessage(MSG_NEW_TETROMINO); } }
private void clearLines() { int cleanedLineNumber = 0; int cleanedLine = -1; while ((cleanedLine = currentMap.clearLine()) != -1) { cleanedLineNumber++; for (ITetrisListener listener : customizedListeners) { listener.onLineCleaned(cleanedLine); } } addScore(cleanedLineNumber); oldMap.copyFrom(currentMap); lastMoveMap.copyFrom(currentMap); if (cleanedLineNumber > 0) { for (ITetrisListener listener : customizedListeners) { listener.onLinesCleaned(cleanedLineNumber); } } }
@Override public void handleMessage(Message msg) { if (isStarted()) { if (!isPaused()) { if (msg.what == MSG_TETROMINO_MOVE) { Log.d(TAG, "receive move tetromino message"); lastMoveMap.copyFrom(currentMap); gameMove(); } else if (msg.what == MSG_NEW_TETROMINO) { Log.d(TAG, "receive new tetromino message"); currentMap.copyFrom(lastMoveMap); gameChecking(); oldMap.copyFrom(currentMap); currentTetromino = getNewTetromino(); if (currentTetromino.isAvailable(currentMap)) { currentTetromino.putOnMap(currentMap); this.removeMessages(MSG_TETROMINO_MOVE); this.sendEmptyMessageDelayed( MSG_TETROMINO_MOVE, (int) (TETROMINO_MOVE_INTERVAL / moveSpeed)); for (ITetrisListener listener : customizedListeners) { listener.onNewTetromino(); } } else { gameOver(); } } } else { Log.d(TAG, "game paused, delay message"); delayMessage(msg.what); } } }