CoRサンプル集: CoRでゲームをつくってみよう / 第07回

こちらのゲームは
CoRでゲームをつくってみよう
第07回 より面白くするために
サンプルコードです

スクリプトの参照はこちらから
プレー:18 (人数:17) クリア:5 評価: 0 (0回)
#--------------------------------------- #シューティングサンプルゲーム(新CoR) #--------------------------------------- #_/_/_/_/_/_/ 外部ソースファイルの読み込み _/_/_/_/_/_/ require_code 'title.rb' #_/_/_/_/_/_/ グローバル変数の定義 _/_/_/_/_/_/ #_/_/_/_/_/_/ ユーザ関数の定義 _/_/_/_/_/_/ #オブジェクトのアニメーションを変更 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 #自機狙い弾 def jikinerai_tama(char_x, char_y, ememy_x, ememy_y, speed) r = 0; x = 0; y = 0 if char_x == ememy_x if char_y > ememy_y y = (speed * (-1)) elsif char_y < ememy_y y = speed end else r = (Math.atan2((ememy_y - char_y), (ememy_x - char_x))) x = (Math.cos(r) * speed).to_f y = (Math.sin(r) * speed).to_f end ret_data = createArray() ret_data[0] = x ret_data[1] = y return ret_data 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 #システム関連 gameclear_flg = nil gameover_flg = nil score = nil; score_view = nil enemy_score = nil boss_score = nil char_zan = nil; char_zan_view = nil enemy_zan = nil; enemy_zan_view = nil boss_zan = 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_enemy_tama_next = nil obj_enemy_tama_next_time = [] obj_enemy_ai = [] obj_enemy_ai_next = nil obj_enemy_ai_next_time = [] #敵弾オブジェクト obj_enemy_tama_spr = [] obj_enemy_tama_pos_x = []; obj_enemy_tama_pos_y = [] obj_enemy_tama_size_w = nil; obj_enemy_tama_size_h = nil obj_enemy_tama_speed = nil obj_enemy_tama_speed_r_x = []; obj_enemy_tama_speed_r_y = [] obj_enemy_tama_pos_x_old = []; obj_enemy_tama_pos_y_old = [] obj_enemy_tama_w_max = nil; obj_enemy_tama_h_max = nil obj_enemy_tama_hit_x = nil; obj_enemy_tama_hit_y = nil obj_enemy_tama_hit_w = nil; obj_enemy_tama_hit_h = nil obj_enemy_tama_anime = [] obj_enemy_tama_max = nil #ボスキャラクターオブジェクト obj_boss_spr = nil obj_boss_pos_x = nil; obj_boss_pos_y = nil obj_boss_size_w = nil; obj_boss_size_h = nil obj_boss_pos_x_old = nil; obj_boss_pos_y_old = nil obj_boss_speed = nil obj_boss_speed_r_x = nil; obj_boss_speed_r_y = nil obj_boss_w_max = nil obj_boss_hit_time = nil obj_boss_invincible_time = nil obj_boss_hit_x = nil; obj_boss_hit_y = nil obj_boss_hit_w = nil; obj_boss_hit_h = nil obj_boss_ai = nil obj_boss_ai_next_y = nil obj_boss_ai_count = nil #ボス弾オブジェクト obj_boss_tama_spr = [] obj_boss_tama_pos_x = []; obj_boss_tama_pos_y = [] obj_boss_tama_size_w = nil; obj_boss_tama_size_h = nil obj_boss_tama_scale_x = []; obj_boss_tama_scale_y = [] obj_boss_tama_scale_count = [] obj_boss_tama_speed = nil obj_boss_tama_pos_x_old = []; obj_boss_tama_pos_y_old = [] obj_boss_tama_h_max = nil obj_boss_tama_hit_x = nil; obj_boss_tama_hit_y = nil obj_boss_tama_hit_w = nil; obj_boss_tama_hit_h = nil obj_boss_tama_flg = [] obj_boss_tama_max = nil obj_boss_tama_next = nil obj_boss_tama_next_time = nil #文字オブジェクト obj_minienemy_spr = nil obj_txt_enemyzan_spr = nil; obj_txt_enemyzan_no_spr = nil obj_txt_score_spr = nil; obj_txt_score_no_spr = nil obj_minichar_spr = nil obj_txt_charzan_spr = nil; obj_txt_charzan_no_spr = nil #音楽オブジェクト obj_bgm_main = nil obj_bgm_boss = nil obj_bgm_clear = nil #効果音オブジェクト obj_se_hit00 = nil obj_se_hit01 = nil obj_se_shoot00 = nil obj_se_shoot01 = nil obj_se_shoot02 = nil obj_se_bomb00 = 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] #敵弾 image 'img_enemy_tama', id: 77349, frame_size: [16, 16] #ボスキャラクター image 'img_boss', id: 78549 #ボス弾 image 'img_boss_tama', id: 77649 #----- 音楽 ----- #メイン音楽 music 'bgm_main', id: 77253 #ボス音楽 music 'bgm_boss', id: 143166 #メイン音楽 music 'bgm_gameclear', id: 48990 #----- 効果音 ----- #弾の敵ヒット sound 'se_hit00', id: 63622 #弾のボスヒット sound 'se_hit01', id: 78638 #プレイヤー弾の発射 sound 'se_shoot00', id: 263442 #敵弾の発射 sound 'se_shoot01', id: 78493 #ボス弾の発射 sound 'se_shoot02', id: 261744 #プレイヤーヒット sound 'se_bomb00', id: 78639 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 #システム関連 gameclear_flg = false gameover_flg = false score = 0; score_view = score enemy_score = 500 boss_score = 5000 char_zan = 5; char_zan_view = char_zan enemy_zan = 20; enemy_zan_view = enemy_zan boss_zan = 10 #メイン背景オブジェクト 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) obj_enemy_tama_next = (60 * 2) obj_enemy_ai_next = (60 * 1.5) 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) obj_enemy_tama_next_time[i] = obj_enemy_tama_next obj_enemy_ai[i] = 'wait' obj_enemy_ai_next_time[i] = obj_enemy_ai_next i += 1 end #敵弾オブジェクト obj_enemy_tama_size_w = 16; obj_enemy_tama_size_h = 16 obj_enemy_tama_speed = 5 obj_enemy_tama_w_max = (800 + (obj_enemy_tama_size_w * 2)) obj_enemy_tama_h_max = (600 + (obj_enemy_tama_size_h * 2)) obj_enemy_tama_hit_x = 3; obj_enemy_tama_hit_y = 3 obj_enemy_tama_hit_w = 13; obj_enemy_tama_hit_h = 13 obj_enemy_tama_max = 10 i = 0; ilen = obj_enemy_tama_max while i < ilen do obj_enemy_tama_pos_x[i] = 0 obj_enemy_tama_pos_y[i] = ((-64) * 2) obj_enemy_tama_speed_r_x[i] = 0 obj_enemy_tama_speed_r_y[i] = 0 obj_enemy_tama_pos_x_old[i] = obj_enemy_tama_pos_x[i] obj_enemy_tama_pos_y_old[i] = obj_enemy_tama_pos_y[i] obj_enemy_tama_anime[i] = 'wait' i += 1 end #ボスキャラクターオブジェクト obj_boss_pos_x = 800; obj_boss_pos_y = 600 obj_boss_size_w = 256; obj_boss_size_h = 160 obj_boss_pos_x_old = obj_boss_pos_x obj_boss_pos_y_old = obj_boss_pos_y obj_boss_speed = 3 obj_boss_speed_r_x = 0; obj_boss_speed_r_y = 0 obj_boss_w_max = (800 - obj_boss_size_w) obj_boss_hit_time = (-1) obj_boss_invincible_time = (60 * 1) obj_boss_hit_x = 60; obj_boss_hit_y = 50 obj_boss_hit_w = 196; obj_boss_hit_h = 140 obj_boss_ai = 'wait' obj_boss_ai_next_y = 60 obj_boss_ai_count = 0 #ボス弾オブジェクト obj_boss_tama_size_w = 16; obj_boss_tama_size_h = 64 obj_boss_tama_speed = 6 obj_boss_tama_hit_x = 1; obj_boss_tama_hit_y = 0 obj_boss_tama_hit_w = 15; obj_boss_tama_hit_h = 64 obj_boss_tama_h_max = (600 + obj_boss_tama_size_h) obj_boss_tama_max = 10 obj_boss_tama_next = (60 * 0.75) obj_boss_tama_next_time = 0 obj_boss_tama_next_type = 'wait' i = 0; ilen = obj_boss_tama_max while i < ilen do obj_boss_tama_pos_x[i] = 0 obj_boss_tama_pos_y[i] = ((-64) * 2) obj_boss_tama_scale_x[i] = 1; obj_boss_tama_scale_y[i] = 0 obj_boss_tama_scale_count[i] = 0 obj_boss_tama_pos_x_old[i] = obj_boss_tama_pos_x[i] obj_boss_tama_pos_y_old[i] = obj_boss_tama_pos_y[i] obj_boss_tama_flg[i] = false 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') #ボスキャラクター obj_boss_spr = put_sprite 'spr_boss' do position obj_boss_pos_x, obj_boss_pos_y src_rect 0, 0, obj_boss_size_w, obj_boss_size_h end #プレイヤー弾 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 #敵弾 i = 0; ilen = obj_enemy_tama_max while i < ilen do obj_enemy_tama_spr[i] = put_sprite 'spr_enemy_tama' do position obj_enemy_tama_pos_x[i], obj_enemy_tama_pos_y[i] frame_index 0 end i += 1 end #ボス弾 i = 0; ilen = obj_boss_tama_max while i < ilen do obj_boss_tama_spr[i] = put_sprite 'spr_boss_tama' do position obj_boss_tama_pos_x[i], obj_boss_tama_pos_y[i] src_rect 0, 0, 16, 64 end obj_boss_tama_spr[i].scale obj_boss_tama_scale_x[i], obj_boss_tama_scale_y[i] i += 1 end #残敵数 obj_minienemy_spr = put_sprite 'spr_enemy' do position 16, 0 frame_index 0 end #アニメーションの開始 obj_minienemy_spr.start_animation('wait') #サイズの変更 obj_minienemy_spr.scale (32 / obj_enemy_size_w), (32 / obj_enemy_size_h) obj_txt_enemyzan_spr = put_text 'spr_txt_info' do position 52, 6 end obj_txt_enemyzan_spr.text '×' obj_txt_enemyzan_no_spr = put_text 'spr_txt_info' do position 78, 6 end obj_txt_enemyzan_no_spr.text (format('%02d',enemy_zan_view)).to_s #スコア obj_txt_score_spr = put_text 'spr_txt_info' do position 320, 6 end obj_txt_score_spr.text 'SCORE' obj_txt_score_no_spr = put_text 'spr_txt_info' do position 400, 6 end obj_txt_score_no_spr.text (format('%06d',score_view)).to_s #残機 obj_minichar_spr = put_sprite 'spr_char' do position 696, 4 frame_index 0 end #アニメーションの開始 obj_minichar_spr.start_animation('wait') #サイズの変更 obj_minichar_spr.scale (32 / obj_char_size_w), (32 / obj_char_size_h) obj_txt_charzan_spr = put_text 'spr_txt_info' do position 732, 6 end obj_txt_charzan_spr.text '×' obj_txt_charzan_no_spr = put_text 'spr_txt_info' do position 758, 6 end obj_txt_charzan_no_spr.text (format('%02d',char_zan_view)).to_s #音楽 obj_bgm_main = add_music('bgm_main') volBGM(obj_bgm_main, 0.5) obj_bgm_boss = add_music('bgm_boss') volBGM(obj_bgm_boss, 0.5) obj_bgm_clear = add_music('bgm_gameclear') volBGM(obj_bgm_clear, 0.5) #効果音 obj_se_hit00 = add_sound('se_hit00') volBGM(obj_se_hit00, 0.7) obj_se_hit01 = add_sound('se_hit01') volBGM(obj_se_hit01, 0.7) obj_se_shoot00 = add_sound('se_shoot00') volBGM(obj_se_shoot00, 0.7) obj_se_shoot01 = add_sound('se_shoot01') volBGM(obj_se_shoot01, 1.2) obj_se_shoot02 = add_sound('se_shoot02') volBGM(obj_se_shoot02, 1.2) obj_se_bomb00 = add_sound('se_bomb00') volBGM(obj_se_bomb00, 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) && (char_zan > 0) #プレイヤーキャラクターのアニメーションを変更 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) && (char_zan > 0) #プレイヤーキャラクターのアニメーションを変更 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) && (char_zan > 0) #プレイヤーキャラクターのアニメーションを変更 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) && (char_zan > 0) #プレイヤーキャラクターのアニメーションを変更 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 && (char_zan > 0) #プレイヤーキャラクターのアニメーションを変更 obj_char_anime = setChangeAnime(obj_char_spr, obj_char_anime, 'neutral') #プレイヤーキャラクターの座標を変更 obj_char_pos_y -= obj_char_speed elsif obj_char_flg_down && (char_zan > 0) #プレイヤーキャラクターのアニメーションを変更 obj_char_anime = setChangeAnime(obj_char_spr, obj_char_anime, 'neutral') #プレイヤーキャラクターの座標を変更 obj_char_pos_y += obj_char_speed elsif obj_char_flg_left && (char_zan > 0) #プレイヤーキャラクターのアニメーションを変更 obj_char_anime = setChangeAnime(obj_char_spr, obj_char_anime, 'left') #プレイヤーキャラクターの座標を変更 obj_char_pos_x -= obj_char_speed elsif obj_char_flg_right && (char_zan > 0) #プレイヤーキャラクターのアニメーションを変更 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_hit_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_se_shoot00.play() #プレイヤー弾を移動状態にする 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 #ボスキャラクターとの当たり判定 wrk_boss_hit_flg = false if ((obj_boss_ai == 'left') || (obj_boss_ai == 'right')) && (obj_boss_hit_time < 0) && ((obj_boss_pos_x + obj_boss_hit_x) < (obj_char_tama_pos_x_old[i] + obj_char_tama_hit_w)) && ((obj_boss_pos_x + obj_boss_hit_w) > (obj_char_tama_pos_x_old[i] + obj_char_tama_hit_x)) && ((obj_boss_pos_y + obj_boss_hit_y) < (obj_char_tama_pos_y_old[i] + obj_char_tama_hit_h)) && ((obj_boss_pos_y + obj_boss_hit_h) > (obj_char_tama_pos_y_old[i] + obj_char_tama_hit_y)) wrk_boss_hit_flg = true #ボスキャラクターの残ライフを変更 boss_zan -= 1 if boss_zan < 1 #効果音を再生する obj_se_bomb00.play() #スコアの加算 score += boss_score obj_boss_ai = 'bomb' else #効果音を再生する obj_se_hit01.play() end #ボスキャラクターに無敵時間を設定 obj_boss_hit_time = obj_boss_invincible_time end #プレイヤー弾の移動範囲制限 if (obj_char_tama_pos_y[i] < (obj_char_tama_size_h * (-2))) || wrk_boss_hit_flg 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 #ゲームオーバー if (char_zan == 0) && (obj_char_hit_time < 0) gameover_flg = true end #--- 敵キャラクター --- #敵キャラクターの出現カウントダウン obj_enemy_next_time -= 1 #カウントダウンが0以下になったら敵を出現させる if obj_enemy_next_time < 0 && enemy_zan > 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' #敵キャラクターの残数を変更 enemy_zan -= 1 #敵キャラクターを行動状態にする 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) wrk_rnd = rand(3) case wrk_rnd when 0 then obj_enemy_ai[i] = 'left' when 1 then obj_enemy_ai[i] = 'right' else obj_enemy_ai[i] = 'straight' end #アニメーションの開始 obj_enemy_anime[i] = setChangeAnime(obj_enemy_spr[i], obj_enemy_anime[i], 'move') #ループを終了させる i = ilen end i += 1 end end #敵キャラクターの行動ループ wrk_enemy_count = 0 i = 0; ilen = obj_enemy_max while i < ilen do #移動状態の敵キャラクターを探す if obj_enemy_anime[i] == 'move' wrk_enemy_count += 1 #敵キャラクターのAI切り替えカウントダウン obj_enemy_ai_next_time[i] -= 1 #カウントダウンが0以下になったらAIをランダムに切り替える if obj_enemy_ai_next_time[i] < 0 obj_enemy_ai_next_time[i] = obj_enemy_ai_next wrk_rnd = rand(3) case wrk_rnd when 0 then obj_enemy_ai[i] = 'left' when 1 then obj_enemy_ai[i] = 'right' else obj_enemy_ai[i] = 'straight' end end #敵キャラクターの座標値を移動させる case obj_enemy_ai[i] when 'left' then obj_enemy_pos_x[i] -= obj_enemy_speed_r_x[i] when 'right' then obj_enemy_pos_x[i] += obj_enemy_speed_r_x[i] else end 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) obj_enemy_ai[i] = 'right' 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) obj_enemy_ai[i] = 'left' 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 obj_enemy_ai[i] = 'wait' 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_enemy_pos_x[i] > 0 #敵弾の発射カウントダウン if obj_enemy_tama_next_time[i] > (-1) obj_enemy_tama_next_time[i] -= 1 end #敵弾の発射 if obj_enemy_tama_next_time[i] < 0 obj_enemy_tama_next_time[i] = obj_enemy_tama_next j = 0; jlen = obj_enemy_tama_max while j < jlen do #待機状態の敵弾を探す if obj_enemy_tama_anime[j] == 'wait' #効果音を再生する obj_se_shoot01.play() #敵弾を移動状態にする obj_enemy_tama_pos_x[j] = obj_enemy_pos_x[i] + ((obj_enemy_size_w - obj_enemy_tama_size_w) / 2) - 10 obj_enemy_tama_pos_y[j] = obj_enemy_pos_y[i] + obj_enemy_size_h - 10 #敵弾の移動方向を決める wrk_p = [] wrk_p = jikinerai_tama((obj_char_pos_x + (obj_char_size_w / 2)), (obj_char_pos_y + (obj_char_size_h / 2)), (obj_enemy_tama_pos_x[j] + (obj_enemy_tama_size_w / 2)), (obj_enemy_tama_pos_y[j] + (obj_enemy_tama_size_h / 2)), obj_enemy_tama_speed) obj_enemy_tama_speed_r_x[j] = wrk_p[0] obj_enemy_tama_speed_r_y[j] = wrk_p[1] wrk_p.clear obj_enemy_tama_anime[j] = setChangeAnime(obj_enemy_tama_spr[j], obj_enemy_tama_anime[j], 'move') #ループを終了させる j = jlen end j += 1 end end 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_se_bomb00.play() #プレイヤーキャラクターの残機を変更 char_zan -= 1 #プレイヤーキャラクターに無敵時間を設定 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() #スコアの加算 score += enemy_score #敵キャラクターに無敵時間を設定 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' wrk_enemy_count += 1 #敵キャラクターの無敵時間をカウント 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_tama_next_time[i] = obj_enemy_tama_next obj_enemy_ai[i] = 'wait' #敵キャラクターのオブジェクトを移動する 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 #ボスの出現 if (enemy_zan == 0) && (wrk_enemy_count == 0) && (obj_boss_ai == 'wait') #音楽の再生を変更する obj_bgm_main.stop() obj_bgm_boss.play() obj_boss_ai = 'start' obj_boss_pos_x = (800 - obj_boss_size_w) / 2 obj_boss_pos_y = (0 - obj_boss_size_h) end #--- 敵弾 --- #敵弾の移動 i = 0; ilen = obj_enemy_tama_max while i < ilen do if obj_enemy_tama_anime[i] == 'move' #敵弾の座標値を移動させる obj_enemy_tama_pos_x[i] -= obj_enemy_tama_speed_r_x[i] obj_enemy_tama_pos_y[i] -= obj_enemy_tama_speed_r_y[i] #プレイヤーキャラクターとの当たり判定 wrk_char_hit_flg = false if (obj_char_hit_time < 0) && ((obj_char_pos_x + obj_char_hit_x) < (obj_enemy_tama_pos_x_old[i] + obj_enemy_tama_hit_w)) && ((obj_char_pos_x + obj_char_hit_w) > (obj_enemy_tama_pos_x_old[i] + obj_enemy_tama_hit_x)) && ((obj_char_pos_y + obj_char_hit_y) < (obj_enemy_tama_pos_y_old[i] + obj_enemy_tama_hit_h)) && ((obj_char_pos_y + obj_char_hit_h) > (obj_enemy_tama_pos_y_old[i] + obj_enemy_tama_hit_y)) #効果音を再生する obj_se_bomb00.play() #プレイヤーキャラクターの残機を変更 char_zan -= 1 #プレイヤーキャラクターに無敵時間を設定 obj_char_hit_time = obj_char_invincible_time wrk_char_hit_flg = true end #敵弾の移動範囲制限 if wrk_char_hit_flg || (obj_enemy_tama_pos_x[i] < (obj_enemy_tama_size_w * (-2))) || (obj_enemy_tama_pos_x[i] > (obj_enemy_tama_w_max)) || (obj_enemy_tama_pos_y[i] < (obj_enemy_tama_size_h * (-2))) || (obj_enemy_tama_pos_y[i] > (obj_enemy_tama_h_max)) obj_enemy_tama_pos_x[i] = 800; obj_enemy_tama_pos_y[i] = 600 obj_enemy_tama_anime[i] = setChangeAnime(obj_enemy_tama_spr[i], obj_enemy_tama_anime[i], 'wait') end #敵弾のオブジェクトを移動する if (obj_enemy_tama_pos_x_old[i] != obj_enemy_tama_pos_x[i]) || (obj_enemy_tama_pos_y_old[i] != obj_enemy_tama_pos_y[i]) obj_enemy_tama_pos_x_old[i] = obj_enemy_tama_pos_x[i] obj_enemy_tama_pos_y_old[i] = obj_enemy_tama_pos_y[i] obj_enemy_tama_spr[i].position obj_enemy_tama_pos_x[i], obj_enemy_tama_pos_y[i] end end i += 1 end #--- ボスキャラクター --- if obj_boss_ai != 'wait' #AIによってボスの移動パターンを変更 case obj_boss_ai when 'left' then #左移動中 obj_boss_pos_x -= obj_boss_speed when 'right' then #右移動中 obj_boss_pos_x += obj_boss_speed when 'bomb' obj_boss_pos_y -= (obj_boss_speed / 3) else #登場シーン obj_boss_pos_y += (obj_boss_speed / 2) end #ボスキャラクターの移動範囲制限 if obj_boss_pos_x < 0 obj_boss_pos_x = 0 obj_boss_ai = 'right' end if obj_boss_pos_x > obj_boss_w_max obj_boss_pos_x = obj_boss_w_max obj_boss_ai = 'left' end if obj_boss_pos_y > obj_boss_ai_next_y obj_boss_pos_y = obj_boss_ai_next_y obj_boss_ai = 'right' end #プレイヤーキャラクターとの当たり判定 if (obj_char_hit_time < 0) && ((obj_char_pos_x + obj_char_hit_x) < (obj_boss_pos_x_old + obj_boss_hit_w)) && ((obj_char_pos_x + obj_char_hit_w) > (obj_boss_pos_x_old + obj_boss_hit_x)) && ((obj_char_pos_y + obj_char_hit_y) < (obj_boss_pos_y_old + obj_boss_hit_h)) && ((obj_char_pos_y + obj_char_hit_h) > (obj_boss_pos_y_old + obj_boss_hit_y)) #効果音を再生する obj_se_bomb00.play() #プレイヤーキャラクターの残機を変更 char_zan -= 1 #プレイヤーキャラクターに無敵時間を設定 obj_char_hit_time = obj_char_invincible_time end #ボスキャラクターのオブジェクトを移動する if (obj_boss_pos_x_old != obj_boss_pos_x) || (obj_boss_pos_y_old != obj_boss_pos_y) obj_boss_pos_x_old = obj_boss_pos_x obj_boss_pos_y_old = obj_boss_pos_y obj_boss_spr.position obj_boss_pos_x, obj_boss_pos_y end #ボスキャラクターの無敵時間をカウント if (obj_boss_hit_time > (-1)) || (obj_boss_ai == 'bomb') obj_boss_hit_time -= 1 if obj_boss_hit_time < (-1) obj_boss_hit_time = obj_boss_invincible_time end #無敵時間の場合プレイヤーキャラクターを点滅表示する if obj_boss_hit_time == 0 setAlpha(obj_boss_spr, 1) elsif ((obj_boss_hit_time % 10) == 0) setAlpha(obj_boss_spr, 1) elsif ((obj_boss_hit_time % 5) == 0) setAlpha(obj_boss_spr, 0) elsif ((obj_boss_hit_time % 3) == 0) setAlpha(obj_boss_spr, 0.5) end end end #--- ボス弾 --- #ボス弾の発射カウントダウン if obj_boss_tama_next_time > (-1) && ((obj_boss_ai == 'left') || (obj_boss_ai == 'right')) obj_boss_tama_next_time -= 1 end #ボス弾の発射 if obj_boss_tama_next_time < 0 obj_boss_tama_next_time = obj_boss_tama_next #2発同時に発射するカウンター wrk_start_count = 0 i = 0; ilen = obj_boss_tama_max while i < ilen do #待機状態のボス弾を探す if !obj_boss_tama_flg[i] #ボス弾を移動状態にする if wrk_start_count < 1 #効果音を再生する obj_se_shoot02.play() obj_boss_tama_pos_x[i] = obj_boss_pos_x + ((obj_boss_size_w - obj_boss_tama_size_w) / 2) - 27 obj_boss_tama_pos_y[i] = obj_boss_pos_y + obj_boss_size_h - 20 else obj_boss_tama_pos_x[i] = obj_boss_pos_x + ((obj_boss_size_w - obj_boss_tama_size_w) / 2) + 27 obj_boss_tama_pos_y[i] = obj_boss_pos_y + obj_boss_size_h - 20 end obj_boss_tama_scale_x[i] = 1; obj_boss_tama_scale_y[i] = 0 obj_boss_tama_scale_count[i] = 0 obj_boss_tama_flg[i] = true #ループを終了させる wrk_start_count += 1 if wrk_start_count > 1 i = ilen end end i += 1 end end #ボス弾の移動 i = 0; ilen = obj_boss_tama_max while i < ilen do if obj_boss_tama_flg[i] #ボス弾の座標値を移動させる if obj_boss_tama_scale_y[i] < 1 case obj_boss_ai when 'left' then #左移動中 obj_boss_tama_pos_x[i] -= obj_boss_speed when 'right' then #右移動中 obj_boss_tama_pos_x[i] += obj_boss_speed else end obj_boss_tama_scale_count[i] += 1 obj_boss_tama_scale_y[i] = (obj_boss_tama_speed * obj_boss_tama_scale_count[i]) / obj_boss_tama_size_h if obj_boss_tama_scale_y[i] > 1 obj_boss_tama_scale_y[i] = 1 end else obj_boss_tama_pos_y[i] += obj_boss_tama_speed end #プレイヤーキャラクターとの当たり判定 wrk_char_hit_flg = false if (obj_char_hit_time < 0) && ((obj_char_pos_x + obj_char_hit_x) < (obj_boss_tama_pos_x_old[i] + obj_boss_tama_hit_w)) && ((obj_char_pos_x + obj_char_hit_w) > (obj_boss_tama_pos_x_old[i] + obj_boss_tama_hit_x)) && ((obj_char_pos_y + obj_char_hit_y) < (obj_boss_tama_pos_y_old[i] + obj_boss_tama_hit_h)) && ((obj_char_pos_y + obj_char_hit_h) > (obj_boss_tama_pos_y_old[i] + obj_boss_tama_hit_y)) #効果音を再生する obj_se_bomb00.play() #プレイヤーキャラクターの残機を変更 char_zan -= 1 #プレイヤーキャラクターに無敵時間を設定 obj_char_hit_time = obj_char_invincible_time wrk_char_hit_flg = true end #ボス弾の移動範囲制限 if wrk_char_hit_flg || (obj_boss_tama_pos_y[i] > obj_boss_tama_h_max) obj_boss_tama_pos_x[i] = 800; obj_boss_tama_pos_y[i] = 600 obj_boss_tama_flg[i] = false obj_boss_tama_scale_x[i] = 1; obj_boss_tama_scale_y[i] = 0 obj_boss_tama_scale_count[i] = 0 end #ボス弾のオブジェクトを移動する if (obj_boss_tama_pos_x_old[i] != obj_boss_tama_pos_x[i]) || (obj_boss_tama_pos_y_old[i] != obj_boss_tama_pos_y[i]) obj_boss_tama_pos_x_old[i] = obj_boss_tama_pos_x[i] obj_boss_tama_pos_y_old[i] = obj_boss_tama_pos_y[i] obj_boss_tama_spr[i].position obj_boss_tama_pos_x[i], obj_boss_tama_pos_y[i] obj_boss_tama_spr[i].scale obj_boss_tama_scale_x[i], obj_boss_tama_scale_y[i] end end i += 1 end #ゲームクリア if (obj_boss_ai == 'bomb') && (obj_boss_pos_y < (0 - obj_boss_size_h)) gameclear_flg = true 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) #--- 残敵数 --- if enemy_zan < 0 enemy_zan = 0 end if enemy_zan != enemy_zan_view enemy_zan_view = enemy_zan obj_txt_enemyzan_no_spr.text (format('%02d',enemy_zan_view)).to_s end #--- スコア --- #スコアの最大値 if score > 999999 score = 999999 end #スコア表示の変更 if score_view < score if (score - score_view) > 1000 score_view += 39 else score_view += 17 end if score_view > score score_view = score end obj_txt_score_no_spr.text (format('%06d',score_view)).to_s end #--- 残機 --- if char_zan < 0 char_zan = 0 end if char_zan != char_zan_view char_zan_view = char_zan obj_txt_charzan_no_spr.text (format('%02d',char_zan_view)).to_s end #シーンの移動 if gameclear_flg || gameover_flg #音楽の再生を停止する obj_bgm_main.stop() obj_bgm_boss.stop() #画像素材を開放する obj_bg_00_spr.destroy; obj_bg_01_spr.destroy obj_char_spr.destroy i = 0; ilen = obj_char_tama_max while i < ilen do obj_char_tama_spr[i].destroy i += 1 end i = 0; ilen = obj_enemy_max while i < ilen do obj_enemy_spr[i].destroy i += 1 end i = 0; ilen = obj_enemy_tama_max while i < ilen do obj_enemy_tama_spr[i].destroy i += 1 end obj_boss_spr.destroy i = 0; ilen = obj_boss_tama_max while i < ilen do obj_boss_tama_spr[i].destroy i += 1 end obj_minienemy_spr.destroy obj_txt_enemyzan_spr.destroy; obj_txt_enemyzan_no_spr.destroy obj_txt_score_spr.destroy; obj_txt_score_no_spr.destroy obj_minichar_spr.destroy obj_txt_charzan_spr.destroy; obj_txt_charzan_no_spr.destroy #配列を開放する obj_char_tama_spr.clear obj_char_tama_pos_x.clear; obj_char_tama_pos_y.clear obj_char_tama_scale_x.clear; obj_char_tama_scale_y.clear obj_char_tama_scale_count.clear obj_char_tama_pos_x_old.clear; obj_char_tama_pos_y_old.clear obj_char_tama_flg.clear obj_enemy_spr.clear obj_enemy_pos_x.clear; obj_enemy_pos_y.clear obj_enemy_pos_x_old.clear; obj_enemy_pos_y_old.clear obj_enemy_speed_r_x.clear; obj_enemy_speed_r_y.clear obj_enemy_hit_time.clear obj_enemy_anime.clear obj_enemy_ai.clear obj_enemy_ai_next_time.clear obj_enemy_tama_pos_x.clear obj_enemy_tama_pos_y.clear obj_enemy_tama_speed_r_x.clear obj_enemy_tama_speed_r_y.clear obj_enemy_tama_pos_x_old.clear obj_enemy_tama_pos_y_old.clear obj_enemy_tama_anime.clear obj_enemy_tama_next_time.clear obj_boss_tama_pos_x.clear obj_boss_tama_pos_y.clear obj_boss_tama_scale_x.clear; obj_boss_tama_scale_y.clear obj_boss_tama_scale_count.clear obj_boss_tama_pos_x_old.clear obj_boss_tama_pos_y_old.clear obj_boss_tama_flg.clear #アクティビティフィードの送信 wrk_str = 'SCORE ' + (score).to_s wrk_result = send_activity_feed(wrk_str) if gameclear_flg #クリア画面の音楽を再生する obj_bgm_clear.play() #ゲームクリア画面に移動 game_clear else #gameoverシーンに移動 change_scene "gameover" end end 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 'wait', [3], 60, true 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 #敵弾 sprite 'spr_enemy_tama' do image 'img_enemy_tama' origin :left_top animation 'wait', [0], 60, true animation 'move', [0, 1, 2], 5, true end #ボスキャラクター sprite 'spr_boss' do image 'img_boss' origin :left_top end #ボス弾 sprite 'spr_boss_tama' do image 'img_boss_tama' origin :left_top end #----- 文字の定義 ----- text 'spr_txt_info' do origin :left_top font_size 18 color '#FFFFFF' end #_/_/_/_/_/_/ ゲームロード後最初のシーンを開始する _/_/_/_/_/_/ start_scene 'title'
コード一覧
投稿者:Cdv30200 aoi icon mini aoihikawa 対象Lv1 公開日:2022年08月18日 18:52:56
プレー内容を公開する

違反を通報する

コメントする

コメントするには、ログインする必要があります。

コメント一覧

Material 71926 1 mini なとおとき(投稿日:2022/08/21 18:26, 履歴)
以前よりばにゅーんたちの知能が上がっている気がする
プレー履歴

全てのプレー履歴を見る

新着レビュー

レビューはまだ投稿されていません。 作品の感想を作者に伝えるためにレビューを投稿してみませんか?

全てのレビュー

フォロー/シェア

ブログ/Wiki/掲示板で共有する

Rmake内(ブログ/Wiki/掲示板)に貼り付ける場合は以下のタグを利用してください。

リンク

プレイヤー

外部ホームページに貼り付ける

外部ホームページに貼り付ける場合は以下のタグを利用してください。