CoRサンプル集: 強化されるザコに倒されるまでエンドレスSTG

ボスもゲームクリアもなし!倒されるまでエンドレスなシューティングゲームです!

・操作方法
移動:上下左右キー(SHIFTキー押しながらで加速)
攻撃:Z(Aキーで自動攻撃ON/OFF)

・その他
CoRでSTGが作れるかの実験です。
本当は全方向のSTGが作りたかったのですが、それはまた今度。

ゲーム内容ですが、レベルが時間経過で1~10まで上がります。
レベルが上がると敵とプレイヤーの両方が強化されます。
HPが0になったらゲーム終了です。
プレー:248 (人数:113) クリア:50 評価: 80 (9回)
#####システム変数用意##### debug_flag = false #デバックモード game_size_w = 800 game_size_h = 600 screen_limit = 50 #画面外と認定する範囲 background_speed = 40000 #宇宙背景速度 background2_speed = 15000 #星背景速度 last_result = nil #最終結果 scene 'start' do #####変数定義##### #===ゲーム変数用意===# game_time = 1 #ゲーム内時間 game_score = 0 #スコア game_level = 1 #難易度 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 = [10, 100, 4, 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:次回攻撃可能時刻 #弾ステータス 0:攻撃力 1:移動速度 2:進行パターン bullet_status = [[1, 10, 0], [1, 3, 0]] selfbullet_status = [] #自弾ステータス 0:種別 enemybullet_status = [] #敵弾ステータス 0:種別 #===レイヤー変数===# bg_layer = nil bg_layer2 = nil teki_layer = nil ziki_layer = nil bakuhatu_layer = nil tekidan_layer = nil zidan_layer = nil ui_layer = nil #===スプライト用変数定義===# text_sprite = nil #テキスト ziki_image = nil #自機 zidan_image = [] #自弾 teki_image = [] #敵機 tekidan_image = [] #敵弾 bakuhatu_image = [] #爆発 background_image = [nil, nil] #宇宙背景 background2_image = [nil, nil] #星背景 #===サウンド用変数定義===# main_music = nil #音楽 bakuhatu_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 preload do #####画像素材読込み##### #===背景===# image '宇宙背景素材', id: 321171 image '星背景素材', id: 321172 #===機体===# image '自機素材', id: 321166, frame_size: [100, 100], frame_pattern: 4 #自機アニメ image '敵機素材', id: 321163, frame_size: [100, 100], frame_pattern: 3 #敵機アニメ #===弾===# image '自弾素材', id: 321167, frame_size: [5, 15], frame_pattern: 2 #自弾アニメ image '敵弾素材', id: 321165, frame_size: [5, 15], frame_pattern: 2 #敵弾アニメ #===爆発===# image '爆発素材', id: 321170, frame_size: [96, 96], frame_pattern: 16 #爆発アニメ #####音楽素材読込み##### #===音楽===# music 'メインBGM', id: 238714 #===効果音===# sound '爆発音', id: 78639 sound '攻撃ヒット音', id: 12897 sound '敵攻撃音', id: 93379 sound '攻撃音', id: 261744 sound '被弾音', id: 190654 sound 'レベルアップ音', id: 321184 sound '最終レベルアップ音', id: 321183 sound '警報音', id: 106736 end create do #####レイヤー設定##### #追加時レイヤー変数定義忘れぬこと #===背景レイヤーの追加(一番奥)===# bg_layer = add_layer #奥 bg_layer2 = add_layer #手前 #===キャラクターレイヤーの追加(真ん中)===# teki_layer = add_layer # 敵機レイヤーの追加 bakuhatu_layer = add_layer # 爆発レイヤーの追加 ziki_layer = add_layer # 自機レイヤーの追加 tekidan_layer = add_layer # 敵弾レイヤーの追加 zidan_layer = add_layer # 自弾レイヤーの追加 # ===UIレイヤーの追加(手前)===# ui_layer = add_layer #####スプライト配置##### #===背景===# #宇宙背景1 background_image[0] = put_sprite '宇宙背景スプライト' do position 0, 0 scale 1.0, 1.0 frame_index 0 end #宇宙背景2 background_image[1] = put_sprite '宇宙背景スプライト' do position 0, -game_size_h scale 1.0, 1.0 frame_index 0 end #星背景1 background2_image[0] = put_sprite '星背景スプライト' do position 0, 0 scale 1.0, 1.0 frame_index 0 end #星背景2 background2_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, game_size_h / 2 scale 0.5, 0.5 frame_index 0 end #===テキスト===# text_sprite = put_text '標準テキスト' do position 10, game_size_h-22 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] ziki_layer.add ziki_image #自機 #####アニメーション開始##### ziki_image.start_animation('ziki_animation') #自機 #####モーション開始##### background_image[0].start_motion('Space_Down') #宇宙背景 background_image[1].start_motion('Space_Down') background2_image[0].start_motion('star_Down') #星背景 background2_image[1].start_motion('star_Down') #####サウンド準備##### #===音楽===# main_music = add_music('メインBGM') #===効果音===# bakuhatu_sound = add_sound('爆発音') hit_sound = add_sound('攻撃ヒット音') attack_sound = add_sound('攻撃音') damage_sound = add_sound('被弾音') enemy_attack_sound = add_sound('敵攻撃音') lv_up_sound = add_sound('レベルアップ音') last_lv_up_sound = add_sound('最終レベルアップ音') warning_sound = add_sound('警報音') #####サウンド再生##### main_music.play end update do #####当たり判定##### #===自機と敵弾の衝突===# 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] #自機は無敵じゃないか #===効果===# damage_sound.play ziki_status[0] -= bullet_status[enemybullet_status[tekidan_id]][0] #hp減少 if ziki_status[0] > 0 #hp > 0 if ziki_status[0] == 1 #hpが1なら警報 warning_sound.play end #自機無敵設定 invincible_cancellation_time = game_time + ziki_status[2] ziki_status[1] = true ziki_image.start_animation('ziki_invincible_animation') #別アニメを再生すると元のアニメは停止する else #自機破壊処理 last_result = "最終到達Lv.#{game_level} スコア:#{game_score}" start_scene 'end' end end #####敵弾消滅処理##### #===現存敵弾ID管理配列から消滅した敵弾IDを消す===# existence_enemybullet_array = dell_array(existence_enemybullet_array, tekidan_id) obj2.destroy 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 #####自機操作##### #===自動攻撃===# 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) #===自弾ステータス作成===# 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) #最後尾の配列番号取得 pos = teki_image[item].position 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 #####難易度上昇##### if (game_time % level_up_time == 0) && (game_level < 10) #ゲーム内時間level_up_timeごとにLv.10まで上昇 game_level += 1 #Lv.+1 case game_level #難易度上昇内容 when 2 spawn_timing = 90 #敵機が登場する間隔 #敵機基礎ステータス 0:hp, 1:移動速度, 2:攻撃間隔, 3:発射弾 4:行動パターン teki_basic_status[0][1] = 1 #弾ステータス 0:攻撃力 1:移動速度 2:進行パターン bullet_status[1][1] = 4 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 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 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 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 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 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}    スコア:#{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 (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 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) #最後尾の配列番号取得 #===スプライト配置===# teki_img = put_sprite '敵機スプライト' 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 #===アニメーション開始===# 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]}") #===スピードを与える===# 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 end end start_scene 'start' #####ゲーム終了処理##### scene 'end' do update do r = send_activity_feed("#{last_result}"); Debug(debug_flag, "アクティビティフィード送信:#{r}") game_clear 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 'Space_Down' do to params: {y: "#{+game_size_h}"}, duration: background_speed loop(true) end end sprite '星背景スプライト' do image '星背景素材' origin :left_top #原点を画像左上に設定 #モーション設定 motion 'star_Down' do to params: {y: "#{+game_size_h}"}, duration: background2_speed loop(true) end 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 '敵機スプライト' do image '敵機素材' origin :center #原点を画像中心に設定 animation 'teki_animation', [0, 1, 2, 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], 6, true #アニメーション設定 end #===爆発===# sprite '爆発スプライト' do image '爆発素材' origin :center #原点を画像中心に設定 animation 'bakuhatu_animation', [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 1.0, 1.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
コード一覧
  • start.rb
投稿者:Material 185033 3 mini 光楼(114) 対象Lv1 公開日:2017年11月05日 22:59:14
プレー内容を公開する

違反を通報する

コメントする

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

コメント一覧

User icon mini gauchiking(投稿日:2017/11/10 21:37, 履歴)
ナイス
Material 185033 3 mini 光楼(114)(投稿日:2017/11/12 13:15, 履歴)
ナイスありがとうございます!
User icon mini mossotter(投稿日:2017/11/06 20:44, 履歴)
背景の星の時間差多層レイヤーが良かったです
Material 185033 3 mini 光楼(114)(投稿日:2017/11/08 19:32, 履歴)
コメントありがとうございます。
背景の2重スクロールに気付いてもらえて嬉しいです!
プレー履歴
  • User icon mini ririru: 最終到達Lv.10 スコア:251580
    (03/14 17:01)
  • User icon mini @koutabot2: 最終到達Lv.4 スコア:14110
    (07/28 13:13)
  • User icon mini ririru: 最終到達Lv.10 スコア:413080
    (01/22 00:27)
  • Rmakeic1 mini muga: 最終到達Lv.10 スコア:370170
    (01/15 02:32)
  • User icon mini ririru: 最終到達Lv.10 スコア:261310
    (01/13 22:26)
  • User icon mini ririru: 最終到達Lv.10 スコア:178700
    (01/12 18:32)
  • User icon mini ririru: 最終到達Lv.6 スコア:46090
    (01/12 17:58)
  • Material 319617 2 mini てるてる: 最終到達Lv.6 スコア:32330
    (12/21 15:50)
  • Rmakeic1 mini muga: 最終到達Lv.10 スコア:247070
    (11/03 16:27)
  • User icon mini 退会したユーザー: 最終到達Lv.4 スコア:17970
    (05/04 21:04)

全てのプレー履歴を見る

新着レビュー

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

全てのレビュー

フォロー/シェア

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

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

リンク

プレイヤー

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

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