CoRサンプル集: カッテージ
プレー:154
(人数:39)
クリア:13
評価: 29 (3回)
scene 'start' do
#変数を設定していきます
#本コードはサンプルの「まじたいが跳ねるだけ」を改変しています
#主役の丸の変数
maru00 = nil
#丸の生成を管理する変数と初期座標に使う配列
oriset=0
pp=[nil,nil,nil,nil]
#ブロックのスプライトを入れる配列
block=[nil]
#今回使わなかったが壁ブロックのスプライトを入れる配列
#sikaku=[nil]
#丸がブロックにヒットした時、何個ヒットしたかを数える変数と、効果音用の配列
hit=0
se=[nil,nil,nil,nil,nil,nil,nil,nil]
#現在のステージ数と、新ステージ生成で使う変数
stage=0
stageset=0
#3つのレイヤー
layer01 = nil #ブロック用
layer02 = nil #丸用
layer03 = nil #壁ブロック用(今回出番なし)
#テキスト用変数
text00 = nil
preload do
image 'maru', id: 320330 #丸
image 'block', id: 320331 #ブロック
sound 'se00', id: 289514 #クリア時se
sound 'se01', id: 320336 #以下ヒット時se
sound 'se02', id: 320337
sound 'se03', id: 320338
sound 'se04', id: 320339
sound 'se05', id: 320340
sound 'se06', id: 320341
sound 'se07', id: 320342
sound 'se08', id: 320343
end
create do
# ブロックレイヤーの追加(一番奥のレイヤー)
layer01 = add_layer
# キャラクタレイヤーの追加(真ん中のレイヤー)
layer02 = add_layer
# 壁ブロックレイヤーの追加(今回使ってない)
layer03 = add_layer
# まるの配置
maru00 = put_maru(self, 200, 850,200,850)
layer02.add maru00
# ブロックの配置 アップロード内でしてます
# 効果音のロード
se[0]= add_sound('se00')
se[1]= add_sound('se01')
se[2]= add_sound('se02')
se[3]= add_sound('se03')
se[4]= add_sound('se04')
se[5]= add_sound('se05')
se[6]= add_sound('se06')
se[7]= add_sound('se07')
se[8]= add_sound('se08')
#テキストの配置
text00 = put_text 'clear' do
position 380, 225
text '' #無記入
end
end
update do
#丸の配置と方向と速さの設定
if pointer.down? #どこかをクリックした時、その位置を丸の出発地点にします
# ここに処理を記述
if oriset == 1 #ドラッグ中のマウスの位置を変数に格納
pp[2]=pointer.x
pp[3]=pointer.y
elsif oriset == 0 #クリックした時のマウスの位置
oriset=1
pp[0]=pointer.x
pp[1]=pointer.y
maru00.destroy #丸を新たに作ります
maru00 = put_maru(self, pp[0], pp[1],pp[0],pp[1]) #この時丸の速さは0
end
else #クリックしている状態からマウスを放した時、丸が出発します
if oriset==1
oriset=2
maru00.destroy
maru00 = put_maru(self, pp[0], pp[1],pp[2],pp[3]) #丸に速さを与えます
layer02.add maru00
else
end
end
# 当たり判定の処理を行う
# 当たり判定が発生したときの処理を記述する
collision layer02, layer01 do #丸とブロックが接触した時
#ヒット数を1増やし、ヒット数に応じた効果音を鳴らす
hit=hit+1
se[hit].play
#ブロックを破壊
obj1, obj2 = collision_pair
obj2.destroy
if stage==6 #ゲームクリア時の時の特別な演出
text00.start_motion 'alpha'
end
end
#まるが遅くなった時の救済措置、丸をタップするとステージやり直し
if maru00.tap_down?
maru00.position 100, 950
end
# まるが画面外に行った時の処理
pos = maru00.position
if pos[0] < 0 || pos[0] > 850 || pos[1] < 0 || pos[1] >450
oriset=0
if hit>=getArrayLength(block) #ブロックの数にヒット数が達している時す
stage=stage+1 #ステージを次に進める
#ヒット数とステージセットの初期化
hit=0
stageset=0
elsif hit >0 #ブロックを一つ以上壊しているが全部ではない時
#ヒット数とステージセットの初期化
stageset=0
hit=0
i=0
while i < getArrayLength(block)
block[i].destroy
i=i+1
end
end
if stageset==0 #ステージセットが初期化されている時ステージを生成
case stage
when 0
block[0] = put_block(self, 200, 200)
layer01.add block[0]
when 1
block[0] = put_block(self, 400, 220)
block[1] = put_block(self, 400, 120)
layer01.add block[0]
layer01.add block[1]
when 2
block[0] = put_block(self, 400, 100)
block[1] = put_block(self, 300, 175)
block[2] = put_block(self, 400, 250)
layer01.add block[0]
layer01.add block[1]
layer01.add block[2]
when 3
block[0] = put_block(self, 450, 200)
block[1] = put_block(self, 350, 200)
block[2] = put_block(self, 400, 250)
block[3] = put_block(self, 400, 150)
layer01.add block[0]
layer01.add block[1]
layer01.add block[2]
layer01.add block[3]
when 4
block[0] = put_block(self, 100, 200)
block[1] = put_block(self, 200, 200)
block[2] = put_block(self, 300, 200)
block[3] = put_block(self, 400, 200)
block[4] = put_block(self, 500, 200)
layer01.add block[0]
layer01.add block[1]
layer01.add block[2]
layer01.add block[3]
layer01.add block[4]
when 5
block[0] = put_block(self, 100, 100)
block[1] = put_block(self, 300, 100)
block[2] = put_block(self, 500, 100)
block[3] = put_block(self, 200, 300)
block[4] = put_block(self, 400, 300)
block[5] = put_block(self, 600, 300)
block[6] = put_block(self, 700, 100)
block[7] = put_block(self, 800, 300)
layer01.add block[0]
layer01.add block[1]
layer01.add block[2]
layer01.add block[3]
layer01.add block[4]
layer01.add block[5]
layer01.add block[6]
layer01.add block[7]
when 6 #クリア時の演出
se[0].play
text00.text 'GAME CLEAR'
block=[nil] #ブロックの配列の長さを1にする目的
block[0] = put_block(self, 600, 230)
layer01.add block[0]
when 7
result = send_activity_feed("GAME CLEAR")
game_clear
end #case
stageset=1
end #if
end
end
render do
#maru00.show_debug_body
#layer01.show_debug_body
#デバッグ用
end
end
start_scene 'start'
sprite 'chara_maru' do
image 'maru'
origin :center
end
sprite 'chara_block' do
image 'block'
origin :center
end
# まるを配置するメソッド
def put_maru(scene, x0, y0,x1,y1)
# まるを配置
maru = scene.put_sprite 'chara_maru' do
position x0, y0
frame_index 0
end
# 当たり判定の大きさを設定する
#majitai.collision_size(35,35)
maru.collision_circle 13
# 元画像が大きいので適当に縮小
#maru.scale 0.4, 0.4
# 重力を与える
#maru.gravity(nil, 2)
# 跳ね返り係数を与える
maru.bounce(1.0, 1.0)
# 端で跳ね返るようにする
#maru.collide_world!
# 速度を与える
x = (x0-x1)
y = (y0-y1)
#n = floor(sqrt((x*x)+(y*y)))未実装の計算
#k = atan2(y, x)未実装の計算
#速さがそのままでは速すぎるので10分の1にする
x=x/10
y=y/10
maru.velocity( x, y)
# 配置したまるを返す
maru
end
# ブロックを配置するメソッド
def put_block(scene, x, y)
#ブロックを配置
block = scene.put_sprite 'chara_block' do
position x, y
frame_index 0
end
# 当たり判定の大きさを設定する
block.collision_size(35,35)
#block.collision_circle 13
# 縮小,拡大
#block.scale 1 , 1
# 重力を与える
#block.gravity(nil, 2)
# 跳ね返り係数を与える
block.bounce(1.0, 1.0)
# 端で跳ね返るようにする
#block.collide_world!
# 動かないようにする
block.movable false
# ランダムに速度を与える
#block.velocity((rand(3) - 3), (rand(3) - 3))
# 配置したブロックを返す
block
end
#クリア時のテキスト設定
text 'clear' do
origin :center
font_size 64
color '#FFFFFF'
motion 'alpha' do
to params: {alpha: 0.0}, duration: 1000
end
end
コード一覧
- start.rb
プレー内容を公開する