Skip to main content

避けゲー

体験実習 実習課題 避けゲー

準備

  1. Game.zip を解凍し、Visual Studio 2022 で付属のソリューション/プロジェクトを開く。
  2. image フォルダにタイトル用・リザルト用・猫用・蛇用の画像を配置する。(例:title.png, result.png, cat.png, snake.png

課題01:タイトル画面の背景を表示しよう

ファイル:TitleScene.PlayScene.cpp


void TitleScene::Init()
{
    isFinished = false;

    // ToDo: 背景画像を一度だけロードするコードを追加しよう
    if ( bgImage == -1 )
    {
        bgImage = LoadGraph( "______" );    // ← 画像ファイル名を入力
    }
}
  • 穴埋め"______""image/title.png" を入れて F5 で確認。

課題02:タイトル


if( playerImage == -1 )

//#課題01 LoadGraph関数を使って面から像を読み込む

playerImage = LoadGraph( "image/xxx.png" );

if( enemyImage == -1 )

//#課題01 LoadGraph関数を使って画像を読み込む

enemyImage = LoadGraph( "image/xxxx.png" );

//課題02 プレイ画面へ遷ヤーのしよう動速度を設定

ファイル:TitleScene.cpp

void TitleScene::Update(float deltaTime)
{
    // ToDo: スペースキーが押されたらシーン終了(PlaySceneへ移行)
    if ( CheckHitKey( KEY_INPUT_SPACE ) )
    {
        isFinishedplayerSpeed = true;0.0f;


//課題03 ままでOK落下速度を設定

}enemySpeed }

  • 確認:F5= 0.0f;


    //課題04 敵の生成タイトル画面マー表示し、加算

    enemySpawnTimer = enemySpawnTimer + deltaTime;

    //課題05 ペースキーでゲーム開始に進むこと。


コアの値を更新

score += deltaTime;


課題03:プレイ画面の初期設定をしよう

ファイル:PlayScene.cpp

void PlayScene::Init()
{
    isFinished = false;
    enemies.clear();

    // ToDo: プレイヤー初期位置を画面中央にセット(Y座標は地面から半分上)
    player.x = WINDOW_WIDTH / 2;
    player.y = GROUND_Y - CHARACTER_SIZE / 2;

    // ToDo: プレイヤーの移動速度を設定しよう
    playerSpeed = _____f;    // 例:150.0f

    // ToDo: 敵の落下速度を設定しよう
    enemySpeed = _____f;     // 例:150.0f

    // ToDo: 敵の出現間隔を設定しよう
    enemySpawnInterval = _____f; // 例:0.5f

    // ToDo: 敵生成タイマー初期化
    enemySpawnTimer = 0.0f;

    // ToDo: スコア初期化
    score = 0.0;

    // ToDo: 画像とフォントを一度だけロードするコードを追加しよう
    if ( playerImage == -1 ) playerImage = LoadGraph( "______" );  // cat.png
    if ( enemyImage  == -1 ) enemyImage  = LoadGraph( "______" );  // snake.png
    if ( scoreFont   == -1 ) scoreFont   = CreateFontToHandle( "メイリオ", 64, 0, DX_FONTTYPE_NORMAL );
}
  • 穴埋め例
    • playerSpeed = 150.0f;
    • enemySpeed = 150.0f;
    • enemySpawnInterval = 0.5f;
    • LoadGraph("image/cat.png") / LoadGraph("image/snake.png")

課題04:プレイヤーを左右に動かそう

ファイル:PlayScene.cpp

void PlayScene::Update(float deltaTime)
{
    // ToDo: 左右キーで player.x を更新しよう
    if ( CheckHitKey( KEY_INPUT_LEFT ) )
    {
        player.x -= _____f * deltaTime;   // playerSpeed を使おう
    }
    else if ( CheckHitKey( KEY_INPUT_RIGHT ) )
    {
        player.x += _____f * deltaTime;
    }

    // (以降はスコアや敵生成など…)
}
  • 穴埋めplayerSpeed を入れて動作確認。

課題05:敵を定期的に生成しよう

ファイル:PlayScene.cpp (同じ Update 内)

// 一定時間後、敵生成
    // ToDo: タイマーに経過時間を加算
    enemySpawnTimer += Scene::DeltaTime();  // または deltaTime

    // ToDo: タイマーが間隔を超えたら CreateEnemy() を呼び出し、タイマーをリセット
    if ( enemySpawnTimer > enemySpawnInterval )
    {
        CreateEnemy();
    }
  • 確認:F5 で蛇(enemy)が落ちてくるかチェック。

課題06:当たり判定とリザルト画面へ遷移しよう

ファイル:PlayScene.cpp

bool PlayScene::IsHit()
{
    for ( auto& e : enemies )
    {
        float dx = player.x - e.x;
        float dy = player.y - e.y;

        // ToDo: 衝突判定を完成させよう(距離の2乗 <= 半径の2乗)
        if ( (dx*dx) + (dy*dy) <= _____ )
        {
            return true;
        }
    }
    return false;
}
void PlayScene::Update(float deltaTime)
{
    // …(敵更新・描画の直前)
    if ( IsHit() )
    {
        isFinished = true;  // リザルトシーンへ
    }
}
  • 穴埋めCHARACTER_SIZE * CHARACTER_SIZE を入れて確認。

###課題07:リザルト画面の背景を表示しよう
ファイル:ResultScene.cpp

void ResultScene::Init()
{
    isFinished = false;

    // ToDo: 背景画像をロード
    if ( bgImage == -1 )
    {
        bgImage = LoadGraph( "______" );  // たとえば "image/result.png"
    }
}
  • 穴埋め"image/result.png" を指定し、スペースキーでタイトルに戻ることを確認。

発展課題

  • BGMを追加してみる
  • ハイスコアをファイルに書き出してみる
  • プレイヤーのアニメーション切り替え