CoRサンプル集: CoRでゲームをつくってみよう / 第07回
プレー:24
(人数:23)
クリア: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'
コード一覧
- start.rb
- title.rb
プレー内容を公開する
プレー履歴
新着レビュー
レビューはまだ投稿されていません。 作品の感想を作者に伝えるためにレビューを投稿してみませんか?
フォロー/シェア