CoRサンプル集: CoRでゲームをつくってみよう / 第05回
          プレー:12
    (人数:11)
    クリア:0
評価: 0 (0回)
    
  #---------------------------------------
#シューティングサンプルゲーム(新CoR)
#---------------------------------------
#_/_/_/_/_/_/ 外部ソースファイルの読み込み _/_/_/_/_/_/
#_/_/_/_/_/_/ グローバル変数の定義 _/_/_/_/_/_/
#_/_/_/_/_/_/ ユーザ関数の定義 _/_/_/_/_/_/
#オブジェクトのアニメーションを変更
def setChangeAnime(obj, old_anime, new_anime)
  if old_anime != new_anime
     obj.start_animation(new_anime)
  end
  return new_anime
end
#画像オブジェクトの透明度を設定
def setAlpha(obj, a)
  wrk_obj = obj.instance_variable_get('@js_sprite')
  wrk_obj.alpha = a
end
#音量を変更する
def volBGM(obj, vol)
  js_obj = obj.instance_variable_get("@js_audio")
  js_obj.volume = vol
end
#********** startシーン ここから **********
scene 'start' do
  #_/_/_/ ローカル変数の定義 _/_/_/
  
  #キー入力用のフラグ
  key_flg_up_st    = nil;  key_flg_up_do    = nil;  key_flg_up_en    = nil
  key_flg_down_st  = nil;  key_flg_down_do  = nil;  key_flg_down_en  = nil
  key_flg_left_st  = nil;  key_flg_left_do  = nil;  key_flg_left_en  = nil
  key_flg_right_st = nil;  key_flg_right_do = nil;  key_flg_right_en = nil
  
  key_flg_z_st = nil;      key_flg_z_do = nil;      key_flg_z_en = nil
  
  
  #メイン背景オブジェクト
  obj_bg_00_spr = nil;  obj_bg_01_spr = nil
  
  obj_bg_pos_x = nil;   obj_bg_pos_y = nil
  
  obj_bg_speed = nil
  
  #プレイヤーキャラクターオブジェクト
  obj_char_spr = nil
  
  obj_char_pos_x = nil;      obj_char_pos_y = nil
  obj_char_size_w = nil;     obj_char_size_h = nil
  
  obj_char_pos_x_old = nil;  obj_char_pos_y_old = nil
  
  obj_char_speed = nil
  obj_char_speed_r_x = nil;  obj_char_speed_r_y = nil
  
  obj_char_w_max = nil;      obj_char_h_max = nil
  
  obj_char_hit_time = nil
  obj_char_invincible_time = nil
  
  obj_char_hit_x = nil;      obj_char_hit_y = nil
  obj_char_hit_w = nil;      obj_char_hit_h = nil
  
  obj_char_anime = nil
  
  obj_char_flg_up    = nil;  obj_char_flg_down  = nil
  obj_char_flg_left  = nil;  obj_char_flg_right = nil
  
  #プレイヤー弾オブジェクト
  obj_char_tama_spr = []
  
  obj_char_tama_pos_x = [];      obj_char_tama_pos_y = []
  obj_char_tama_size_w = nil;    obj_char_tama_size_h = nil
  
  obj_char_tama_scale_x = [];    obj_char_tama_scale_y = []
  obj_char_tama_scale_count = []
  
  obj_char_tama_speed = nil
  obj_char_tama_pos_x_old = [];  obj_char_tama_pos_y_old = []
  
  obj_char_tama_hit_x = nil;     obj_char_tama_hit_y = nil
  obj_char_tama_hit_w = nil;     obj_char_tama_hit_h = nil
  
  obj_char_tama_flg = []
  
  obj_char_tama_max = nil
  
  obj_char_tama_next      = nil
  obj_char_tama_next_time = nil
  
  obj_char_tama_flg_z = nil
  
  #敵キャラクターオブジェクト
  obj_enemy_spr = []
  
  obj_enemy_pos_x = [];        obj_enemy_pos_y = []
  obj_enemy_size_w = nil;      obj_enemy_size_h = nil
  
  obj_enemy_speed = nil;       obj_enemy_speed_rnd = nil
  obj_enemy_pos_x_old = [];    obj_enemy_pos_y_old = []
  
  obj_enemy_speed_r_x = [];    obj_enemy_speed_r_y = []
  
  obj_enemy_w_max = nil;       obj_enemy_h_max = nil
  
  obj_enemy_hit_time = []
  obj_enemy_invincible_time = nil
  
  obj_enemy_hit_x = nil;       obj_enemy_hit_y = nil
  obj_enemy_hit_w = nil;       obj_enemy_hit_h = nil
  
  obj_enemy_anime = []
  
  obj_enemy_max = nil
  
  obj_enemy_next      = nil
  obj_enemy_next_rnd  = nil
  obj_enemy_next_time = nil
  
  
  #音楽オブジェクト
  obj_bgm_main = nil
  
  
  #効果音オブジェクト
  obj_se_hit00 = nil
  
  
  preload do
    #----- ゲームロード時に実行される処理 -----
    #_/_/_/ 素材のロード _/_/_/
    
    #----- 画像 -----
    #メイン背景
    image 'img_bg_00', id: 76800
    
    #プレイヤーキャラクター
    image 'img_char',  id: 76793, frame_size: [64, 64]
    
    #プレイヤー弾
    image 'img_char_tama', id: 77342 
    
    #敵キャラクター
    image 'img_enemy', id: 77127, frame_size: [64, 64]
    
    
    #----- 音楽 -----
    #メイン音楽
    music 'bgm_main',  id: 77253
    
    
    #----- 効果音 -----
    #弾ヒット
    sound 'se_hit00',  id: 63622
    
    
  end
  
  create do
    #----- シーンロード時に実行される処理 -----
    #_/_/_/ 変数の初期化 _/_/_/
    
    #キー入力用のフラグ
    key_flg_up_st    = false;  key_flg_up_do    = false;  key_flg_up_en    = false
    key_flg_down_st  = false;  key_flg_down_do  = false;  key_flg_down_en  = false
    key_flg_left_st  = false;  key_flg_left_do  = false;  key_flg_left_en  = false
    key_flg_right_st = false;  key_flg_right_do = false;  key_flg_right_en = false
    
    key_flg_z_st = false;      key_flg_z_do = false;      key_flg_z_en = false
    
    
    #メイン背景オブジェクト
    obj_bg_pos_x = 0;  obj_bg_pos_y = 0
    
    obj_bg_speed = 1.5
    
    
    #プレイヤーキャラクターオブジェクト
    obj_char_size_w = 64;  obj_char_size_h = 64
    
    obj_char_pos_x = (800 - obj_char_size_w) / 2;  obj_char_pos_y = 500
    obj_char_pos_x_old = obj_char_pos_x;           obj_char_pos_y_old = obj_char_pos_y
    
    obj_char_speed = 5
    
    wrk_r = 45 * Math::PI / 180
    obj_char_speed_r_x = Math.cos(wrk_r) * obj_char_speed
    obj_char_speed_r_y = Math.sin(wrk_r) * obj_char_speed
    
    obj_char_w_max = (800 - obj_char_size_w)
    obj_char_h_max = (600 - obj_char_size_h)
    
    obj_char_hit_time = (-1)
    obj_char_invincible_time = (60 * 2)
    
    obj_char_hit_x = 25;   obj_char_hit_y = 20
    obj_char_hit_w = 39;   obj_char_hit_h = 50
    
    obj_char_anime = 'neutral'
    
    obj_char_flg_up    = false;  obj_char_flg_down  = false
    obj_char_flg_left  = false;  obj_char_flg_right = false
    
    
    #プレイヤー弾オブジェクト
    obj_char_tama_size_w = 16;   obj_char_tama_size_h = 64
    
    obj_char_tama_speed = 12
    
    obj_char_tama_hit_x = 1;     obj_char_tama_hit_y = 0
    obj_char_tama_hit_w = 15;    obj_char_tama_hit_h = 64
    
    obj_char_tama_max = 5
    
    obj_char_tama_next      = (60 * 0.5)
    obj_char_tama_next_time = (-1)
    
    obj_char_tama_flg_z = false
    
    i = 0; ilen = obj_char_tama_max
    while i < ilen do
      obj_char_tama_pos_x[i] = 800;  obj_char_tama_pos_y[i] = 600
      
      obj_char_tama_pos_x_old[i] = obj_char_tama_pos_x[i]
      obj_char_tama_pos_y_old[i] = obj_char_tama_pos_y[i]
      
      obj_char_tama_scale_x[i] = 1;  obj_char_tama_scale_y[i] = 0
      obj_char_tama_scale_count[i] = 0
      
      obj_char_tama_flg[i] = false
      
      i += 1
    end
    
    
    #敵キャラクターオブジェクト
    obj_enemy_size_w = 64;  obj_enemy_size_h = 64
    
    obj_enemy_w_max = (800 - obj_enemy_size_w)
    obj_enemy_h_max = (600 + obj_enemy_size_h)
    
    obj_enemy_speed = 3;    obj_enemy_speed_rnd = 2
    
    obj_enemy_invincible_time = (60 * 1)
    
    obj_enemy_hit_x = 20;   obj_enemy_hit_y = 20
    obj_enemy_hit_w = 44;   obj_enemy_hit_h = 55
    
    obj_enemy_max = 5
    
    obj_enemy_next      = (60 * 4)
    obj_enemy_next_rnd  = 60
    obj_enemy_next_time = (60 * 3)
    
    i = 0; ilen = obj_enemy_max
    while i < ilen do
      obj_enemy_pos_x[i] = 0;  obj_enemy_pos_y[i] = ((-64) * 2)
      
      obj_enemy_pos_x_old[i] = obj_enemy_pos_x[i]
      obj_enemy_pos_y_old[i] = obj_enemy_pos_y[i]
      
      obj_enemy_speed_r_x[i] = 0;  obj_enemy_speed_r_y[i] = 0
      
      obj_enemy_anime[i] = 'wait'
      
      obj_enemy_hit_time[i] = (-1)
      
      i += 1
    end
    
    #_/_/_/ 素材の初期化 _/_/_/
    
    #メイン背景
    obj_bg_00_spr = put_sprite 'spr_bg_00' do
      position obj_bg_pos_x, obj_bg_pos_y
      src_rect 0, 0, 800, 600
    end
    
    obj_bg_01_spr = put_sprite 'spr_bg_00' do
      position obj_bg_pos_x, (obj_bg_pos_y - 600)
      src_rect 0, 0, 800, 600
    end
    
    
    #プレイヤーキャラクター
    obj_char_spr = put_sprite 'spr_char' do
      position obj_char_pos_x, obj_char_pos_y
      frame_index 0
    end
    
    #アニメーションの開始
    obj_char_spr.start_animation('neutral')
    
    
    #プレイヤー弾
    i = 0; ilen = obj_char_tama_max
    while i < ilen do
      obj_char_tama_spr[i] = put_sprite 'spr_char_tama' do
        position obj_char_tama_pos_x[i], obj_char_tama_pos_y[i]
        src_rect 0, 0, 16, 64
      end
      obj_char_tama_spr[i].scale obj_char_tama_scale_x[i], obj_char_tama_scale_y[i]
      
      i += 1
    end
    
    
    #敵キャラクター
    i = 0; ilen = obj_enemy_max
    while i < ilen do
      obj_enemy_spr[i] = put_sprite 'spr_enemy' do
        position obj_enemy_pos_x[i], obj_enemy_pos_y[i]
        frame_index 0
      end
      
      #アニメーションの開始
      obj_enemy_spr[i].start_animation('wait')
      
      i += 1
    end
    
    
    #音楽
    obj_bgm_main = add_music('bgm_main')
    volBGM(obj_bgm_main, 0.5)
    
    
    #効果音
    obj_se_hit00 = add_sound('se_hit00')
    volBGM(obj_se_hit00, 0.7)
    
    
    #音楽の再生を開始する
    obj_bgm_main.play()
    
  end
  
  update do
    #----- シーンのメインループ処理 -----
    #_/_/_/ 入力の判定 _/_/_/
    
    #キー入力判定
    if keyboard.down?('UP')
      key_flg_up_st = true
    else
      key_flg_up_st = false
      key_flg_up_do = false
    end
    
    if keyboard.down?('DOWN')
      key_flg_down_st = true
    else
      key_flg_down_st = false
      key_flg_down_do = false
    end
    
    if keyboard.down?('LEFT')
      key_flg_left_st = true
    else
      key_flg_left_st = false
      key_flg_left_do = false
    end
    
    if keyboard.down?('RIGHT')
      key_flg_right_st = true
    else
      key_flg_right_st = false
      key_flg_right_do = false
    end
    
    if keyboard.down?('Z')
      key_flg_z_st = true
    else
      key_flg_z_st = false
      key_flg_z_do = false
    end
    
    
    #_/_/_/ メイン処理 _/_/_/
    
    #--- キー入力処理 ---
    #上
    if (key_flg_up_st && !key_flg_up_do)
      key_flg_up_do = true
      #--- 押された時に実行する処理 ---
      obj_char_flg_up = true
    elsif key_flg_up_do
      key_flg_up_en = true
      #--- 押されつづけている時に実行する処理 ---
      obj_char_flg_up = true
    elsif key_flg_up_en
      key_flg_up_en = false
      #--- 離された時に実行する処理 ---
      obj_char_flg_up = false
    end
    
    #下
    if (key_flg_down_st && !key_flg_down_do)
      key_flg_down_do = true
      #--- 押された時に実行する処理 ---
      obj_char_flg_down = true
    elsif key_flg_down_do
      key_flg_down_en = true
      #--- 押されつづけている時に実行する処理 ---
      obj_char_flg_down = true
    elsif key_flg_down_en
      key_flg_down_en = false
      #--- 離された時に実行する処理 ---
      obj_char_flg_down = false
    end
    
    #左
    if (key_flg_left_st && !key_flg_left_do)
      key_flg_left_do = true
      #--- 押された時に実行する処理 ---
      obj_char_flg_left = true
    elsif key_flg_left_do
      key_flg_left_en = true
      #--- 押されつづけている時に実行する処理 ---
      obj_char_flg_left = true
    elsif key_flg_left_en
      key_flg_left_en = false
      #--- 離された時に実行する処理 ---
      obj_char_flg_left = false
    end
    
    #右
    if (key_flg_right_st && !key_flg_right_do)
      key_flg_right_do = true
      #--- 押された時に実行する処理 ---
      obj_char_flg_right = true
    elsif key_flg_right_do
      key_flg_right_en = true
      #--- 押されつづけている時に実行する処理 ---
      obj_char_flg_right = true
    elsif key_flg_right_en
      key_flg_right_en = false
      #--- 離された時に実行する処理 ---
      obj_char_flg_right = false
    end
    
    #Zキー
    if (key_flg_z_st && !key_flg_z_do)
      key_flg_z_do = true
      #--- 押された時に実行する処理 ---
      obj_char_tama_flg_z = true
    elsif key_flg_z_do
      key_flg_z_en = true
      #--- 押されつづけている時に実行する処理 ---
      obj_char_tama_flg_z = true
    elsif key_flg_z_en
      key_flg_z_en = false
      #--- 離された時に実行する処理 ---
      obj_char_tama_flg_z = false
    end
    
    
    #--- プレイヤーキャラクター ---
    #プレイヤーキャラクター移動方向のフラグによって処理を分岐
    if (obj_char_flg_up && obj_char_flg_left)
      #プレイヤーキャラクターのアニメーションを変更
      obj_char_anime = setChangeAnime(obj_char_spr, obj_char_anime, 'left')
      
      #プレイヤーキャラクターの座標を変更
      obj_char_pos_x -= obj_char_speed_r_x;  obj_char_pos_y -= obj_char_speed_r_y
      
    elsif (obj_char_flg_down && obj_char_flg_left)
      #プレイヤーキャラクターのアニメーションを変更
      obj_char_anime = setChangeAnime(obj_char_spr, obj_char_anime, 'left')
      
      #プレイヤーキャラクターの座標を変更
      obj_char_pos_x -= obj_char_speed_r_x;  obj_char_pos_y += obj_char_speed_r_y
      
    elsif (obj_char_flg_up && obj_char_flg_right)
      #プレイヤーキャラクターのアニメーションを変更
      obj_char_anime = setChangeAnime(obj_char_spr, obj_char_anime, 'right')
      
      #プレイヤーキャラクターの座標を変更
      obj_char_pos_x += obj_char_speed_r_x;  obj_char_pos_y -= obj_char_speed_r_y
      
    elsif (obj_char_flg_down && obj_char_flg_right)
      #プレイヤーキャラクターのアニメーションを変更
      obj_char_anime = setChangeAnime(obj_char_spr, obj_char_anime, 'right')
      
      #プレイヤーキャラクターの座標を変更
      obj_char_pos_x += obj_char_speed_r_x;  obj_char_pos_y += obj_char_speed_r_y
      
    elsif obj_char_flg_up
      #プレイヤーキャラクターのアニメーションを変更
      obj_char_anime = setChangeAnime(obj_char_spr, obj_char_anime, 'neutral')
      
      #プレイヤーキャラクターの座標を変更
      obj_char_pos_y -= obj_char_speed
      
    elsif obj_char_flg_down
      #プレイヤーキャラクターのアニメーションを変更
      obj_char_anime = setChangeAnime(obj_char_spr, obj_char_anime, 'neutral')
      
      #プレイヤーキャラクターの座標を変更
      obj_char_pos_y += obj_char_speed
      
    elsif obj_char_flg_left
      #プレイヤーキャラクターのアニメーションを変更
      obj_char_anime = setChangeAnime(obj_char_spr, obj_char_anime, 'left')
      
      #プレイヤーキャラクターの座標を変更
      obj_char_pos_x -= obj_char_speed
      
    elsif obj_char_flg_right
      #プレイヤーキャラクターのアニメーションを変更
      obj_char_anime = setChangeAnime(obj_char_spr, obj_char_anime, 'right')
      
      #プレイヤーキャラクターの座標を変更
      obj_char_pos_x += obj_char_speed
      
    else
      #プレイヤーキャラクターのアニメーションを変更
      obj_char_anime = setChangeAnime(obj_char_spr, obj_char_anime, 'neutral')
    end
    
    #プレイヤーキャラクターの移動範囲制限
    if obj_char_pos_x < 0
      obj_char_pos_x = 0
    end
    if obj_char_pos_x > obj_char_w_max
      obj_char_pos_x = obj_char_w_max
    end
    if obj_char_pos_y < 0
      obj_char_pos_y = 0
    end
    if obj_char_pos_y > obj_char_h_max
      obj_char_pos_y = obj_char_h_max
    end
    
    #プレイヤーキャラクターのオブジェクトを移動する
    if (obj_char_pos_x_old != obj_char_pos_x) || 
       (obj_char_pos_y_old != obj_char_pos_y)
      
      obj_char_pos_x_old = obj_char_pos_x
      obj_char_pos_y_old = obj_char_pos_y
      
      obj_char_spr.position obj_char_pos_x, obj_char_pos_y
    end
    
    #プレイヤーキャラクターの無敵時間をカウント
    if obj_char_hit_time > (-1)
      obj_char_hit_time -= 1
      
      #無敵時間の場合プレイヤーキャラクターを点滅表示する
      if obj_char_hit_time == 0
        setAlpha(obj_char_spr, 1)
      elsif ((obj_char_hit_time % 10) == 0)
        setAlpha(obj_char_spr, 1)
      elsif ((obj_char_hit_time % 5) == 0)
        setAlpha(obj_char_spr, 0)
      elsif ((obj_char_hit_time % 3) == 0)
        setAlpha(obj_char_spr, 0.5)
      end
    end
    
    
    #--- プレイヤー弾 ---
    #プレイヤー弾の発射カウントダウン
    if obj_char_tama_next_time > (-1)
      obj_char_tama_next_time -= 1
    end
    
    #プレイヤー弾の発射
    if obj_char_tama_flg_z && (obj_char_tama_next_time < 0)
      obj_char_tama_next_time = obj_char_tama_next
      
      i = 0; ilen = obj_char_tama_max
      while i < ilen do
        #待機状態のプレイヤー弾を探す
        if !obj_char_tama_flg[i]
          #プレイヤー弾を移動状態にする
          obj_char_tama_pos_x[i] = obj_char_pos_x + ((obj_char_size_w - obj_char_tama_size_w) / 2)
          obj_char_tama_pos_y[i] = obj_char_pos_y
          
          obj_char_tama_scale_x[i] = 1;  obj_char_tama_scale_y[i] = 0
          obj_char_tama_scale_count[i] = 0
          
          obj_char_tama_flg[i] = true
          
          #ループを終了させる
          i = ilen
        end
        i += 1
      end
    end
    
    #プレイヤー弾の移動
    i = 0; ilen = obj_char_tama_max
    while i < ilen do
      if obj_char_tama_flg[i]
        #プレイヤー弾の座標値を移動させる
        obj_char_tama_pos_y[i] -= obj_char_tama_speed
        
        #プレイヤー弾のサイズ値を変更する
        if obj_char_tama_scale_y[i] < 1
          obj_char_tama_scale_count[i] += 1
          obj_char_tama_scale_y[i] = 
            (obj_char_tama_speed * obj_char_tama_scale_count[i]) / obj_char_tama_size_h
          
          if obj_char_tama_scale_y[i] > 1
            obj_char_tama_scale_y[i] = 1
          end
        end
        
        #プレイヤー弾の移動範囲制限
        if obj_char_tama_pos_y[i] < (obj_char_tama_size_h * (-2))
          obj_char_tama_flg[i] = false
          
          obj_char_tama_pos_x[i] = 800;  obj_char_tama_pos_y[i] = 600
          
          obj_char_tama_scale_x[i] = 1;  obj_char_tama_scale_y[i] = 0
          obj_char_tama_scale_count[i] = 0
        end
        
        #プレイヤー弾のオブジェクトを移動する
        if (obj_char_tama_pos_x_old[i] != obj_char_tama_pos_x[i]) || 
           (obj_char_tama_pos_y_old[i] != obj_char_tama_pos_y[i])
          
          obj_char_tama_pos_x_old[i] = obj_char_tama_pos_x[i]
          obj_char_tama_pos_y_old[i] = obj_char_tama_pos_y[i]
          
          obj_char_tama_spr[i].position obj_char_tama_pos_x[i], obj_char_tama_pos_y[i]
          
          obj_char_tama_spr[i].scale obj_char_tama_scale_x[i], obj_char_tama_scale_y[i]
        end
      end
      i += 1
    end
    
    
    #--- 敵キャラクター ---
    #敵キャラクターの出現カウントダウン
    obj_enemy_next_time -= 1
    
    #カウントダウンが0以下になったら敵を出現させる
    if obj_enemy_next_time < 0
      obj_enemy_next_time = obj_enemy_next + rand(obj_enemy_next_rnd)
      
      i = 0; ilen = obj_enemy_max
      while i < ilen do
        #待機状態の敵キャラクターを探す
        if obj_enemy_anime[i] == 'wait'
          #敵キャラクターを行動状態にする
          obj_enemy_pos_x[i] = rand(obj_enemy_w_max)
          obj_enemy_pos_y[i] = (obj_enemy_size_h * (-2))
          
          obj_enemy_speed_r_x[i] = obj_enemy_speed * (1 + ((-2) * rand(1)))
          obj_enemy_speed_r_y[i] = obj_enemy_speed - obj_enemy_speed_rnd + rand(obj_enemy_speed_rnd)
          
          #アニメーションの開始
          obj_enemy_anime[i] = setChangeAnime(obj_enemy_spr[i], obj_enemy_anime[i], 'move')
          
          #ループを終了させる
          i = ilen
        end
        i += 1
      end
    end
    
    #敵キャラクターの行動ループ
    i = 0; ilen = obj_enemy_max
    while i < ilen do
      #移動状態の敵キャラクターを探す
      if obj_enemy_anime[i] == 'move'
        #敵キャラクターの座標値を移動させる
        obj_enemy_pos_x[i] += obj_enemy_speed_r_x[i]
        obj_enemy_pos_y[i] += obj_enemy_speed_r_y[i]
        
        #敵キャラクターの移動範囲制限
        if obj_enemy_pos_x[i] < 0
          obj_enemy_pos_x[i] = 0
          
          #移動方向を反転させる
          obj_enemy_speed_r_x[i] = obj_enemy_speed_r_x[i] * (-1)
        end
        if obj_enemy_pos_x[i] > obj_enemy_w_max
          obj_enemy_pos_x[i] = obj_enemy_w_max
          
          #移動方向を反転させる
          obj_enemy_speed_r_x[i] = obj_enemy_speed_r_x[i] * (-1)
        end
        if obj_enemy_pos_y[i] > obj_enemy_h_max
          #画面外まで移動したら待機状態に戻す
          obj_enemy_anime[i] = setChangeAnime(obj_enemy_spr[i], obj_enemy_anime[i], 'wait')
          obj_enemy_speed_r_x[i] = 0;  obj_enemy_speed_r_y[i] = 0
        end
        
        #敵キャラクターのオブジェクトを移動する
        if (obj_enemy_pos_x_old[i] != obj_enemy_pos_x[i]) || 
           (obj_enemy_pos_y_old[i] != obj_enemy_pos_y[i])
          
          obj_enemy_pos_x_old[i] = obj_enemy_pos_x[i]
          obj_enemy_pos_y_old[i] = obj_enemy_pos_y[i]
          
          obj_enemy_spr[i].position obj_enemy_pos_x[i], obj_enemy_pos_y[i]
        end
        
        
        #プレイヤーキャラクターとの当たり判定
        if (obj_char_hit_time < 0) && 
           ((obj_char_pos_x + obj_char_hit_x) < (obj_enemy_pos_x_old[i] + obj_enemy_hit_w)) && 
           ((obj_char_pos_x + obj_char_hit_w) > (obj_enemy_pos_x_old[i] + obj_enemy_hit_x)) && 
           ((obj_char_pos_y + obj_char_hit_y) < (obj_enemy_pos_y_old[i] + obj_enemy_hit_h)) && 
           ((obj_char_pos_y + obj_char_hit_h) > (obj_enemy_pos_y_old[i] + obj_enemy_hit_y))
          
          #プレイヤーキャラクターに無敵時間を設定
          obj_char_hit_time = obj_char_invincible_time
        end
        
        #プレイヤー弾との当たり判定
        j = 0; jlen = obj_char_tama_max
        while j < jlen do
          #移動状態のプレイヤー弾を探す
          if obj_char_tama_flg[j] && 
             ((obj_char_tama_pos_x[j] + obj_char_tama_hit_x) < (obj_enemy_pos_x_old[i] + obj_enemy_hit_w)) && 
             ((obj_char_tama_pos_x[j] + obj_char_tama_hit_w) > (obj_enemy_pos_x_old[i] + obj_enemy_hit_x)) && 
             ((obj_char_tama_pos_y[j] + obj_char_tama_hit_y) < (obj_enemy_pos_y_old[i] + obj_enemy_hit_h)) && 
             ((obj_char_tama_pos_y[j] + obj_char_tama_hit_h) > (obj_enemy_pos_y_old[i] + obj_enemy_hit_y))
            
            #効果音を再生する
            obj_se_hit00.play()
            
            #敵キャラクターに無敵時間を設定
            obj_enemy_hit_time[i] = obj_enemy_invincible_time
            
            #アニメーションの開始
            obj_enemy_anime[i] = setChangeAnime(obj_enemy_spr[i], obj_enemy_anime[i], 'damage')
            
            #プレイヤー弾を待機状態に戻す
            obj_char_tama_flg[j] = false
            
            obj_char_tama_pos_x[j] = 800;  obj_char_tama_pos_y[j] = 600
            
            obj_char_tama_scale_x[j] = 1;  obj_char_tama_scale_y[j] = 0
            obj_char_tama_scale_count[j] = 0
            
            #プレイヤー弾のオブジェクトを移動する
            obj_char_tama_spr[j].position obj_char_tama_pos_x[j], obj_char_tama_pos_y[j]
            
            obj_char_tama_spr[j].scale obj_char_tama_scale_x[j], obj_char_tama_scale_y[j]
          end
          j += 1
        end
      end
      
      #ダメージ状態の敵キャラクターを探す
      if obj_enemy_anime[i] == 'damage'
        #敵キャラクターの無敵時間をカウント
        if obj_enemy_hit_time[i] > (-1)
          obj_enemy_hit_time[i] -= 1
          
          #無敵時間の場合プレイヤーキャラクターを点滅表示する
          if obj_enemy_hit_time[i] == 0
            setAlpha(obj_enemy_spr[i], 1)
            
            #無敵時間が終了したら待機状態に戻す
            obj_enemy_anime[i] = setChangeAnime(obj_enemy_spr[i], obj_enemy_anime[i], 'wait')
            obj_enemy_speed_r_x[i] = 0;  obj_enemy_speed_r_y[i] = 0
            
            obj_enemy_pos_x[i] = 0;  obj_enemy_pos_y[i] = ((-64) * 2)
            
            #敵キャラクターのオブジェクトを移動する
            obj_enemy_spr[i].position obj_enemy_pos_x[i], obj_enemy_pos_y[i]
          elsif ((obj_enemy_hit_time[i] % 10) == 0)
            setAlpha(obj_enemy_spr[i], 1)
          elsif ((obj_enemy_hit_time[i] % 5) == 0)
            setAlpha(obj_enemy_spr[i], 0)
          elsif ((obj_enemy_hit_time[i] % 3) == 0)
            setAlpha(obj_enemy_spr[i], 0.5)
          end
        end
      end
      i += 1
    end
    
    
    #--- 背景 ---
    #背景のスクロール
    obj_bg_pos_y += obj_bg_speed
    
    #背景のスクロールをループさせる
    if obj_bg_pos_y > 600
      obj_bg_pos_y -= 600
    end
    
    #背景のオブジェクトを移動する
    obj_bg_00_spr.position obj_bg_pos_x, obj_bg_pos_y
    obj_bg_01_spr.position obj_bg_pos_x, (obj_bg_pos_y - 600)
    
  end
  
  render do
    #----- シーンのメイン描画処理 -----
    #_/_/_/ 描画の変更 _/_/_/
    
    
  end
end
#********** startシーン ここまで **********
#_/_/_/_/_/_/ 素材の定義 _/_/_/_/_/_/
#メイン背景
sprite 'spr_bg_00' do
  image 'img_bg_00'
  origin :left_top
end
#プレイヤーキャラクター
sprite 'spr_char' do
  image 'img_char'
  origin :left_top
  
  animation 'neutral', [0, 3], 10, true
  animation 'left',    [1, 4], 10, true
  animation 'right',   [2, 5], 10, true
end
#プレイヤー弾
sprite 'spr_char_tama' do
  image 'img_char_tama'
  origin :left_top
end
#敵キャラクター
sprite 'spr_enemy' do
  image 'img_enemy'
  origin :left_top
  
  animation 'wait',    [0],          60, true
  animation 'move',    [0, 1, 2, 1], 10, true
  animation 'damage',  [3],          60, true
end
#_/_/_/_/_/_/ ゲームロード後最初のシーンを開始する _/_/_/_/_/_/
start_scene 'start'
  コード一覧
- start.rb
プレー内容を公開する
    プレー履歴
    プレー履歴はありません。
新着レビュー
      レビューはまだ投稿されていません。 作品の感想を作者に伝えるためにレビューを投稿してみませんか?
フォロー/シェア
    
    
    
    
  