Beispiel #1
0
  /**
   * Updates the player's score using line number & current level
   *
   */
  increaseScore(lines: number) {
    this.score +=
      this.scoreTable[lines - 1] + this.level * this.scoreTable[lines - 1];
    this.lines += lines;
    this.linesString.setText("Lines: " + this.lines);
    this.scoreString.setText("Score: " + this.score);

    if (lines === 4) {
      AM.play("lines_tetris");
    } else {
      AM.play("lines");
    }
  }
Beispiel #2
0
    /**
     * Move the shape on the map by a certain number of tiles, optionnaly sending an event
     * of a collision is detected
     *
     */
    snapTile(horizontal = 0, vertical = 0, notify = true, noSound = false): boolean {
        const map = this.currentMap;
        const buffer = this.getMatrix();
        const tilePos = map.getTileIndexFromPixel(this.x, this.y);
        const newX = tilePos.x + horizontal;
        const newY = tilePos.y + vertical;

        // first check there is no collision with walls
        if (!map.checkMatrixForCollision(buffer, this.shape.width, newX, newY, Tile.TYPE.WALL)) {
            this.x += horizontal * map.tileWidth;
            this.y += vertical * map.tileHeight;

            return true;
        } else {
            // if a collision was detected and vertical == 1 it means the shape reached
            // the ground: in this case we send a notification for the grid
            // and make the shape stop responding to user input or timer
            if (vertical === 1) {
                this.movable = false;
                if (notify) {
                    AM.play('ground');
                    this.notify('ground', {
                        startLine: tilePos.y,
                        numRows: this.shape.height / map.tileHeight
                    });
                }
            }
            return false;
        }
    }
Beispiel #3
0
 /**
  * Updates level + level object's text
  */
 updateLevel() {
   const oldLevel = this.level;
   this.level = Math.floor(this.lines / 10);
   this.levelString.setText("Level: " + this.level);
   this.timing = START_TIMING - this.level * LEVEL_TIMING;
   this.shape.data['speed'] = this.timing;
   oldLevel !== this.level && AM.play("level");
 }
Beispiel #4
0
    /**
     * Switches to the next shape's rotation, if no collision found onto the map
     */
    nextRotation(): void {
        let matrix: number[];
        let newRotation = this.rotation + 1;

        const map = this.currentMap;
        const tilePos = map.getTileIndexFromPixel(this.x, this.y);

        // cycles if last position reached
        if (newRotation > 3) {
            newRotation = 0;
        }

        // get current shape + position matrix
        matrix = this.getMatrix(newRotation);

        if (!map.checkMatrixForCollision(matrix, this.shape.width, tilePos.x, tilePos.y, Tile.TYPE.WALL)) {
            // change shape rotation if no collision detected
            this.setShape(this.shapeName, newRotation);
            AM.play('rotate');
        } else {
            console.log('rotation not possible');
        }
    }
Beispiel #5
0
 pause(isRunning: boolean) {
   this.pauseString.visible = !isRunning;
   AM.play("pause");
 }
Beispiel #6
0
 /**
  * Called on game over, simply displays the score in an alert box and restarts the game
  */
 gameover() {
   AM.play("gameover");
   alert("game over!" + this.score);
   this.reset();
 }
 checkKeyDelay(key: number, timestamp: number, x: number, y: number): void {
     const sprite = this.sprite as Shape;
     if (this.ready(key, timestamp)) {
         sprite.snapTile(x, y) && AM.play('move');
     }
 }