CoRサンプル集: 強化されるザコに倒されるまでエンドレスSTG
ボスもゲームクリアもなし!倒されるまでエンドレスなシューティングゲームです!
・操作方法
移動:上下左右キー(SHIFTキー押しながらで加速)
攻撃:Z(Aキーで自動攻撃ON/OFF)
・その他
CoRでSTGが作れるかの実験です。
本当は全方向のSTGが作りたかったのですが、それはまた今度。
ゲーム内容ですが、レベルが時間経過で1~10まで上がります。
レベルが上がると敵とプレイヤーの両方が強化されます。
HPが0になったらゲーム終了です。
・操作方法
移動:上下左右キー(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
プレー内容を公開する
プレー履歴
-
ririru:
最終到達Lv.10 スコア:251580
(03/14 17:01)
-
@koutabot2:
最終到達Lv.4 スコア:14110
(07/28 13:13)
-
ririru:
最終到達Lv.10 スコア:413080
(01/22 00:27)
-
muga:
最終到達Lv.10 スコア:370170
(01/15 02:32)
-
ririru:
最終到達Lv.10 スコア:261310
(01/13 22:26)
-
ririru:
最終到達Lv.10 スコア:178700
(01/12 18:32)
-
ririru:
最終到達Lv.6 スコア:46090
(01/12 17:58)
-
てるてる:
最終到達Lv.6 スコア:32330
(12/21 15:50)
-
muga:
最終到達Lv.10 スコア:247070
(11/03 16:27)
-
退会したユーザー:
最終到達Lv.4 スコア:17970
(05/04 21:04)
新着レビュー
レビューはまだ投稿されていません。 作品の感想を作者に伝えるためにレビューを投稿してみませんか?
フォロー/シェア