スマレジエンジニアyushiのブログ

スマレジエンジニアのブログ

【テトリス #9】ブロックを最下層まで落とす

テトリスを作っています。

テトリス カテゴリーの記事一覧 - スマレジエンジニアyushiのブログ

技術スタックは下記の通りです。

  • TypeScript
  • React
  • SCSS
  • Create React App

今回は、ブロックを最下層まで落とす機能などを作ります。

ブロックを落とすロジック

この機能では、落下中のブロックを最下層(積まれたタイルがある場合は、それに接する)まで落とします。

  /**
   * 最下層までブロックを落とす.
   */
  const fall = () => {
    if (fallingBlock === null) {
      return;
    }

    /**
     * 最下層に到達するまで繰り返し更新する.
     */
    let currentBlock = { ...fallingBlock };

    // whileループと等価だが、不具合による無限ループを防ぐためにforループで記述する.
    for (let i = 0; i < boardHeight; i++) {
      const movedBlock = getNextBlock(
        currentBlock,
        boardWidth,
        boardHeight,
        tiles
      );

      if (!movedBlock) {
        break;
      }

      currentBlock = movedBlock;
    }

    setFallingBlock(currentBlock);
  };

fallingBlockは、事前に取得した落下中のブロックです。
これが存在しない(null)場合は、何もせずにreturnします。

forrループ内で読んでいるgetNextBlockは、タイマーでブロックが一マス落ちる時と同じロジックです。
getNextBlockの返り値がnullになる = ブロックが最下層に落ちる、もしくは積まれているタイルに接するまでループします。

Pull Request

https://github.com/nek0meshi/tetris/pull/21

あとがき

もう年末ですね。
今年は登山をしたり、海や川で泳いだり、スノボなど、アウトドアを楽しむ一年でした。
来年はフロントエンドの開発力を高めたいなと思っています。