[M1 Mac, Monterey 12.6.3, clang 13.0.0, SDL 2.26.2, ChatGPT Plus, NO IDE]
これまで開発してきたテトリスはベーシック版として、多機能版を別に開発することにしました。
まずはテトロミノの落下スピードを調整できるようにします。ボタンを3つレンダリングしています。
ChatGPTにヘッダファイルを見せた上でコードの作成方法を聞いてみました。
Q: <Game.hは省略> 以上のGame.hを踏まえて落下スピードを3段階に設定するにはどうしたらよいですか?
Tetrisの落下スピードを3段階に設定する場合は、Gameクラス内に落下スピードを管理する変数を追加し、GameInput構造体にボタン入力を追加して、それに応じて落下スピードを変更するようにUpdatePlaying関数を修正する必要があります。
以下は、例としてUpdatePlaying関数を修正したコードです。ここでは、bSlow、bNormal、bFastの3つのフラグ変数をGameInput構造体に追加して、それぞれがtrueの場合に対応する落下スピードを設定しています。
void Game::UpdatePlaying(const GameInput& gameInput) { if (gameInput.bPause) { m_gameState = kGameState_TitleScreen; return; } // 落下スピードの設定 int framesPerFallStep; if (gameInput.bSlow) { framesPerFallStep = 48; } else if (gameInput.bNormal) { framesPerFallStep = 32; } else { framesPerFallStep = 16; } // 落下フレーム数の計算 m_framesUntilFall -= 1; if (m_framesUntilFall == 0) { m_framesUntilFall = framesPerFallStep; m_activeTetromino.m_pos.y += 1; if (CheckTetrominoCollision(m_activeTetromino)) { // 衝突した場合、テトロミノをフィールドに追加する AddTetronimoToField(m_field, m_activeTetromino); // 行を消去する int numLinesCleared = ClearFullLines(m_field); m_numLinesCleared += numLinesCleared; m_level = m_numLinesCleared / 10; // 新しいテトロミノをスポーンする if (!SpawnTetromino()) { m_gameState = kGameState_GameOver; return; } } } // 入力に応じた処理 if (gameInput.bMoveLeft) { if (!CheckTetrominoCollision(m_activeTetromino, -1, 0)) { m_activeTetromino.m_pos.x -= 1; } } if (gameInput.bMoveRight) { if (!CheckTetrominoCollision(m_activeTetromino, 1, 0)) { m_activeTetromino.m_pos.x += 1; } } if (gameInput.bRotateClockwise) { if (!CheckTetrominoCollision(m_activeTetromino, 0, 0, 1)) { m_activeTetromino.m_rotation = (m_activeTetromino.m_rotation + 1) % Tetromino::kNumRotations; } } if (gameInput.bRotateAnticlockwise) { if (!CheckTetrominoCollision(m_activeTetromino, 0, 0, -1)) { m_activeTetromino.m_rotation = (m_activeTetromino.m_rotation + Tetrom