深海ルアーバトル!フグにご用心

深海ルアーバトル!フグにご用心
ok-scratch

スクラッチに挑戦している皆さん、どうも!スクラッチコーチです。

マウスでルアーを上下させて深い魚ほど高得点になる釣りゲーム。フグに触れると減点&スタンでルアーが操作不能になる仕組みを、グローバル変数とクローンの活用テクニックで作っていく手順を解説します。

さぁ、スクラッチでナニ作る!?

チュートリアルの元になった作品

釣りゲーム入門

釣りゲーム入門

by ok-scratch
プレイしておこう プレイしておこう
今回のスクラッチを作る参考作品です。深いところの魚ほど高得点っていう欲張りバランスがマジで絶妙。しかもフグに触れるとルアーがしびれて操作不能になる仕掛けが、ひとつのグローバル変数を魚・フグ・ルアーの3キャラで共有するだけで組まれてるのがキレッキレ。欲張ってどこまで沈めるか駆け引きがクセになる作り方、じっくり見ていこう。

今回の目標

  • マウスでルアーを上下操作し、深い魚ほど高得点でつり上げる
  • フグに触れると減点&一時的にルアーがしびれて操作不能になる
  • 制限時間60秒でスコアを競うアクションゲームを完成させる

スターター作品をリミックスしよう

このチュートリアルにはスターター作品があります。使わなくても大丈夫だけど、最低限の素材などが用意されてるので便利です。
スターター作品をダウンロード

#1ステージ: ゲームの下ごしらえ

ok-scratch ok-scratch
さあ「釣りゲーム」を作っていくよ。まずはステージ担当。ゲーム全体の土台を整えるとこから。

準備

スプライト「stage」を開く

ステージ
スプライトについて
水中を舞台にした魚釣りゲームのステージ。制限時間内にスコアを競う。

変数「★スコア」を追加

プレイヤーの現在の得点。魚を釣ると増え、フグに当たると減る。

変数「★スコア」を追加

変数「★しびれ状態」を追加

フグに当たってルアーがしびれているかどうかを表すフラグ。

変数「★しびれ状態」を追加

実装

step-0

イベントgreenflag が押されたときで旗が押されたら、背景を水中に切り替えて、「★スコア」と「★しびれ状態」を0に戻すよ。

ゲームのはじめに数字をリセットしとくの、地味だけどめっちゃ大事なやつ。前回の得点が残ってたら台無しだよね。

確認プレビューしておこう 確認プレビューしておこう
旗を押すと背景が水の中に変わって、スコアとスタンの変数が0にセットされたね。ゲームの準備が整ったよ。

#2ステージ: タイマー

ok-scratch ok-scratch
続けて残り時間とゲームの状態をセット。ここでカウントダウンの心臓部を作るよ。

準備

変数「★残り時間」を追加

ゲーム終了までの残り秒数。

変数「★残り時間」を追加

変数「★ゲーム状態」を追加

ゲームが進行中かどうかを表す状態フラグ(1:進行中/0:終了)。

変数「★ゲーム状態」を追加

メッセージ「ゲーム開始」を追加

メッセージ「ゲーム開始」を追加

実装

step-1

「★残り時間」を60、「★ゲーム状態」を1にしてからイベント( ) を送るで「ゲーム開始」の合図を飛ばすんだ。この合図を受け取った各スプライトが一斉に動き出す。

あとは制御( ) まで繰り返すで、1秒待っては「★残り時間」を1ずつ減らすループ。0になったら抜ける仕組みだね。

#3ルアー: ルアーの初期設定

ok-scratch ok-scratch
ステージができたから、次はプレイヤーが操るルアー。マウスで動かす主役だよ。

準備

スプライト「ルアー」を開く

ルアールアー
スプライトについて
マウスの上下操作で動く釣り針(疑似餌)。魚やフグとの当たり判定を持つ。
どんな役割か
マウスを押すとルアーが沈み、離すと浮かぶよ。魚に当てるとポイントゲット、フグに当たるとしびれてペナルティ!

実装

step-2

イベントgreenflag が押されたときでルアーの見た目に切り替えて、大きさを45、位置を画面の上のほうにセット。

見た目画像効果をなくすで画像効果もまっさらにしとくよ。前のプレイでかけた効果が残ってると見た目バグるんだよね。

確認プレビューしておこう 確認プレビューしておこう
旗を押すとのこり時間が60から数えはじめて、ルアーが画面の上のほうに小さく表示されるようになったね。

#4ルアー: マウス追従

ok-scratch ok-scratch
ここからルアーを実際に動かしていくよ。まずは横の動き。
step-3

制御( ) まで待つで「★ゲーム状態」が1になるまで待ってから、制御ずっとの中で動きx座標を ( ) にするを使ってルアーのX座標をマウスのX座標にピタッと合わせるんだ。

これでルアーが左右のマウス移動にそのままついてくる感じだね。

確認プレビューしておこう 確認プレビューしておこう
ルアーがマウスの左右の動きにあわせて横に動くようになったよ。マウスを動かして位置を合わせるんだね。

#5ルアー: 沈むか浮くか

ok-scratch ok-scratch
次は上下の動き。マウスを押してるかどうかで沈む・浮くを切り替えるよ。
step-4

制御もし ( ) ならでなければの条件が演算( ) かつ ( )でつながってて、「マウスが押されてる」かつ「★しびれ状態」が0のときだけ沈む処理に入る。

しびれてるときは操作できなくする、っていう伏線がここにあるってわけ。

#6ルアー: 深さの制限

ok-scratch ok-scratch
沈むときと浮くときで、行きすぎないように制限をかけるよ。
step-5

制御もし ( ) ならでY座標が-160より上のときだけ動きy座標を ( ) ずつ変えるで下に5動かす。逆に浮くほうは140より下のときだけ8ずつ上げるんだ。

数字を直接いじらずに、範囲をはみ出さないよう見張ってから動かすのがコツ。画面外にすっ飛んでいくのを防いでるんだ。

確認プレビューしておこう 確認プレビューしておこう
マウスを押すとルアーが沈んで、離すと浮かびあがるようになったね。上下の動きで魚をねらえるよ。

#7ボート: モニター表示

ok-scratch ok-scratch
ルアーの動きは一旦置いといて、今度はボート。スコアや時間を画面に映す担当だよ。

準備

スプライト「ボート」を開く

ボートボート
スプライトについて
釣り糸を垂らして魚を釣るための舟。プレイヤーがマウスで操作する。
どんな役割か
マウスでボートの下のルアーを動かして魚を釣るよ。ふかい場所の魚ほど高得点、フグに当たると減点になるスコアアタックゲームを作るよ!

実装

step-6

イベントgreenflag が押されたとき変数変数 ( ) を表示するを使って「★スコア」と「★残り時間」の表示をオンにするよ。

変数の値を画面に出しとくと、プレイヤーが今の状況をひと目で把握できるやつ。

変数を画面に出すか隠すかは変数変数 ( ) を表示する変数変数 ( ) を隠すで切り替えられるから、見せたい数字だけ選べるんだね。

確認プレビューしておこう 確認プレビューしておこう
ボートが登場して、画面にスコアとのこり時間が表示されるようになったね。得点と時間がひと目でわかるよ。

#8ボート: ボートの配置

ok-scratch ok-scratch
続けてボートの見た目を整えるよ。
step-7

大きさを70にして、動きx座標を ( ) 、y座標を ( ) にするで画面の左上あたりに配置してから見た目表示するで表示。

水面にボートが浮かんでる位置、みたいな感じに置くわけだね。

確認プレビューしておこう 確認プレビューしておこう
ボートが大きさを変えて画面の左上にきちんと配置されて、はっきり見えるようになったね。

#9ボート: 操作説明

ok-scratch ok-scratch
ゲーム開始のタイミングで、遊び方をプレイヤーに教えてあげるよ。
step-8

イベント( ) を受け取ったときで「ゲーム開始」を受け取ったら、見た目( ) と ( ) 秒言うで操作説明を数秒ずつしゃべらせるんだ。

最初にルールを見せとくと親切だよね。「フグに触ると減点」って予告しとくのが効いてる。

確認プレビューしておこう 確認プレビューしておこう
ゲームが始まると、ボートがルアーの動かしかたや得点のルールを吹き出しで説明してくれるようになったよ。

#10魚: 魚の準備

ok-scratch ok-scratch
UIができたから、いよいよ魚を泳がせるよ。この作品の得点源だね。

準備

スプライト「魚」を開く

魚
スプライトについて
水中を泳ぎ、ルアーに触れると得点になる魚。クローンで複数出現する。
どんな役割か
深い場所にいる魚ほど高得点になるよ。ランダムな深さと種類でクローンがつぎつぎ泳いでくるよ。

変数「■クローンかどうか」を追加

このスプライトがクローンかどうかを表すフラグ。

変数「■クローンかどうか」を追加

実装

step-9

イベントgreenflag が押されたときで「■クローンかどうか」を0にして、本体は左端に置いて見た目隠すで隠しとく。

本体は表に出さず、分身だけを泳がせる作戦。この0っていう印が、あとで本体と分身を見分けるカギになるんだ。

本体を隠してクローンだけ動かすこのやり方、敵をいっぱい出すゲームだとかなり定番なんだ。

#11魚: クローン生成

ok-scratch ok-scratch
「ゲーム開始」を受け取ったら、魚のクローンをどんどん作っていくよ。
step-10

制御( ) まで繰り返すで「★ゲーム状態」が0になるまで、制御( ) のクローンを作るでクローンを1匹生成しては制御( ) 秒待つでランダムな間隔あける、を繰り返すんだ。

待ち時間が0.8〜1.6秒でバラつくから、魚の出てくるタイミングが毎回ちょっと違って自然に見えるってわけ。

ok-scratch ok-scratch
スクラッチのクローンって、実は同時に300個までしか存在できないっていう上限があるんだ。だからこのゲームみたいに、画面の外に出たクローンをちゃんと消していかないと、いつのまにか上限に達して新しい魚が出てこなくなる。作りっぱなしはNGってこと。

#12魚: レベル抽選

ok-scratch ok-scratch
クローンが生まれた瞬間に、その魚がどんな魚になるかをクジ引きで決めるよ。

準備

変数「■魚のレベル」を追加

出現した魚の種類(深さ)を表す1〜3の値。

変数「■魚のレベル」を追加

変数「■獲得ポイント」を追加

この魚を釣ったときに加算される得点。

変数「■獲得ポイント」を追加

実装

step-11

制御クローンされたときで目覚めたら「■クローンかどうか」を1にして、演算( ) から ( ) までの乱数で「■魚のレベル」に1〜3のどれかを入れる。

制御もし ( ) ならでレベルが1だったら浅い魚の見た目にして、得点を10に設定するんだ。

ok-scratch ok-scratch
普通なら、魚は1種類だけ決まった見た目・決まった得点で出すよね。でもこの作品では、生まれた瞬間にレベルをランダムで抽選して、その数字ひとつで見た目も得点も深さもまとめて切り替えてるんだ。深い魚ほど高得点っていう、このゲームの面白さの核心がまるっとレベル抽選に乗ってるってわけ。

#13魚: 浅い魚の位置

ok-scratch ok-scratch
レベル1の魚は、浅いところに配置するよ。
step-12

動きx座標を ( ) 、y座標を ( ) にするで左端から、Y座標を-10〜40のランダムな高さにセット。浅い場所でユラユラ泳ぐ、みたいな。

#14魚: 中くらいの魚

ok-scratch ok-scratch
同じ調子で、レベル2の魚も用意するよ。
step-13

制御もし ( ) ならでレベルが2なら、中くらいの見た目にして得点を20に。位置はさっきより深い-80〜-40のあたりに置くんだ。

浅い魚より深くて、点も高め。リスクとリターンのバランスだね。

レベルごとに深さと得点をセットで変えると、プレイヤーが自然に『深いほど強気に狙う』って駆け引きが生まれるんだ。

#15魚: 深い魚の判定

ok-scratch ok-scratch
最後はレベル3、いちばん深い魚。
step-14

制御もし ( ) ならでレベルが3かどうかを確かめてから、次のステップで見た目と得点を決めていくよ。

#16魚: 深い魚の設定

ok-scratch ok-scratch
レベル3の中身を作り込むよ。
step-15

深い場所用の見た目に切り替えて、得点は30と大盤振る舞い。動きx座標を ( ) 、y座標を ( ) にするで-155〜-110っていう画面のかなり下のほうに配置する。

深く潜るほど高得点だけど、下にはフグも待ち構えてるっていう緊張感がここで生まれるんだ。

#17魚: 共通の初期化

ok-scratch ok-scratch
レベルごとの設定が終わったら、全部の魚に共通の仕上げをするよ。

準備

変数「■泳ぐ速さ」を追加

魚が横に移動する速さ。

変数「■泳ぐ速さ」を追加

実装

step-16

大きさを60にそろえて、見た目画像効果をなくすで画像効果をリセット。それから演算( ) から ( ) までの乱数で「■泳ぐ速さ」に2〜4のランダムな値を入れるんだ。

効果をリセットしとくの、地味だけど大事なやつ。前に釣られた魚の透明効果が新しいクローンに引き継がれちゃうのを防いでる。

#18魚: 泳ぎ出す

ok-scratch ok-scratch
準備ができたら、魚をいよいよ泳がせるよ。
step-17

見た目表示するで姿を見せて、制御ずっとの中で動きx座標を ( ) ずつ変えるを使って「■泳ぐ速さ」のぶんだけ右へ進め続ける。

速さがクローンごとに違うから、みんなバラバラのペースで泳いでいく感じ。

確認プレビューしておこう 確認プレビューしておこう
ゲームが始まると魚が左から次々にあらわれて、深さや種類をランダムに変えながら右へ泳いでいくようになったね。

#19魚: 魚を釣る

ok-scratch ok-scratch
泳いでる魚がルアーに触れたら、釣れたことにするよ。
step-18

制御もし ( ) ならの中で調べる( ) に触れたでルアーに当たってるか調べて、しかも「★しびれ状態」が0のときだけ成立。

条件が通ったら「Pop」の音を鳴らして、「★スコア」にその魚の「■獲得ポイント」を足すんだ。深い魚ほどガッツリ増える。

#20魚: 釣れた演出

ok-scratch ok-scratch
釣れた瞬間、魚がパッと消えるだけじゃ味気ないよね。ちょっとした演出を入れるよ。
step-19

制御( ) 回繰り返すを6回まわして、大きさを少しずつ大きくしながら見た目( ) の効果を ( ) ずつ変えるで「幽霊」の効果を上げていくんだ。

だんだん大きく透けていって、最後に制御このクローンを削除するで消える。フワッと釣り上げた感じが出るやつ。

だんだん透明にする演出は見た目( ) の効果を ( ) ずつ変えるの値を少しずつ足すのがミソで、一気に消すより手が込んで見えるんだ。

確認プレビューしておこう 確認プレビューしておこう
ルアーを魚に当てると、ポンと音が鳴ってスコアがふえて、魚がふくらみながら消えるようになったね。

#21魚: 画面外の掃除

ok-scratch ok-scratch
釣られずに右端まで泳ぎきった魚は、消してあげるよ。
step-20

制御もし ( ) ならでX座標が250を超えたら制御このクローンを削除するでクローンを削除。

画面の外に出たクローンをちゃんと片付けるの、さっき話したクローン上限を守るためにも欠かせないとこだね。

#22フグ: フグの準備

ok-scratch ok-scratch
魚が完成したから、次は邪魔者のフグ。触ると減点になる厄介なやつだよ。

準備

スプライト「フグ」を開く

フグフグ
スプライトについて
ルアーに触れるとスコアを減点させる邪魔者キャラクター。クローンで複数出現する。
どんな役割か
フグにルアーが触れるとスコアが減ってしびれてしまうよ。魚とフグを見分けてルアーを操作しよう!

変数「■クローンかどうか」を追加

このスプライトがクローンかどうかを表すフラグ。

変数「■クローンかどうか」を追加

実装

step-21

作りは魚とそっくり。イベントgreenflag が押されたときで「■クローンかどうか」を0にして、本体は隠しておくんだ。

本体を隠してクローンだけ動かす、この形はもう魚で見たよね。

#23フグ: フグの生成

ok-scratch ok-scratch
フグも「ゲーム開始」の合図でクローンを作り続けるよ。
step-22

制御( ) まで繰り返すで「★ゲーム状態」が0になるまで、クローンを生成してはランダムに待つ、の繰り返し。

待ち時間は1.5〜3秒。魚より長めにして、フグはちょっと少なめに出るようにしてるんだ。

魚とフグで出現ペースを変えるだけで、難しさのバランスをけっこう細かく調整できるんだよ。

#24フグ: フグの見た目

ok-scratch ok-scratch
生まれたフグの初期設定をするよ。
step-23

制御クローンされたときで目覚めたら「■クローンかどうか」を1にして、通常のフグの見た目にセット。大きさは55にするよ。

位置は動きx座標を ( ) 、y座標を ( ) にするで-150〜-40のランダムな深さ。魚と同じで、出るたびに高さが変わる。

出るたびに深さがランダムで変わると、同じ場所で待ち伏せする作戦が通じなくて飽きずに遊べるんだよ。

#25フグ: フグが泳ぐ

ok-scratch ok-scratch
フグも右へ泳がせていくよ。

準備

変数「■泳ぐ速さ」を追加

フグが横に移動する速さ。

変数「■泳ぐ速さ」を追加

実装

step-24

「■泳ぐ速さ」に3〜5のランダム値を入れて、見た目画像効果をなくすで効果をリセットしてから表示。制御ずっとで速さのぶん右へ進め続けるんだ。

魚より速めの設定だから、フグはスッと横切ってくる感じ。避けるのがちょい難しいんだよね。

確認プレビューしておこう 確認プレビューしておこう
今度はフグが左からあらわれて、魚とはちがう速さで右へ泳いでいくようになったよ。じゃまなキャラだね。

#26フグ: フグに触れる

ok-scratch ok-scratch
フグがルアーに触れたときの処理。ここがペナルティの本体だよ。
step-25

制御もし ( ) なら調べる( ) に触れたと「★しびれ状態」が0の条件がそろったら、「Bonk」の音を鳴らして膨らんだ見た目に変える。

そして「★スコア」が5マイナスされるんだ。せっかく貯めた点が減るの、地味に痛いとこだね。

確認プレビューしておこう 確認プレビューしておこう
ルアーがフグに当たると、ボンと音が鳴って見た目が変わり、スコアが5点へってしまうようになったね。

#27フグ: 減点の下限

ok-scratch ok-scratch
でも、スコアがマイナスまで落ちちゃうのはちょっと厳しいよね。
step-26

制御もし ( ) ならで「★スコア」が0より小さいかを調べるよ。

#28フグ: 0で止める

ok-scratch ok-scratch
スコアが0を下回ってたら、0に引き戻すよ。
step-27

変数( ) を ( ) にするで「★スコア」を0にセット。これでマイナス点にはならない仕組み。

減点はあっても、下限を決めておくとプレイヤーが心折れずに最後まで遊べるんだ。

#29フグ: しびれをセット

ok-scratch ok-scratch
フグに触れたら、ルアーをしびれさせるよ。
step-28

変数( ) を ( ) にするで「★しびれ状態」を1にするだけ。たったこれだけなんだけど、これが3つのスプライトに一斉に効いてくるんだ。

実際の演出や操作停止はこの数字を見て、ルアーや魚が勝手にやってくれるんだよ。

#30フグ: フグの掃除

ok-scratch ok-scratch
フグも右端まで行ったら片付けるよ。
step-29

制御もし ( ) ならでX座標が250を超えたら制御このクローンを削除するで削除。魚と同じ後始末だね。

#31ルアー: しびれの監視

ok-scratch ok-scratch
フグができたから、ルアーに戻ってしびれの処理を作るよ。さっきフグがセットした数字を、ここで受け取るんだ。

準備

スプライト「ルアー」を開く

ルアー
ルアー

実装

step-30

制御ずっとの中で制御( ) まで待つを使って「★しびれ状態」が0より大きくなるのをずっと見張る。1になった瞬間、見た目( ) の効果を ( ) にするで「幽霊」の効果を50にしてルアーを半透明にするよ。

ok-scratch ok-scratch
普通なら、しびれの状態はルアーが自分の中だけで持って管理すればいい気がするよね。でもこの作品では「★しびれ状態」っていう1個のグローバル変数を、フグが書き込んで、ルアーが演出とリセットをして、魚が『今は釣れない』の判定に使ってるんだ。3つのスプライトが1個の数字で足並みをそろえる、これがゲームでよく使う『状態フラグ』ってやつだよ。

確認プレビューしておこう 確認プレビューしておこう
フグに当たるとスタン状態になってルアーが半透明になり、スコアは0より下がらないようになったよ。

#32ルアー: しびれ解除

ok-scratch ok-scratch
半透明になったあと、少し経ったらしびれを解いてあげるよ。
step-31

制御( ) 秒待つで1秒待ってから、「幽霊」の効果を0に戻して元の見た目に。最後に「★しびれ状態」を0にリセットするんだ。

この0に戻す一手が超大事。ここを忘れると、ずっとしびれっぱなしで二度と操作できなくなる。

確認プレビューしておこう 確認プレビューしておこう
スタンは1秒ほどでとけて、ルアーの半透明がもとにもどり、また魚をねらえるようになったね。

#33ステージ: ゲーム終了

ok-scratch ok-scratch
各キャラができたから、ステージに戻ってゲームの締めくくりを作るよ。

準備

スプライト「stage」を開く

ステージ

メッセージ「ゲーム終了」を追加

メッセージ「ゲーム終了」を追加

実装

step-32

タイマーが0になってループを抜けたら、「★ゲーム状態」を0にしてイベント( ) を送るで「ゲーム終了」の合図を送る。

この合図で、動いてたスプライトたちが一斉に終わりの動きに入るってわけ。

#34ボート: 結果発表

ok-scratch ok-scratch
ステージ側で終了の合図を送れるようになったから、今度はボートが結果を発表する番だよ。

準備

スプライト「ボート」を開く

ボート
ボート

実装

step-33

イベント( ) を受け取ったときで「ゲーム終了」を受け取って、「Win」の音を鳴らす。それから見た目( ) と言う演算( ) と ( )を使って「スコア」の文字と数字をつなげて表示するんだ。

文字と実際の点をくっつけて出す、これで結果がひと目で分かる感じ。

確認プレビューしておこう 確認プレビューしておこう
のこり時間が0になるとゲームが終わって、勝利の音が鳴り、ボートが最終スコアを教えてくれるようになったよ。

#35ルアー: ルアーを片付ける

ok-scratch ok-scratch
ボートの結果発表ができたから、次はルアーの後片付け。ゲームが終わったら、動きを止めて元の位置に戻すよ。

準備

スプライト「ルアー」を開く

ルアー
ルアー

実装

step-34

制御 の『スプライトの他のスクリプト』を使って、ルアーの上下移動ループだけを止めるんだ。それから位置と画像効果をリセット。

他のスプライトのループは止めずに、自分の動きだけをピンポイントで停止できるのがこの止め方のいいとこ。

確認プレビューしておこう 確認プレビューしておこう
ゲームが終わると、ルアーの動きが止まって最初の位置にもどり、画面がきれいに片づくようになったね。

#36魚: 魚の後始末

ok-scratch ok-scratch
ルアーを片付けたから、次は魚の番だよ。魚も終了の合図で反応するけど、ここはクローンならではの注意ポイントがあるんだ。

準備

スプライト「魚」を開く

魚

実装

step-35

イベント( ) を受け取ったときの合図って、実はクローンにも本体にも届いちゃうんだよね。だから制御もし ( ) ならで「■クローンかどうか」を確かめて処理を分けるよ。

本体なら動きを止めるだけ、クローンなら制御このクローンを削除するで自分を消す。この見分けがないと本体まで消えちゃう。

#37フグ: フグの後始末

ok-scratch ok-scratch
魚の後始末ができたから、最後はフグの片付け。やることは魚と全く同じ考え方だよ。

準備

スプライト「フグ」を開く

フグ
フグ

実装

step-36

「ゲーム終了」を受け取ったら、制御もし ( ) ならで「■クローンかどうか」をチェック。本体は止めて、クローンは制御このクローンを削除するで消すよ。

これで「つり2」が完成! 制限時間のなかで深い魚を狙いつつ、フグをよける駆け引きを楽しんでみてね。

まとめ

グローバル変数ひとつで複数のスプライトのスタン状態を同期させる仕組み、意外とシンプルだったよね。クローンのレベル抽選で外見・得点・出現位置をまとめて決めるやり方も、いろんなゲームに応用できるテクニックだから覚えておこう。次は自分だけの魚やペナルティキャラを追加して、オリジナルの釣りゲームに育ててみてね。

ブクマよろしくお願いします! ブクマよろしくお願いします!
どんどん追記・更新していくので、ブックマークやシェアよろしくお願いします!