예제 #1
0
  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;
    }
  }
예제 #2
0
  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;
    }
  }
예제 #3
0
  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;
      }
    }
  }
예제 #4
0
  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);
    }
  }
예제 #5
0
  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);
      }
    }
  }
예제 #6
0
        @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);
            }
          }
        }