CoRサンプル集: CoR版愚脳戦艦パル 試作

光楼さんの
「強化されるザコに倒されるまでエンドレスSTG」
のグラフィックと効果音等を替え少し弄っただけの作品です。
公開の許可も得ました。感謝です!
タイトル画面を作てみました。
ゲームオーバー時の初期化が完全じゃないような不安があります。
敵機の種類を追加
敵機と自機の衝突に当り判定をつけました。
敵機は全種類追加できました。

操作方法はキーボード
自機移動:↑↓←→キー 攻撃:Zキー オート攻撃:Aキー

著作者:Cyber-Rainforce
HP:3104式
URL:http://cyber-rainforce.net/
の曲使用
プレー:143 (人数:83) クリア:4 評価: 40 (4回)
#####システム変数用意##### debug_flag = false #デバックモード game_size_w = 800 game_size_h = 600 screen_limit = 50 #画面外と認定する範囲 background_speed = 40000 #宇宙背景速度 background2_speed = 5000 #星背景速度 background3_speed = 1000 last_result = nil #最終結果 titleID = 1 #ソースファイルの読込み用シーン scene 'load' do update do #ソースファイル「2.rd」の読込み require_code 'title.rb' #シーンチェンジ シーン「start」の開始 #change_scene 'start' change_scene 'title' end end scene 'start' do #####変数定義##### #===ゲーム変数用意===# game_time = 1 #ゲーム内時間 game_score = 0 #スコア game_level = 1 #難易度 stage = 1 TDS = 3 #敵弾速 TSyu = [] #敵の種類 bossID = 0 hokyuID = 0 level_up_time = 2000 #レベルアップ間隔 hit_score = 10 #攻撃を当てた時の加算スコア destroying_score = 100 #敵を倒した時の加算スコア spawn_timing = 100 #敵機が登場する間隔 ziki_size = [100 / 2, 100 / 2] #自機の大きさw,h invincible_cancellation_time = 0 #自機無敵解除時間(解除するゲーム内時間) existence_enemyid_array = [] #現存敵機ID管理配列 existence_selfbullet_array = [] #現存自弾ID管理配列 existence_enemybullet_array = [] #現存敵弾ID管理配列 bakuhatu_deltime_array = [] #爆発削除時間管理配列 [id,時間] automatic_attack = false #自動攻撃 key_control_flag = true #キー長押しによる連続処理防止用 #===ステータス変数===# ziki_type = 0 #自機タイプ(複数用意するとき用) #自機基礎ステータス 0:hp, 1:無敵時間, 2:移動速度, 3:最大移動速度, 4:攻撃間隔 5:発射弾 ziki_basic_status = [50, 100, 5, 8, 25, 0] #自機ステータス 0:hp, 1:無敵状態, 2:無敵時間, 3:移動速度, 4:攻撃間隔 5:発射弾 6:次回攻撃可能時刻 ziki_status = [ziki_basic_status[0], false, ziki_basic_status[1], ziki_basic_status[2], ziki_basic_status[4], ziki_basic_status[5], 0] #敵機基礎ステータス 0:hp, 1:移動速度, 2:攻撃間隔, 3:発射弾 4:行動パターン teki_basic_status = [[2, 0.8, 140, 1, 0], ["敵機新種追加時はここに"]] teki_status = [] #敵機個別ステータス 0:種別(今回は全て0), 1:hp, 2:移動速度, 3:攻撃間隔 4:発射弾 5:行動パターン 6:次回攻撃可能時刻 tekiIDD = nil txxx = [] tyyy = [] Cx = [] Cy = [] Ca = [] vx = nil vy = nil #ボスステータス boss_status =[50,2,50,1000,1] boss_HP = 300 bx = 400 by = -250 boss_AT = 10 endtime = 500 hx = 400 hy = 750 #弾ステータス 0:攻撃力 1:移動速度 2:進行パターン bullet_status = [[1, 10, 0], [1, 3, 0]] selfbullet_status = [] #自弾ステータス 0:種別 enemybullet_status = [] #敵弾ステータス 0:種別 #===レイヤー変数===# bg_layer = nil bg_layer2 = nil sc_bord = nil teki_layer = nil ziki_layer = nil boss_layer = nil hokyu_layer = nil bakuhatu_layer = nil tekidan_layer = nil zidan_layer = nil ui_layer = nil #===スプライト用変数定義===# text_sprite = nil #テキスト boss_img = nil #ボス hokyu_img = nil ziki_image = nil #自機 zidan_image = [] #自弾 teki_image = [] #敵機 tekidan_image = [] #敵弾 bakuhatu_image = [] #爆発 daibakuhatu_image = nil #大爆発 background_image = [nil, nil] #宇宙背景 background2_image = [nil, nil] #星背景 background3_image = [nil,nil] scbord_imag = nil #===サウンド用変数定義===# main_music = nil #音楽 secand_music = nil bakuhatu_sound = nil #効果音 daibakuhatu_sound =nil hit_sound = nil attack_sound = nil damage_sound = nil enemy_attack_sound = nil lv_up_sound = nil last_lv_up_sound = nil warning_sound = nil hokyu_sound = nil preload do #####画像素材読込み##### #===背景===# image '女体背景素材', id: 323091, frame_size: [400,600], frame_pattern: 2 image '柱背景素材', id: 323119 image '板背景素材', id: 323090 image 'スコアボード',id: 323141 #===機体===# image '自機素材', id: 323098 #, frame_size: [100, 100], frame_pattern: 4 #自機アニメ image '敵機素材', id: 323155, frame_size: [100, 100], frame_pattern: 12 #敵機アニメ image 'ボス素材', id: 319628, frame_size: [200, 200], frame_pattern: 2 image '補給素材', id: 323164, frame_size: [100, 100], frame_pattern: 2 #===弾===# image '自弾素材', id: 323100 #, frame_size: [5, 15], frame_pattern: 2 #自弾アニメ image '敵弾素材', id: 323118, frame_size: [20, 20], frame_pattern: 2 #敵弾アニメ #===爆発===# image '爆発素材', id: 323121, frame_size: [100, 100], frame_pattern: 2 #爆発アニメ #####音楽素材読込み##### #===音楽===# music 'メインBGM', id: 323117 music 'セカンドBGM', id: 323167 #===効果音===# sound '爆発音', id: 319444 sound '攻撃ヒット音', id: 319489 sound 'ボス爆発音', id: 319488 sound '攻撃音', id: 323101 sound '被弾音', id: 319563 sound 'レベルアップ音', id: 323104 sound '大爆発', id: 319488 sound '警報音', id: 319562 sound '補給', id: 323103 end create do #####レイヤー設定##### #追加時レイヤー変数定義忘れぬこと #===背景レイヤーの追加(一番奥)===# bg_layer = add_layer #奥 bg_layer2 = add_layer #手前 bg_layer3 = add_layer #===キャラクターレイヤーの追加(真ん中)===# teki_layer = add_layer # 敵機レイヤーの追加 boss_layer = add_layer # ボスレイヤーの追加 hokyu_layer = add_layer bakuhatu_layer = add_layer # 爆発レイヤーの追加 daibakuhatu_layer = add_layer ziki_layer = add_layer # 自機レイヤーの追加 tekidan_layer = add_layer # 敵弾レイヤーの追加 zidan_layer = add_layer # 自弾レイヤーの追加 # ===UIレイヤーの追加(手前)===# scb_layer = add_layer ui_layer = add_layer #####スプライト配置##### #===背景===# #女体背景1 background_image[0] = put_sprite '女体背景スプライト' do position 200, 0 scale 1.0, 1.0 frame_index 1 end #女体背景2 background_image[1] = put_sprite '女体背景スプライト' do position 200, -game_size_h scale 1.0, 1.0 frame_index 1 end #柱背景1 background2_image[0] = put_sprite '柱背景スプライト' do position 200, 0 scale 1.0, 1.0 frame_index 0 end #柱背景2 background2_image[1] = put_sprite '柱背景スプライト' do position 200, -game_size_h scale 1.0, 1.0 frame_index 0 end #第三背景 background3_image[0] = put_sprite '板背景スプライト' do position 0, 0 scale 1.0, 1.0 frame_index 0 end #第三背景 background3_image[1] = put_sprite '板背景スプライト' do position 0, -game_size_h scale 1.0, 1.0 frame_index 0 end #===自機===# ziki_image = put_sprite '自機スプライト' do position game_size_w / 2, 450 #game_size_h / 2 scale 0.5, 0.5 frame_index 0 end #==スコアボード==# scbord_img = put_sprite 'スコアボードスプライト' do position 0,0 scale 1.0,1.0 frame_index 0 end #===テキスト===# text_sprite = put_text '標準テキスト' do #position 10, game_size_h-22 position 10, 5 text '' end #####物理運動シミュレーション設定##### #===当たり判定設定===# # 当たり判定の大きさを(80, 70)にする # 当たり判定の位置を中心から(x, y)=(0, -10)ずらす ziki_image.collision_size(80, 70, 0, -10) #===画面外へ出られなくする===# ziki_image.collide_world! #===衝突時に動かない===# ziki_image.movable false #####スプライトをレイヤーに追加##### bg_layer.add background_image[0] #宇宙背景 bg_layer.add background_image[1] bg_layer2.add background2_image[0] #星背景 bg_layer2.add background2_image[1] bg_layer3.add background3_image[0] #星背景 bg_layer3.add background3_image[1] ziki_layer.add ziki_image #自機 #boss_layer.add boss_image #ボス #####アニメーション開始##### ziki_image.start_animation('ziki_animation') #自機 #####モーション開始##### background_image[0].start_motion('Nyotai_Down') #宇宙背景 background_image[1].start_motion('Nyotai_Down') background2_image[0].start_motion('Hasira_Down') #星背景 background2_image[1].start_motion('Hasira_Down') background3_image[0].start_motion('Ita_Down') #星背景 background3_image[1].start_motion('Ita_Down') #####サウンド準備##### #===音楽===# main_music = add_music('メインBGM') secand_music = add_music('セカンドBGM') #===効果音===# bakuhatu_sound = add_sound('爆発音') daibakuhatu_sound = add_sound('大爆発') hit_sound = add_sound('攻撃ヒット音') attack_sound = add_sound('攻撃音') damage_sound = add_sound('被弾音') boss_bakuhatu_sound = add_sound('ボス爆発音') lv_up_sound = add_sound('レベルアップ音') #last_lv_up_sound = add_sound('最終レベルアップ音') warning_sound = add_sound('警報音') hokyu_sound = add_sound('補給') #####サウンド再生##### main_music.play #change_scene 'title' end update do #if titleID == 1 #change_scene 'title' #end #####当たり判定##### #===自機と敵弾の衝突===# collision(ziki_image, tekidan_layer) do # 衝突したスプライトのペアを取得 # obj2がtekidan_layer obj1, obj2 = collision_pair #=====敵弾IDを調べる=====# i = 0 tekidan_id = nil tekidan_image_Length = getArrayLength(tekidan_image) #敵弾画像配列の長さ取得 while i < tekidan_image_Length if obj2 == tekidan_image[i] #obj2は敵弾画像配列の何番目と一致するか tekidan_id = i i = tekidan_image_Length #ループから抜ける end i += 1 end if ziki_status[1] == false #自機は無敵じゃないか #===効果===# damage_sound.play if bossID > 0 ziki_status[0] -= 1 #hp減少 else ziki_status[0] -= bullet_status[enemybullet_status[tekidan_id]][0] #hp減少 end #####敵弾消滅処理##### #===現存敵弾ID管理配列から消滅した敵弾IDを消す===# existence_enemybullet_array = dell_array(existence_enemybullet_array, tekidan_id) obj2.destroy #自機無敵設定 invincible_cancellation_time = game_time + ziki_status[2] ziki_status[1] = true end end #===自機と敵機の衝突===# collision(ziki_image, teki_layer) do # 衝突したスプライトのペアを取得 # obj2がtekidan_layer obj1, obj2 = collision_pair #=====敵IDを調べる=====# i = 0 teki_id = nil teki_image_Length = getArrayLength(teki_image) #敵弾画像配列の長さ取得 while i < teki_image_Length if obj2 == teki_image[i] #obj2は敵弾画像配列の何番目と一致するか teki_id = i i = teki_image_Length #ループから抜ける end i += 1 end if !ziki_status[1] #自機は無敵じゃないか #===効果===# damage_sound.play ziki_status[0] -= 2 #hp減少 #===爆発処理===# bakuhatu_id = getArrayLength(bakuhatu_image) #最後尾の配列番号取得 pos = obj1.position baku = bakuhatu(pos[0], pos[1], nil, teki_status[teki_id][2], bakuhatu_layer, bakuhatu_sound) #敵弾を配列に追加 bakuhatu_image << baku[0] #スプライト bakuhatu_deltime_array << [bakuhatu_id, game_time + baku[1]] #ID, time #===敵機破壊処理===# #現存敵機ID管理配列から消滅した敵IDを消す existence_enemyid_array = dell_array(existence_enemyid_array, teki_id) obj2.destroy #自機無敵設定 invincible_cancellation_time = game_time + ziki_status[2] ziki_status[1] = true end end #===自機と補給機の衝突===# if hokyuID == 2 collision(ziki_image, hokyu_layer) do # 衝突したスプライトのペアを取得 # obj2がtekidan_layer obj1, obj2 = collision_pair #自機は無敵じゃないか #===効果===# hokyu_sound.play ziki_status[0] = 100 #hp回復 hokyuID = 3 #===敵機破壊処理===# #obj2.destroy #自機無敵設定 invincible_cancellation_time = game_time + ziki_status[2] ziki_status[1] = true end end if ziki_status[0] > 0 #hp > 0 #if ziki_status[0] == 1 #hpが1なら警報 # warning_sound.play #end ziki_image.start_animation('ziki_invincible_animation') #別アニメを再生すると元のアニメは停止する else #自機破壊処理 case stage when 1 main_music.stop when 2 secand_music.stop end teki_id = nil #####全ての初期化##### #===ボスの削除===# if bossID < 10 && bossID > 0 #攻撃可能時刻か boss_img.destroy end bakuhatu_deltime_array.each do |item| #===管理配列から消す===# bakuhatu_deltime_array = dell_array(bakuhatu_deltime_array, item) #スプライトを消す bakuhatu_image[item[0]].destroy end #===自弾===# existence_selfbullet_array.each do |item| #===現存自弾ID管理配列から自弾IDを消す===# existence_selfbullet_array = dell_array(existence_selfbullet_array, item) #Debug(debug_flag, "消滅自弾ID:#{item}") zidan_image[item].destroy end #===敵機===# existence_enemyid_array.each do |item| #===現存敵機管理配列から敵機IDを消す===# existence_enemyid_array = dell_array(existence_enemyid_array, item) #Debug(debug_flag, "消滅敵機ID:#{item}") teki_image[item].destroy end #===敵弾===# existence_enemybullet_array.each do |item| #===現存敵弾ID管理配列から敵弾IDを消す===# existence_enemybullet_array = dell_array(existence_enemybullet_array, item) #Debug(debug_flag, "消滅敵弾ID:#{item}") tekidan_image[item].destroy end #last_result = "最終到達Lv.#{game_level} スコア:#{game_score}" #change_scene 'title' #start_scene 'end' #===ゲーム変数用意===# game_time = 1 #ゲーム内時間 game_score = 0 #スコア game_level = 1 #難易度 stage = 1 TDS = 3 #敵弾速 bossID = 0 hokyuID = 0 level_up_time = 2000 #レベルアップ間隔 hit_score = 10 #攻撃を当てた時の加算スコア destroying_score = 100 #敵を倒した時の加算スコア spawn_timing = 100 #敵機が登場する間隔 invincible_cancellation_time = 0 #自機無敵解除時間(解除するゲーム内時間) #existence_enemyid_array = [] #現存敵機ID管理配列 #existence_selfbullet_array = [] #現存自弾ID管理配列 #existence_enemybullet_array = [] #現存敵弾ID管理配列 #bakuhatu_deltime_array = [] #爆発削除時間管理配列 [id,時間] automatic_attack = false #自動攻撃 key_control_flag = true #キー長押しによる連続処理防止用 #===ステータス変数===# #自機基礎ステータス 0:hp, 1:無敵時間, 2:移動速度, 3:最大移動速度, 4:攻撃間隔 5:発射弾 ziki_basic_status = [50, 100, 5, 8, 25, 0] #自機ステータス 0:hp, 1:無敵状態, 2:無敵時間, 3:移動速度, 4:攻撃間隔 5:発射弾 6:次回攻撃可能時刻 ziki_status = [ziki_basic_status[0], false, ziki_basic_status[1], ziki_basic_status[2], ziki_basic_status[4], ziki_basic_status[5], 0] #敵機基礎ステータス 0:hp, 1:移動速度, 2:攻撃間隔, 3:発射弾 4:行動パターン #teki_basic_status = [[2, 0.8, 140, 1, 0], ["敵機新種追加時はここに"]] teki_basic_status[0][0] = 2 teki_basic_status[0][1] = 0.8 #teki_basic_status = [[2, 0.8, 140, 1, 0], ["敵機新種追加時はここに"]] teki_basic_status[0][2] = 140 #teki_status = [] #敵機個別ステータス 0:種別(今回は全て0), 1:hp, 2:移動速度, 3:攻撃間隔 4:発射弾 5:行動パターン 6:次回攻撃可能時刻 #ボスステータス boss_status =[50,2,50,1000,1] boss_HP = 300 bx = 400 by = -250 boss_AT = 10 endtime = 500 hx = 400 hy = 750 #弾ステータス 0:攻撃力 1:移動速度 2:進行パターン #bullet_status = [[1, 10, 0],[1, 3, 0]] #selfbullet_status = [] #自弾ステータス 0:種別 #enemybullet_status = [] #敵弾ステータス 0:種別 last_result = "最終到達Lv.#{game_level} スコア:#{game_score}" start_scene 'gameover' end #end #===敵機と自弾の衝突===# collision(teki_layer, zidan_layer) do # 衝突したスプライトのペアを取得 obj1, obj2 = collision_pair #=====敵IDを調べる=====# i = 0 teki_id = nil teki_image_Length = getArrayLength(teki_image) while i < teki_image_Length if obj1 == teki_image[i] teki_id = i i = teki_image_Length end i += 1 end #=====自弾IDを調べる=====# i = 0 zidan_id = nil zidan_image_Length = getArrayLength(zidan_image) while i < zidan_image_Length if obj2 == zidan_image[i] zidan_id = i i = zidan_image_Length end i += 1 end #===効果===# hit_sound.play #効果音再生 teki_status[teki_id][1] -= bullet_status[selfbullet_status[zidan_id]][0] #hp減少 #####消滅処理##### if (teki_status[teki_id][1] <= 0) && existence_enemyid_array.include?(teki_id) #(hp <= 0) && 敵IDが管理配列に残っているか←同時被弾時に消されたオブジェを参照しないようにする処置 #===爆発処理===# bakuhatu_id = getArrayLength(bakuhatu_image) #最後尾の配列番号取得 pos = obj1.position baku = bakuhatu(pos[0], pos[1], nil, teki_status[teki_id][2], bakuhatu_layer, bakuhatu_sound) #敵弾を配列に追加 bakuhatu_image << baku[0] #スプライト bakuhatu_deltime_array << [bakuhatu_id, game_time + baku[1]] #ID, time #===敵機破壊処理===# #現存敵機ID管理配列から消滅した敵IDを消す existence_enemyid_array = dell_array(existence_enemyid_array, teki_id) obj1.destroy #===スコア追加===# game_score += destroying_score * game_level end #===自弾消滅処理===# #現存自弾ID管理配列から消滅した自弾IDを消す existence_selfbullet_array = dell_array(existence_selfbullet_array, zidan_id) obj2.destroy #===スコア追加===# game_score += hit_score * game_level end #===ボスと自弾の衝突===# collision(boss_layer, zidan_layer) do # 衝突したスプライトのペアを取得 obj1, obj2 = collision_pair #=====敵IDを調べる=====# # i = 0 # teki_id = nil # teki_image_Length = getArrayLength(teki_image) # while i < teki_image_Length # if obj1 == teki_image[i] # teki_id = i # i = teki_image_Length # end # i += 1 # end #=====自弾IDを調べる=====# i = 0 zidan_id = nil zidan_image_Length = getArrayLength(zidan_image) while i < zidan_image_Length if obj2 == zidan_image[i] zidan_id = i i = zidan_image_Length end i += 1 end #===効果===# hit_sound.play #効果音再生 boss_HP = boss_HP - 1 #hp減少 #####消滅処理##### if boss_HP <= 0 && bossID < 10 #(hp <= 0) && 敵IDが管理配列に残っているか←同時被弾時に消されたオブジェを参照しないようにする処置 #===爆発処理===# bossID = 10 bakuhatu_id = getArrayLength(bakuhatu_image) #最後尾の配列番号取得 pos = obj1.position baku = daibakuhatu(pos[0], pos[1], nil, nil, bakuhatu_layer, daibakuhatu_sound) #敵弾を配列に追加 bakuhatu_image << baku[0] #スプライト bakuhatu_deltime_array << [bakuhatu_id, game_time + baku[1]] #ID, time #===敵機破壊処理===# #現存敵機ID管理配列から消滅した敵IDを消す #existence_enemyid_array = dell_array(existence_enemyid_array, teki_id) obj1.destroy #===スコア追加===# game_score = game_score + ziki_status[0] * 10000 end endtime = game_time + 150 #===自弾消滅処理===# #現存自弾ID管理配列から消滅した自弾IDを消す existence_selfbullet_array = dell_array(existence_selfbullet_array, zidan_id) obj2.destroy #===スコア追加===# game_score += hit_score * game_level end #####自機操作##### #===自動攻撃===# if keyboard.down?('A') && key_control_flag #key_control_flagで長押しによる連続した処理の実行を阻止 key_control_flag = false if automatic_attack automatic_attack = false else automatic_attack = true end elsif !keyboard.down?('A') && !key_control_flag key_control_flag = true end #===攻撃===# if (keyboard.down?('Z') || automatic_attack) && (ziki_status[6] <= game_time) case ziki_type #自機によって処理を変える when 0 #左右の銃口 zidan_id = getArrayLength(zidan_image) #最後尾の配列番号取得 pos = ziki_image.position #zidan_img = bullet_set('自弾スプライト', pos[0] + -25/2, pos[1] + -25/ 2, ziki_image.angle, "zidan_animation", nil, -bullet_status[ziki_status[5]][1], zidan_layer) #zidan_img2 = bullet_set('自弾スプライト', pos[0] + 25/2, pos[1] + -25/ 2, ziki_image.angle, "zidan_animation", nil, -bullet_status[ziki_status[5]][1], zidan_layer) zidan_img = bullet_set('自弾スプライト', pos[0] , pos[1] + -25/ 2, ziki_image.angle, "zidan_animation", nil, -bullet_status[ziki_status[5]][1], zidan_layer) zidan_img2 = bullet_set('自弾スプライト', pos[0] , pos[1] + -25/ 2, ziki_image.angle, "zidan_animation", nil, -bullet_status[ziki_status[5]][1], zidan_layer) #===自弾ステータス作成===# type = 0 selfbullet_status << type selfbullet_status << type #===自弾を配列に追加===# zidan_image << zidan_img #スプライト zidan_image << zidan_img2 existence_selfbullet_array << zidan_id #ID existence_selfbullet_array << zidan_id + 1 #Debug(debug_flag, "自弾ID:#{existence_selfbullet_array}\n ステータス:#{selfbullet_status}") else end #効果音再生 attack_sound.play #次回発射時刻設定 ziki_status[6] = game_time + ziki_status[4] end #===移動===# #===SHIFT===# if keyboard.down?('SHIFT') #SHIFT押してたら最大の速さに ziki_status[3] = ziki_basic_status[3] else ziki_status[3] = ziki_basic_status[2] end #===UP===# if keyboard.down?('UP') pos = ziki_image.position y_posi = pos[1] - ziki_status[3] #上にはみ出すか #if y_posi - ziki_size[1] / 2 < 0 # y_posi = ziki_size[1] / 2 #end #移動 ziki_image.position pos[0], y_posi end #===DOWN===# if keyboard.down?('DOWN') pos = ziki_image.position y_posi = pos[1] + ziki_status[3] #下にはみ出すか #if y_posi + ziki_size[1] / 2 > game_size_h # y_posi = game_size_h - ziki_size[1] / 2 #end #移動 ziki_image.position pos[0], y_posi end #===LEFT===# if keyboard.down?('LEFT') pos = ziki_image.position x_posi = pos[0] - ziki_status[3] #左にはみ出すか #if x_posi - ziki_size[0] / 2 < 0 # x_posi = ziki_size[0] / 2 #end #移動 ziki_image.position x_posi, pos[1] end #===RIGHT===# if keyboard.down?('RIGHT') pos = ziki_image.position x_posi = pos[0] + ziki_status[3] #右にはみ出すか #if x_posi + ziki_size[0] / 2 > game_size_w # x_posi = game_size_w - ziki_size[0] / 2 #end #移動 ziki_image.position x_posi, pos[1] end #####敵機操作##### #1機ごとに操作 existence_enemyid_array.each do |item| #===攻撃===# if teki_status[item][6] <= game_time #攻撃可能時刻か case teki_status[item][0] #機種によって処理を変える when 0 #中央の銃口 tekidan_id = getArrayLength(tekidan_image) #最後尾の配列番号取得 Zpos = ziki_image.position Tpos = teki_image[item].position pos = teki_image[item].position vx = Zpos[0] - Tpos[0] vy = Zpos[1] - Tpos[1] I = (vx**2 + vy**2) ** 0.5 if I == 0 I = 1 end vxx = vx / I vyy = vy / I vxxx = vxx * TDS vyyy = vyy * TDS tekidan_img = bullet_set('敵弾スプライト', pos[0], pos[1] + 50/2, teki_image[item].angle, "tekidan_animation", vxxx, vyyy, tekidan_layer) #tekidan_img = bullet_set('敵弾スプライト', pos[0], pos[1] + 50/2, teki_image[item].angle, "tekidan_animation", nil, bullet_status[teki_status[item][4]][1], tekidan_layer) #===敵弾ステータス作成===# type = 1 enemybullet_status << type #===敵弾を配列に追加===# tekidan_image << tekidan_img #スプライト existence_enemybullet_array << tekidan_id #ID #Debug(debug_flag, "敵弾ID:#{existence_enemybullet_array}\n ステータス:#{enemybullet_status}") else end #効果音再生 #enemy_attack_sound.play #次回発射時刻設定 teki_status[item][6] = game_time + teki_status[item][3] end end #ボス第一移動# case bossID when 2 if by > 180 #pos = boss_img.position bossID = 3 else by = by + 3 end boss_img.position bx, by when 3 #左に移動 if bx < 100 bossID = 4 else bx = bx - 3 end boss_img.position bx, by when 4 #右に移動 if bx > 700 bossID = 3 else bx = bx + 3 end boss_img.position bx, by when 10 if (endtime < game_time) && hokyuID == 0 case stage when 1 hokyuID = 1 when 2 secand_music.stop last_result = "最終到達Lv.#{game_level} スコア:#{game_score}" start_scene 'end' end end end #===ボス攻撃===# if (boss_AT <= game_time) && bossID < 10 && bossID > 0 #攻撃可能時刻か #中央の銃口 tekidan_id = getArrayLength(tekidan_image) #最後尾の配列番号取得 Zpos = ziki_image.position Tpos = boss_img.position pos = boss_img.position vx = Zpos[0] - Tpos[0] vy = Zpos[1] - Tpos[1] I = (vx**2 + vy**2) ** 0.5 if I == 0 I = 1 end vxx = vx / I vyy = vy / I vxxx = vxx * TDS vyyy = vyy * TDS tekidan_img = bullet_set('敵弾スプライト', pos[0] - 50, pos[1] + 100, nil, "tekidan_animation", vxxx, vyyy, tekidan_layer) tekidan_img2 = bullet_set('敵弾スプライト', pos[0] + 50, pos[1] + 100, nil, "tekidan_animation", vxxx, vyyy, tekidan_layer) #===敵弾ステータス作成===# type = 1 enemybullet_status << type enemybullet_status << type #===敵弾を配列に追加===# tekidan_image << tekidan_img #スプライト tekidan_image << tekidan_img2 existence_enemybullet_array << tekidan_id #ID existence_enemybullet_array << tekidan_id + 1 #existence_enemybullet_array << tekidan_id #tekidan_img = bullet_set('敵弾スプライト', pos[0] + 50, pos[1] + 100, nil, "tekidan_animation", vxxx, vyyy, tekidan_layer) #===敵弾ステータス作成===# #type = 1 #enemybullet_status << type #===敵弾を配列に追加===# #tekidan_image << tekidan_img #スプライト #existence_enemybullet_array << tekidan_id #ID #Debug(debug_flag, "敵弾ID:#{existence_enemybullet_array}\n ステータス:#{enemybullet_status}") #次回発射時刻設定 boss_AT = game_time + 15 end #補給機移動# case hokyuID when 2 hy = hy - 2 hokyu_img.position hx, hy when 3 hy = hy + 2 hokyu_img.position hx, hy when 4 #右に移動 if bx > 700 bossID = 3 else bx = bx + 3 end boss_img.position bx, by when 10 if endtime < game_time main_music.stop last_result = "最終到達Lv.#{game_level} スコア:#{game_score}" start_scene 'end' end end #####難易度上昇##### if (game_time % level_up_time == 0) && (bossID == 0) #ゲーム内時間level_up_timeごとにLv.10まで上昇 game_level += 1 #Lv.+1 case game_level #難易度上昇内容 when 2 #spawn_timing = 10000 spawn_timing = 90 #敵機が登場する間隔 #敵機基礎ステータス 0:hp, 1:移動速度, 2:攻撃間隔, 3:発射弾 4:行動パターン teki_basic_status[0][1] = 1 #弾ステータス 0:攻撃力 1:移動速度 2:進行パターン bullet_status[1][1] = 4 TDS = 4 #bossID = 1 when 3 spawn_timing = 87 #敵機が登場する間隔 #敵機基礎ステータス teki_basic_status[0][1] = 1.5 teki_basic_status[0][2] = 130 #弾ステータス bullet_status[0][1] = 11 #自機ステータス 0:hp, 1:無敵状態, 2:無敵時間, 3:移動速度, 4:攻撃間隔 5:発射弾 6:次回攻撃可能時刻 ziki_status[4] = 20 TDS = 5 when 4 spawn_timing = 80 #敵機が登場する間隔 #敵機基礎ステータス teki_basic_status[0][0] = 3 teki_basic_status[0][1] = 1.8 teki_basic_status[0][2] = 125 #弾ステータス bullet_status[0][1] = 12 bullet_status[1][1] = 5 #自機ステータス 0:hp, 1:無敵状態, 2:無敵時間, 3:移動速度, 4:攻撃間隔 5:発射弾 6:次回攻撃可能時刻 ziki_status[4] = 18 TDS = 6 when 5 spawn_timing = 70 #敵機が登場する間隔 #敵機基礎ステータス teki_basic_status[0][2] = 120 #弾ステータス bullet_status[1][1] = 5.5 #自機ステータス 0:hp, 1:無敵状態, 2:無敵時間, 3:移動速度, 4:攻撃間隔 5:発射弾 6:次回攻撃可能時刻 ziki_status[4] = 16 TDS = 7 when 6 spawn_timing = 60 #敵機が登場する間隔 #敵機基礎ステータス teki_basic_status[0][0] = 4 teki_basic_status[0][1] = 2 teki_basic_status[0][2] = 115 #弾ステータス bullet_status[0][1] = 13 bullet_status[1][1] = 6 #自機ステータス 0:hp, 1:無敵状態, 2:無敵時間, 3:移動速度, 4:攻撃間隔 5:発射弾 6:次回攻撃可能時刻 ziki_status[4] = 14 TDS = 8 when 7 spawn_timing = 50 #敵機が登場する間隔 #敵機基礎ステータス teki_basic_status[0][2] = 110 #弾ステータス bullet_status[0][1] = 14 #自機ステータス 0:hp, 1:無敵状態, 2:無敵時間, 3:移動速度, 4:攻撃間隔 5:発射弾 6:次回攻撃可能時刻 ziki_status[4] = 13 when 8 spawn_timing = 40 #敵機が登場する間隔 #敵機基礎ステータス teki_basic_status[0][0] = 5 teki_basic_status[0][1] = 2.5 teki_basic_status[0][2] = 100 #弾ステータス bullet_status[0][1] = 16 bullet_status[1][1] = 7 #自機ステータス 0:hp, 1:無敵状態, 2:無敵時間, 3:移動速度, 4:攻撃間隔 5:発射弾 6:次回攻撃可能時刻 ziki_status[4] = 11 when 9 spawn_timing = 30 #敵機が登場する間隔 #敵機基礎ステータス teki_basic_status[0][2] = 95 #弾ステータス bullet_status[0][1] = 17 bullet_status[1][1] = 7.5 #自機ステータス 0:hp, 1:無敵状態, 2:無敵時間, 3:移動速度, 4:攻撃間隔 5:発射弾 6:次回攻撃可能時刻 ziki_status[4] = 10 when 10 spawn_timing = 20 #敵機が登場する間隔 #敵機基礎ステータス teki_basic_status[0][0] = 6 teki_basic_status[0][2] = 80 #弾ステータス bullet_status[0][1] = 18 bullet_status[1][1] = 8 #自機ステータス 0:hp, 1:無敵状態, 2:無敵時間, 3:移動速度, 4:攻撃間隔 5:発射弾 6:次回攻撃可能時刻 ziki_status[4] = 8 when 11 spawn_timing = 10000 #敵機が登場する間隔 #敵機基礎ステータス teki_basic_status[0][0] = 6 teki_basic_status[0][2] = 80 #弾ステータス bullet_status[0][1] = 18 bullet_status[1][1] = 8 #自機ステータス 0:hp, 1:無敵状態, 2:無敵時間, 3:移動速度, 4:攻撃間隔 5:発射弾 6:次回攻撃可能時刻 ziki_status[4] = 7 bossID = 1 when 12 spawn_timing = 20 #敵機が登場する間隔 #敵機基礎ステータス teki_basic_status[0][0] = 6 teki_basic_status[0][2] = 80 #弾ステータス bullet_status[0][1] = 18 bullet_status[1][1] = 8 #自機ステータス 0:hp, 1:無敵状態, 2:無敵時間, 3:移動速度, 4:攻撃間隔 5:発射弾 6:次回攻撃可能時刻 ziki_status[4] = 6 when 22 spawn_timing = 10000 #敵機が登場する間隔 bossID = 1 end #===効果音再生===# #if game_level == 10 #レベル10に上がった時は最終レベルアップ音を再生 # last_lv_up_sound.play #else lv_up_sound.play #end #===テキスト点滅===# text_sprite.start_motion('flashing') end game_time += 1 end render do #####テキスト表示##### case ziki_status[0] #HPによって色変更 when 2 text_sprite.color '#EEEE00' #黄っぽい色 when 1 text_sprite.color '#EE0000' #赤っぽい色 #else #if text_sprite.color != '#EEEEEE' # text_sprite.color '#EEEEEE' #end end if debug_flag #デバッグモードか text_sprite.text("HP:#{ziki_status[0]}   Lv.#{game_level}    スコア:#{game_score}    ゲーム時間:#{game_time}   自動攻撃:#{automatic_attack}") else text_sprite.text("HP:#{ziki_status[0]}   Lv.#{game_level}    ステージ:#{stage} スコア:#{game_score}") end #####アニメ終了爆発削除##### bakuhatu_deltime_array.each do |item| if item[1] <= game_time #削除時間か #===管理配列から消す===# bakuhatu_deltime_array = dell_array(bakuhatu_deltime_array, item) #スプライトを消す bakuhatu_image[item[0]].destroy end end #####画面外敵削除##### existence_enemyid_array.each do |item| pos = teki_image[item].position #敵機位置取得 #敵移動# if TSyu[item] == nil TSyu[item]=0 end case TSyu[item] when 1 if pos[0] < 25 TSyu[item] = 2 else pos[0] = pos[0] - 3 end teki_image[item].position pos[0], pos[1] when 2 if pos[0] > 775 TSyu[item] = 1 else pos[0] = pos[0] + 3 end teki_image[item].position pos[0], pos[1] when 3 pos[0] = pos[0] + txxx[item] pos[1] = pos[1] + tyyy[item] teki_image[item].position pos[0], pos[1] when 4 Zpos = ziki_image.position pos[1] = pos[1] + 5 if pos[1] > Zpos[1] if pos[0] < Zpos[0] TSyu[item] = 5 else TSyu[item] = 6 end end teki_image[item].position pos[0], pos[1] when 5 pos[0] = pos[0] + 6 teki_image[item].position pos[0], pos[1] when 6 pos[0] = pos[0] - 6 teki_image[item].position pos[0], pos[1] when 7 #円運動の敵 Cr = 30 v = 0.2 #Cx[i] = ret_data[0] Cy[item] = Cy[item] + 5 #enemy_ai[i] = ret_data[2] pos[0] = Cr * Math.cos(Ca[item]) + Cx[item] pos[1] = Cr * Math.sin(Ca[item]) + Cy[item] Ca[item] = Ca[item] + v teki_image[item].position pos[0], pos[1] when 8 #自機誘導の敵 Zpos = ziki_image.position if (Zpos[0] > pos[0]) pos[0] = pos[0] + 8 else pos[0] = pos[0] - 8 end if (Zpos[1] > pos[1]) pos[1] = pos[1] + 8 else pos[1] = pos[1] - 8 end teki_image[item].position pos[0], pos[1] end if (pos[0] < -screen_limit) || (pos[0] > game_size_w + screen_limit) || (pos[1] < -screen_limit) || (pos[1] > game_size_h + screen_limit) #画面外判定 #===現存敵機管理配列から敵機IDを消す===# existence_enemyid_array = dell_array(existence_enemyid_array, item) #Debug(debug_flag, "消滅敵機ID:#{item}") teki_image[item].destroy end end #####画面外弾削除##### #===自弾===# existence_selfbullet_array.each do |item| pos = zidan_image[item].position #自弾位置取得 if (pos[0] < -screen_limit) || (pos[0] > game_size_w + screen_limit) || (pos[1] < -screen_limit) || (pos[1] > game_size_h + screen_limit) #画面外判定 #===現存自弾ID管理配列から自弾IDを消す===# existence_selfbullet_array = dell_array(existence_selfbullet_array, item) #Debug(debug_flag, "消滅自弾ID:#{item}") zidan_image[item].destroy end end #===敵弾===# existence_enemybullet_array.each do |item| pos = tekidan_image[item].position #敵弾位置取得 if (pos[0] < -screen_limit) || (pos[0] > game_size_w + screen_limit) || (pos[1] < -screen_limit) || (pos[1] > game_size_h + screen_limit) #画面外判定 #===現存敵弾ID管理配列から敵弾IDを消す===# existence_enemybullet_array = dell_array(existence_enemybullet_array, item) #Debug(debug_flag, "消滅敵弾ID:#{item}") tekidan_image[item].destroy end end #===補給機===# if hokyuID > 1 pos = hokyu_img.position #敵弾位置取得 if (pos[1] < -200) || (pos[1] > 800) #画面外判定 #Debug(debug_flag, "消滅敵弾ID:#{item}") hokyuID = 0 stage = stage + 1 #game_level += 1 #Lv.+1 main_music.stop secand_music.play bossID = 0 boss_HP = 400 bx = 400 by = -250 hokyu_img.destroy end end #####無敵終了処理##### if ziki_status[1] && (invincible_cancellation_time <= game_time) ziki_status[1] = false ziki_image.start_animation('ziki_animation') #通常のアニメーションに戻す end #####敵機生成##### if game_time % spawn_timing == 0 teki_id = getArrayLength(teki_image) #最後尾の配列番号取得 #===スプライト配置===# TSyu[teki_id] = rand(6) case TSyu[teki_id] when 0 teki_img = put_sprite '敵機0スプライト' do if rand(3) == 0 position ziki_image.position[0] + (rand(20)-10), -30 #X:自機X位置±10 else position rand(game_size_w - 50) + 25, -30 end scale 0.5, 0.5 #angle 180 frame_index 0 end when 1 teki_img = put_sprite '敵機1スプライト' do if rand(3) == 0 position ziki_image.position[0] + (rand(20)-10), -30 #X:自機X位置±10 else position rand(game_size_w - 50) + 25, -30 end scale 0.5, 0.5 #angle 180 frame_index 0 end when 2 teki_img = put_sprite '敵機2スプライト' do if rand(3) == 0 position ziki_image.position[0] + (rand(20)-10), -30 #X:自機X位置±10 else position rand(game_size_w - 50) + 25, -30 end scale 0.5, 0.5 #angle 180 frame_index 0 end Zpos = ziki_image.position Tpos = teki_img.position pos = teki_img.position vx = Zpos[0] - Tpos[0] vy = Zpos[1] - Tpos[1] I = (vx**2 + vy**2) ** 0.5 if I == 0 I = 1 end vxx = vx / I vyy = vy / I txxx[teki_id] = vxx * 5 tyyy[teki_id] = vyy * 5 TSyu[teki_id] = 3 when 3 teki_img = put_sprite '敵機3スプライト' do if rand(3) == 0 position ziki_image.position[0] + (rand(20)-10), -30 #X:自機X位置±10 else position rand(game_size_w - 50) + 25, -30 end scale 0.5, 0.5 #angle 180 frame_index 0 end TSyu[teki_id] = 4 when 4 teki_img = put_sprite '敵機4スプライト' do if rand(3) == 0 Cx[teki_id] = ziki_image.position[0] + (rand(20)-10) #X:自機X位置±10 else Cx[teki_id] = rand(game_size_w - 50) + 25 end Cy[teki_id] = -30 Ca[teki_id] = 0 position Cx[teki_id], Cy[teki_id] scale 0.5, 0.5 #angle 180 frame_index 0 end TSyu[teki_id] = 7 when 5 teki_img = put_sprite '敵機5スプライト' do if rand(3) == 0 position ziki_image.position[0] + (rand(20)-10), -30 #X:自機X位置±10 else position rand(game_size_w - 50) + 25, -30 end scale 0.5, 0.5 #angle 180 frame_index 0 end TSyu[teki_id] = 8 end #===アニメーション開始===# teki_img.start_animation('teki_animation') #敵機 #===当たり判定設定===# # 当たり判定の大きさを(80, 70)にする # 当たり判定の位置を中心から(x, y)=(0, 10)ずらす teki_img.collision_size(80, 70, 0, 10) #===敵機スプライトをレイヤーに追加===# teki_layer.add teki_img #===ステータス作成===# type = 0 teki_status << [type, teki_basic_status[type][0], teki_basic_status[type][1], teki_basic_status[type][2], teki_basic_status[type][3], teki_basic_status[type][4], 0] #Debug(debug_flag, "ステータス作成:#{teki_status[teki_id]}") #===スピードを与える===# tekiIDD = 0.8 #teki_status[teki_id][2] if tekiIDD == nil tekiIDD = 0.8 end #tekiIDD = teki_id teki_img.velocity(nil, tekiIDD) #===衝突時に動かない===# teki_img.movable false #===敵機を配列に追加===# teki_image << teki_img #スプライト existence_enemyid_array << teki_id #ID Debug(debug_flag, "#{game_time}\n teki_image配列長:#{getArrayLength(teki_image)} 敵機管理配列:#{existence_enemyid_array}") end #####ボス生成##### if bossID == 1 bossID = 2 #boss_id = getArrayLength(boss_image) #最後尾の配列番号取得 #===スプライト配置===# case stage when 1 boss_img = put_sprite 'ボス1スプライト' do position bx, by scale 1.0, 1.0 #angle 180 frame_index 0 end when 2 boss_img = put_sprite 'ボス2スプライト' do position bx, by scale 1.0, 1.0 #angle 180 frame_index 0 end end #===アニメーション開始===# boss_img.start_animation('boss_animation') #敵機 #===当たり判定設定===# # 当たり判定の大きさを(80, 70)にする # 当たり判定の位置を中心から(x, y)=(0, 10)ずらす boss_img.collision_size(180,180, 0, 0) #===ボススプライトをレイヤーに追加===# boss_layer.add boss_img boss_img.position bx,by #boss_img.collision_circle 65 #===ステータス作成===# #type = 0 #teki_status << [type, teki_basic_status[type][0], teki_basic_status[type][1], teki_basic_status[type][2], teki_basic_status[type][3], teki_basic_status[type][4], 0] #Debug(debug_flag, "ステータス作成:#{teki_status[teki_id]}") #===スピードを与える===# #teki_img.velocity(nil, teki_status[teki_id][2]) #===衝突時に動かない===# #teki_img.movable false #===敵機を配列に追加===# #teki_image << teki_img #スプライト #existence_enemyid_array << teki_id #ID #Debug(debug_flag, "#{game_time}\n teki_image配列長:#{getArrayLength(teki_image)} 敵機管理配列:#{existence_enemyid_array}") end #ボス第一移動# #if bossID == 2 # pos = boss_img.position # by = pos[1] + 5 # boss_img.position pos[0], by #end #end #####補給機生成##### if hokyuID == 1 hokyuID = 2 warning_sound.play #boss_id = getArrayLength(boss_image) #最後尾の配列番号取得 #===スプライト配置===# hx = rand(game_size_w - 100) + 50 hokyu_img = put_sprite '補給スプライト' do position hx, hy scale 1.0, 1.0 #angle 180 frame_index 0 end #===アニメーション開始===# hokyu_img.start_animation('hokyu_animation') #敵機 #===当たり判定設定===# # 当たり判定の大きさを(80, 70)にする # 当たり判定の位置を中心から(x, y)=(0, 10)ずらす hokyu_img.collision_size(80,80, 0, 0) #===ボススプライトをレイヤーに追加===# hokyu_layer.add hokyu_img hokyu_img.position hx,hy #boss_img.collision_circle 65 #===ステータス作成===# #type = 0 #teki_status << [type, teki_basic_status[type][0], teki_basic_status[type][1], teki_basic_status[type][2], teki_basic_status[type][3], teki_basic_status[type][4], 0] #Debug(debug_flag, "ステータス作成:#{teki_status[teki_id]}") #===スピードを与える===# #teki_img.velocity(nil, teki_status[teki_id][2]) #===衝突時に動かない===# #teki_img.movable false #===敵機を配列に追加===# #teki_image << teki_img #スプライト #existence_enemyid_array << teki_id #ID #Debug(debug_flag, "#{game_time}\n teki_image配列長:#{getArrayLength(teki_image)} 敵機管理配列:#{existence_enemyid_array}") end #ボス第一移動# #if bossID == 2 # pos = boss_img.position # by = pos[1] + 5 # boss_img.position pos[0], by #end end end #シーン「load」を開始 start_scene 'load' #start_scene 'start' #####ゲーム終了処理##### scene 'end' do #main_music.stop update do r = send_activity_feed("#{last_result}"); Debug(debug_flag, "アクティビティフィード送信:#{r}") #main_music.stop game_clear end end scene 'gameover' do update do r = send_activity_feed("#{last_result}"); Debug(debug_flag, "アクティビティフィード送信:#{r}") change_scene 'title' end end #####テキストスプライト定義##### text '標準テキスト' do origin :left_top #原点を画像左上に設定 font_size 20 color '#EEEEEE' #白っぽい色 #モーション設定 motion 'flashing' do 10.times do |i| #10回繰り返し to params: {alpha: 0.0}, duration: 100 to params: {alpha: 1.0}, duration: 100 end end end #####スプライト定義##### #===背景===# sprite '女体背景スプライト' do image '女体背景素材' origin :left_top #原点を画像左上に設定 #モーション設定 motion 'Nyotai_Down' do to params: {y: "#{+game_size_h}"}, duration: background_speed loop(true) end end sprite '柱背景スプライト' do image '柱背景素材' origin :left_top #原点を画像左上に設定 #モーション設定 motion 'Hasira_Down' do to params: {y: "#{+game_size_h}"}, duration: background2_speed loop(true) end end sprite '板背景スプライト' do image '板背景素材' origin :left_top #原点を画像左上に設定 #モーション設定 motion 'Ita_Down' do to params: {y: "#{+game_size_h}"}, duration: background3_speed loop(true) end end sprite 'スコアボードスプライト' do image 'スコアボード' origin :left_top #原点を画像左上に設定 end #===機体===# sprite '自機スプライト' do image '自機素材' origin :center #原点を画像中心に設定 animation 'ziki_animation', [0, 1, 2, 1], 5, true #アニメーション設定 animation 'ziki_invincible_animation', [0, 3, 1, 3, 2, 3, 1, 3], 4, true end sprite '敵機0スプライト' do image '敵機素材' origin :center #原点を画像中心に設定 animation 'teki_animation', [0, 1, 0, 1], 5, true #アニメーション設定 end sprite '敵機1スプライト' do image '敵機素材' origin :center #原点を画像中心に設定 animation 'teki_animation', [2, 3, 2, 3], 5, true #アニメーション設定 end sprite '敵機2スプライト' do image '敵機素材' origin :center #原点を画像中心に設定 animation 'teki_animation', [4, 5, 4, 5], 5, true #アニメーション設定 end sprite '敵機3スプライト' do image '敵機素材' origin :center #原点を画像中心に設定 animation 'teki_animation', [6, 7, 6, 7], 5, true #アニメーション設定 end sprite '敵機4スプライト' do image '敵機素材' origin :center #原点を画像中心に設定 animation 'teki_animation', [8, 9, 8, 9], 5, true #アニメーション設定 end sprite '敵機5スプライト' do image '敵機素材' origin :center #原点を画像中心に設定 animation 'teki_animation', [10,11,10,11], 5, true #アニメーション設定 end sprite 'ボス1スプライト' do image 'ボス素材' origin :center #原点を画像中心に設定 animation 'boss_animation', [0, 0, 0, 0], 5, true #アニメーション設定 end sprite 'ボス2スプライト' do image 'ボス素材' origin :center #原点を画像中心に設定 animation 'boss_animation', [1, 1, 1, 1], 5, true #アニメーション設定 end sprite '補給スプライト' do image '補給素材' origin :center #原点を画像中心に設定 animation 'hokyu_animation', [0, 1, 0, 1], 5, true #アニメーション設定 end #===弾===# sprite '自弾スプライト' do image '自弾素材' origin :center #原点を画像中心に設定 animation 'zidan_animation', [0, 1], 6, true #アニメーション設定 end sprite '敵弾スプライト' do image '敵弾素材' origin :center #原点を画像中心に設定 animation 'tekidan_animation', [0, 1], 3, true #アニメーション設定 end #===爆発===# sprite '爆発スプライト' do image '爆発素材' origin :center #原点を画像中心に設定 animation 'bakuhatu_animation', [0, 1, 0, 1], 3, false#[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15], 3, false #アニメーション設定 end #####ユーザー定義関数定義##### #===弾配置===# def bullet_set(name, x, y, agl, animation, xspeed, yspeed, layer) dan_img = put_sprite "#{name}" do position x, y scale 1.0, 1.0 angle agl frame_index 0 end #===アニメーション開始===# dan_img.start_animation("#{animation}") #===スピードを与える===# dan_img.velocity(xspeed, yspeed) #===衝突時に動かない===# dan_img.movable false #===レイヤーに追加===# layer.add dan_img dan_img end #===爆発開始===# def bakuhatu(x, y, xspeed, yspeed, layer, sound = nil) img = put_sprite '爆発スプライト' do position x, y scale 0.5, 0.5 frame_index 0 end #===アニメーション開始===# img.start_animation('bakuhatu_animation') #===スピードを与える===# img.velocity(xspeed, yspeed) #===レイヤーに追加===# layer.add img #===効果音再生===# sound.play time = 16 * 3 re = [img, time] #スプライトと削除時間 end #===大爆発開始===# def daibakuhatu(x, y, xspeed, yspeed, layer, sound = nil) img = put_sprite '爆発スプライト' do position x, y scale 2.0, 2.0 frame_index 0 end #===アニメーション開始===# img.start_animation('bakuhatu_animation') #===スピードを与える===# img.velocity(xspeed, yspeed) #===レイヤーに追加===# layer.add img #===効果音再生===# sound.play time = 16 * 3 re = [img, time] #スプライトと削除時間 end #===配列から要素を削除===# def dell_array(ary, element) #find_allメソッドを利用し、消したい要素を除いた配列を再生成 new_ary = ary.find_all do |item| #消したい要素ではない item != element end new_ary end #===デバッグログ===# def Debug(flag, text) if flag debug_log "#{text}" end end
コード一覧
投稿者:Rmakeic1 mini muga 対象Lv1 公開日:2019年01月18日 23:55:33
プレー内容を公開する

違反を通報する

コメントする

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

コメント一覧

Material 204926 1 mini 井戸乃博士(投稿日:2019/01/23 16:12, 履歴)
自機のワイドショット、いいですね
キーボードは細かい操作をやりづらいので
本作ぐらいがバランス的には
ちょうどいいのかもしれないと思います
最高レベルのスピード感は圧巻でした
Rmakeic1 mini muga(投稿日:2019/01/23 16:49, 履歴)
プレイ&コメントありがとうございます!
そうですねぇ。ゲームパッドで遊べれたらまた面白いと思うんですけどね。
CoRの処理速はとても魅力的ですが
タイトル画面作るのにも一苦労ですよ。
User icon mini ririru(投稿日:2019/01/23 04:25, 履歴)
敵の種類が増えると
一気に難易度が上がりますね
Rmakeic1 mini muga(投稿日:2019/01/23 15:07, 履歴)
そうですねぇ。そのぶんHPを高くしてみました。あれだけ敵や敵弾が表示されても処理速が落ちないCoRは凄いなと思いました。次はステージ2とかつくってみようかなとか考えてます。あ、プレイありがとうございます!
User icon mini ririru(投稿日:2019/01/19 04:53, 履歴)
CoRは動きが軽いのでいい感じですね
自分も普通の縦スクロールシューティングにしようかな…

操作方法を概要のところに書いたほうが分かりやすいと思います
Rmakeic1 mini muga(投稿日:2019/01/19 14:08, 履歴)
ありがとうございます!
縦シュー好きなのでそれも楽しみですね。

了解です!うっかり忘れてました。
プレー履歴
  • Rmakeic1 mini muga: 最終到達Lv.22 スコア:3357580
    (01/13 19:24)
  • Rmakeic1 mini muga: 最終到達Lv.22 スコア:3400780
    (06/23 16:26)
  • User icon mini ririru: 最終到達Lv.11 スコア:572570
    (01/24 23:17)
  • Material 204926 1 mini 井戸乃博士: 最終到達Lv.11 スコア:465160
    (01/23 16:06)
  • User icon mini ririru: 最終到達Lv.11 スコア:473130
    (01/20 23:27)
  • User icon mini ririru: 最終到達Lv.11 スコア:426020
    (01/19 05:58)
  • User icon mini ririru: 最終到達Lv.11 スコア:423700
    (01/19 05:20)
  • User icon mini ririru: 最終到達Lv.11 スコア:412360
    (01/19 04:51)

全てのプレー履歴を見る

新着レビュー

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

全てのレビュー

フォロー/シェア

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

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

リンク

プレイヤー

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

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