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
投稿者:            mini mosmoss 対象Lv1 公開日:2017年06月12日 23:05:48
プレー内容を公開する

違反を通報する

コメントする

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

コメント一覧

Icon mini cdv30200(投稿日:2017/06/21 06:26, 履歴)
これは面白い
プレー履歴

全てのプレー履歴を見る

新着レビュー

全てのレビュー

フォロー/シェア

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

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

リンク

プレイヤー

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

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