CoRサンプル集: 復活の愚脳戦艦パル
マウスで操作できるパルを作りたいと思って試作
初代パルは遊べなくなったのでCoRに移植しようと思って?
著作者:Cyber-Rainforce
HP:3104式
URL:http://cyber-rainforce.net/
の曲使用
初代パルは遊べなくなったのでCoRに移植しようと思って?
著作者:Cyber-Rainforce
HP:3104式
URL:http://cyber-rainforce.net/
の曲使用
プレー:64
(人数:44)
クリア: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 = [100, 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: 319536, frame_size: [400,600], frame_pattern: 2
#image '柱背景素材', id: 323119
image '板背景素材', id: 319469
image 'スコアボード',id: 323141
#===機体===#
image '自機素材', id: 319405 #, 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: 319406 #, 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: 319461
music 'セカンドBGM', id: 319527
#===効果音===#
sound '爆発音', id: 319444
sound '攻撃ヒット音', id: 319489
sound 'ボス爆発音', id: 319564
sound '攻撃音', id: 78485
sound '被弾音', id: 319563
sound 'レベルアップ音', id: 323104
sound '大爆発', id: 319564
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 2
end
#柱背景2
background2_image[1] = put_sprite '柱背景スプライト' do
position 200, -game_size_h
scale 1.0, 1.0
frame_index 2
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] = 200 #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で長押しによる連続した処理の実行を阻止
if pointer.down? #&& Key_control_flag == true
if key_control_flag == true
key_control_flag = false
if automatic_attack
automatic_attack = false
else
automatic_attack = true
end
end
elsif !pointer.down? && !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
x_posi = pointer.x
y_posi = pointer.y
if x_posi + ziki_size[0] / 2 > game_size_w
x_posi = game_size_w - ziki_size[0] / 2
end
if x_posi - ziki_size[0] / 2 < 0
x_posi = ziki_size[0] / 2
end
if y_posi + ziki_size[1] / 2 > game_size_h
y_posi = game_size_h - ziki_size[1] / 2
end
if y_posi - ziki_size[1] / 2 < 0
y_posi = ziki_size[1] / 2
end
ziki_image.position x_posi, y_posi
#####敵機操作#####
#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
コード一覧
- start.rb
- title.rb
プレー内容を公開する
プレー履歴
新着レビュー
レビューはまだ投稿されていません。 作品の感想を作者に伝えるためにレビューを投稿してみませんか?
フォロー/シェア
エンディングもありますよ
トライしてみてね
このゲームにセーブ機能を搭載したらまた僕の悪いクセがでてしまうので
いまのうちにクリアしておくのをお勧めします
更に改良するかこのままにしておくか迷ってるところであります
あれもスピード感があってよかったです。
CoRの処理速はストレスなくていいですよね。
改めて弄ってみるとCoR結構便利かもしれない。
僕も光楼さんのプログラムをまんま参考にして作ったので
博士も僕のプログラムでよければまんま使ってもいいですよ。
画像を変えるだけでもけっこう楽しいかもです。
CoRて画像や効果音が登録されてなくても
テスト起動できるので便利ですね。
でもFlashの終了で効果音やBGMの試聴ができないのは
かなり痛いです。