//インポート
import gameCanvasUtil.*;
import debugger.*;

/** ゲームクラス。
 *
 * 学生が編集すべきソースコードです。
 */
public class game extends gameBase
{
    /********* 変数定義はこちらに *********/
    // 型 変数名;　の順に書いて定義する
    // ボールのX座標
    int[] ball_x = new int[10];
    // ボールのY座標
    int[] ball_y = new int[10];
    // ボールのX方向の速度
    int[] ball_speed_x = new int[10];
    // ボールのY方向の速度
    int[] ball_speed_y = new int[10];

    // ボールが生きているか、死んでいるかのフラグ
    boolean[] ball_alive_flag = new boolean[10];

    // 次に有効にするボール番号
    int next_alive_ball_num;

    // ゲームの経過時間
    int time;

    /********* 初期化の手順はこちらに *********/
    public void initGame()
    {
        for(int i=0; i<10; i=i+1)
        {
            // ボールの座標を初期化する
            // X座標を、0 ～ 600 の範囲の乱数で初期化する
            ball_x[i] = gc.rand(0, 600);
            ball_y[i] = 0;
            // ボールの速度を初期化する
            ball_speed_x[i] = 5;
            ball_speed_y[i] = 5;
            // ボールのフラグを初期化
            ball_alive_flag[i] = false;
        }

        // 次に有効にするボール番号を初期化
        next_alive_ball_num = 0;
        // ゲームの経過時間を初期化
        time = 0;
    }

    /********* 物体の移動等の更新処理はこちらに *********/
    public void updateGame()
    {
        // 30回に1回、ボールを有効に
        if(time % 30 == 0)
        {
            // ボールは10個までなので、それを超えない場合のみ実行する
            if(next_alive_ball_num < 10)
            {
                // ボールを有効に
                ball_alive_flag[next_alive_ball_num] = true;

                // 次のボールの番号へ。
                next_alive_ball_num = next_alive_ball_num + 1;
            }
        }
        
        for(int i=0; i<10; i=i+1)
        {
            // 有効(true)なボールのみ実行
            if(ball_alive_flag[i])
            {
                // Y方向に ball_speed_y ずつ進める
                ball_y[i] = ball_y[i] + ball_speed_y[i];

                // X方向に ball_speed_x ずつ進める
                ball_x[i] = ball_x[i] + ball_speed_x[i];

                // ボールが画面の上を越えるか、画面の下を越えた場合
                if(ball_y[i] < 0 || ball_y[i] > 456)
                {
                    // ボールのY方向の速度を反転させる
                    ball_speed_y[i] = -ball_speed_y[i];
                }

                // ボールが画面の右を越えるか、画面の左を越えた場合
                if(ball_x[i] > 616 || ball_x[i] < 0)
                {
                    // ボールのX方向の速度を反転させる
                    ball_speed_x[i] = -ball_speed_x[i];
                }
            }
        }

        // 時間を 1 進める
        time = time + 1;
    }

    /********* 画像の描画はこちらに *********/
    public void drawGame()
    {
        // 画面を白で塗りつぶします
        gc.clearScreen();

        // img0.png を描画します
        for(int i=0; i<10; i=i+1)
        {
            // 有効(true)なボールのみ実行
            if(ball_alive_flag[i])
            {
                gc.drawImage(0, ball_x[i], ball_y[i]);
            }
        }
    }

    /********* 終了時の処理はこちらに *********/
    public void finalGame() {}
}
