バッテリークリッカー #1

バッテリークリッカー #1
ok-scratch

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

クリックでポイントを稼ぎショップでアップグレードする本格クリッカーゲームをスクラッチで作ろう。パーティクルエフェクト・カスタム数字表示・イージングアニメーションなど本格テクニック満載!

スクラッチで作る作品について

バッテリーをクリックしてポイントを稼ぎ、ショップでアップグレードを購入するインクリメンタルクリッカーゲーム。3ページのショップ、パーティクルエフェクト、数字ディスプレイ、ボーナスアイテムなど多彩な機能を持つ。

今回の目標

バッテリーのクリック機能(ポイント獲得・音・ブロードキャスト)、ホバーイージングアニメーション、BGM、グロー回転、トレイルエフェクト(ペン)、クローンパーティクル、カスタム数字ディスプレイ、ショップのページ切替、ショップページ1のアイテム2つ(オートクリッカー・クリック倍率アップ)を実装する。

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

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

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

#1バッテリーの表示

プログラミングのヒント
まずはゲームの主役、バッテリーを画面に表示させよう。旗が押されたら常に見える状態にしておくんだ。

準備

スプライト「バッテリー」を開く

バッテリーバッテリー
スプライトについてメインのクリック対象。クリックでポイントを稼ぎ、ホバーアニメーション、サウンド、BGMを管理する
どんな役割かバッテリーをクリックしてポイントを稼ぐメインの仕組みを作るよ。マウスが近づくとバッテリーが大きくなるアニメーションや、クリック音とBGMも一緒に作っていくよ。

実装

step-0

イベント greenflag が押されたとき でゲーム開始時に 見た目 表示する で表示して、 見た目 ( ) へ移動する で最前面に配置するよ。 見た目 コスチュームを ( ) にする でコスチュームも初期状態にしておこう。

最前面に配置するのは、他のスプライト(背景やエフェクト)に隠れないようにするためだよ。クリッカーゲームではメインの対象がいつでも見えることが大事だからね。

#2クリック数の初期化

プログラミングのヒント
ゲームの通貨となる「★クリック数」変数を0にリセットするよ。この値がプレイヤーの所持ポイントになるんだ。

準備

変数「★クリック数」を追加

プレイヤーの累計クリック数(通貨)

変数「★クリック数」を追加

実装

step-1

イベント greenflag が押されたとき 変数 ( ) を ( ) にする を使って「★クリック数」を0にしよう。毎回ゲーム開始時にリセットすることで、前回のプレイデータが残らないようにしているんだ。

#3獲得数の初期化

プログラミングのヒント
1クリックあたり何ポイントもらえるかを決める「★1クリックの獲得数」変数を初期化するよ。最初は1からスタートだ。

準備

変数「★1クリックの獲得数」を追加

1クリックあたりの獲得ポイント数

変数「★1クリックの獲得数」を追加

実装

step-2

変数 ( ) を ( ) にする で値を1にセットしよう。この変数はあとでショップのアップグレードによって増えていくから、ゲームが進むほどクリックの価値が上がっていく仕組みになるんだ。

#4クリックでポイント獲得

プログラミングのヒント
バッテリーをクリックしたらポイントが増える、クリッカーゲームの核心部分を作るよ。
step-3

イベント このスプライトが押されたとき でバッテリーのクリックを検知して、 変数 ( ) を ( ) ずつ変える で「★クリック数」を「★1クリックの獲得数」ぶんだけ増やすよ。固定値の1ではなく変数を使っているのがミソで、ショップで強化すると1クリックの重みがどんどん増していくんだ。

#5クリック音の追加

プログラミングのヒント
クリックしたときに音が鳴ると、操作している実感がぐっと増すよね。
step-4

イベント このスプライトが押されたとき 終わるまで ( ) の音を鳴らす で「Finger Snap」を鳴らそう。パチッという小気味よい音で、クリックのたびに心地よいフィードバックが返ってくるよ。

#6クリック通知の送信

プログラミングのヒント
バッテリーがクリックされたことを他のスプライトにも知らせる仕組みを作ろう。この後作るパーティクルエフェクトがこの通知を受け取って動き出すんだ。

準備

メッセージ「クリック」を追加

バッテリーがクリックされた時に送信するメッセージ

メッセージ「クリック」を追加

実装

step-5

イベント このスプライトが押されたとき イベント ( ) を送る を使って「クリック」メッセージを送信するよ。ブロードキャストはテレビの放送みたいなもので、1つのスプライトが発信すると、受信設定をしている全スプライトが一斉に反応できるんだ。

#7自動獲得の準備

プログラミングのヒント
ショップでオートクリッカーを買うと、毎秒自動でポイントが増えていく仕組に使う「★1秒の自動獲得数」変数を用意するよ。

準備

変数「★1秒の自動獲得数」を追加

毎秒自動で獲得するポイント数

変数「★1秒の自動獲得数」を追加

実装

step-6

変数 ( ) を ( ) にする で最初は0にしておこう。まだ何も買っていない状態だから自動獲得はゼロだよ。この値はショップでアイテムを購入するたびに加算されていくんだ。

#8ホバーアニメーション

プログラミングのヒント
マウスが近づくとバッテリーがふわっと大きくなり、離れると元に戻る――そんな滑らかなアニメーションを作るよ。普通にサイズを切り替えるのとは全然違う、プロっぽい動きになるんだ。
step-7

制御 ずっと ループの中で 調べる ( ) までの距離 を使ってマウスとの距離を測るよ。距離が50より近ければ目標サイズ100、遠ければ90に向かって変化させるんだ。 制御 もし ( ) ならでなければ で分岐して、それぞれ 見た目 大きさを ( ) %にする で新しいサイズをセットするよ。

ここがこの作品のすごいところだよ。サイズ計算に「(目標値 − 現在のサイズ) ÷ 3」を使っているんだ。差分の3分の1ずつ近づくことで、最初は速く、目標に近づくほどゆっくり変化する「イージング」という滑らかさのテクニックが生まれるよ。

プログラミングのヒント
イージング(easing)は、ゲームやアプリのUIで世界中で使われているアニメーション技法だよ。ドアが閉まるとき最後にゆっくりなるのと同じ原理で、「線形補間(lerp)」とも呼ばれるんだ。Scratchではたった1行の計算で実現できるけど、プロの3Dゲームでも全く同じ考え方が使われているよ。

#9BGMの再生

プログラミングのヒント
ゲームを盛り上げるBGMをループ再生させよう。音楽があると雰囲気がガラッと変わるよ。
step-8

制御 ずっと の中で 終わるまで ( ) の音を鳴らす を使い「Dance Chill Out」を再生するよ。「終わるまで再生」ブロックは曲が最後まで流れてから次に進むから、 制御 ずっと と組み合わせると曲が終わるたびに自動で最初から再生される、シンプルなBGMループの完成だね。

#10グローの表示設定

プログラミングのヒント
バッテリーの後ろでキラキラ光る装飾エフェクト、「グロー」スプライトを表示させるよ。

準備

スプライト「グロー」を開く

グローグロー
スプライトについてバッテリー背後で回転するグロー装飾エフェクト
どんな役割かバッテリーの後ろでゆっくり回転する光る装飾エフェクトを作るよ。ずっと回り続けてゲーム画面をかっこよく見せるんだ。

実装

step-9

イベント greenflag が押されたとき 見た目 表示する で表示して、 見た目 ( ) へ移動する で最背面に配置するよ。バッテリーの後ろに置くことで、光がバッテリーを包み込むような演出になるんだ。 見た目 コスチュームを ( ) にする でコスチュームもセットしておこう。

#11グローの回転

プログラミングのヒント
グローをゆっくり回し続けて、画面に動きを出そう。止まっている画面より、何かが動いているほうがゲームが生きているように見えるよ。
step-10

制御 ずっと の中で 動き ( ) ( ) 度回す を1度ずつ回転させるよ。1度という小さな値だから、1回転するのに360フレーム(約12秒)かかる、とてもゆったりした回転になるんだ。

#12トレイルの初期化

プログラミングのヒント
背景に流れるような模様を描く「トレイルエフェクト」スプライトの初期設定をするよ。ペンスタンプで動的な背景を作る面白いテクニックだよ。

イベント greenflag が押されたとき 動き x座標を ( ) 、y座標を ( ) にする を(0, 0)にセットして画面中央に配置し、 見た目 画像効果をなくす で画像効果をリセットするよ。位置管理用のローカル変数「X座標」と「Y座標」も 変数 ( ) を ( ) にする で0に初期化しよう。

#13トレイルのループ開始

プログラミングのヒント
トレイルエフェクトの本体となるメインループを組み立てるよ。まずはスプライトを隠して、最背面に送るところから始めるんだ。

見た目 隠す で一旦非表示にして 見た目 ( ) へ移動する で最背面に送るよ。そして 制御 ずっと ループの中で毎フレーム 見た目 表示する 見た目 ( ) へ移動する を繰り返すんだ。これは他のスプライトが後から最背面に来ても、常に自分が一番後ろにいるようにする工夫だよ。

#14ドリフト移動

プログラミングのヒント
トレイルエフェクトの動きの核心部分だよ。スプライトを少しずつ斜めにずらしていくことで、流れるようなパターンを生み出すんだ。

まず PEN_CLEAR で前フレームのペン描画を全消去するよ。次に 変数 ( ) を ( ) ずつ変える で「X座標」を-2、「Y座標」を1.5ずつ変えて、 動き x座標を ( ) にする 動き y座標を ( ) にする で実際にスプライトを移動させるよ。

毎フレーム消して描き直すことで、スプライトが左上に少しずつドリフトしていく動きが背景パターンとして浮かび上がるんだ。ペン拡張機能を背景アニメーションに使うこのアイデアは、クローン数の制限を受けずに複雑な模様を作れるのが魅力だよ。

#15リセットとスタンプ

プログラミングのヒント
ドリフトし続けると画面外に出てしまうから、一定の位置に来たらリセットする仕組みを追加するよ。

制御 もし ( ) なら で「X座標」が-40になったかを 演算 ( ) = ( ) で判定して、 変数 ( ) を ( ) にする で「X座標」と「Y座標」を0に戻すよ。最後に PEN_STAMP でスプライトの見た目をペンレイヤーにスタンプするんだ。

こうすることで、ドリフト→リセット→スタンプが繰り返されて、位置が少しずつずれた複数の残像が背景に浮かぶパターンになるよ。

#16クリック手続きの定義

プログラミングのヒント
パーティクルエフェクトの頭脳となる「クリック」カスタム定義を作るよ。どのコスチュームのパーティクルを生成するかを管理する仕組みだよ。

準備

スプライト「降るパーティクル」を開く

降るパーティクル降るパーティクル
スプライトについてクリック時に生成される落下パーティクルのクローン。click手続きでパーティクル管理
どんな役割かバッテリーをクリックした時に、上から粒子が降ってくるパーティクルエフェクトを作るよ。クローンを使って複数の粒子を同時に動かして、回転しながら消えていくアニメーションにするんだ。

カスタム定義「クリック」を追加

パーティクルインデックスを循環させてクローンを生成する手続き

カスタム定義「クリック」を追加

変数「★パーティクル番号」を追加

パーティクルのコスチューム循環インデックス

変数「★パーティクル番号」を追加

リスト「■PI」の追加

パーティクルのコスチューム循環用リスト

リスト「■PI」の追加

実装

step-15

ブロック定義 定義 ( ) で「クリック」手続きを定義するよ。まず 変数 ( ) を ( ) ずつ変える で「★パーティクル番号」を1増やして、次に 制御 もし ( ) なら で番号が「■PI」リストの1番目の要素の文字数を超えたかチェックするんだ。超えたら 変数 ( ) を ( ) にする で1に戻すよ。

リストの要素の文字数を上限に使うのはユニークな発想だね。 演算 ( ) > ( ) 演算 ( ) の長さ リスト ( ) の ( ) 番目 を組み合わせて、番号が範囲内でぐるぐる循環するようにしているんだ。

#17クローンの生成

プログラミングのヒント
「クリック」手続きの続きとして、実際にパーティクルのクローンを生み出す部分を作るよ。
step-16

見た目 コスチュームを ( ) にする でコスチュームを「pie」に切り替えてから、 制御 ( ) のクローンを作る で自分自身のクローンを生成するよ。 動き ( ) 度に向ける 演算 ( ) から ( ) までの乱数 を使い1〜360度のランダムな向きを設定するんだ。これでクローンが全方向に散らばる準備が整うよ。

#18パーティクルの初期化

プログラミングのヒント
パーティクル関連の変数を初期値に戻すよ。ゲーム開始時にクリーンな状態からスタートさせるためだよ。

準備

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

クローンかどうかのフラグ(0=元、1=クローン)

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

実装

step-17

イベント greenflag が押されたとき で「クローンか」変数を0、「★パーティクル番号」を0にセットするよ。「クローンか」は元のスプライトとクローンを区別するフラグで、0なら元、1ならクローンという意味だよ。

#19クリック受信の処理

プログラミングのヒント
バッテリーから送られてくる「クリック」メッセージを受け取って、パーティクルを生成するよ。
step-18

イベント ( ) を受け取ったとき で「クリック」メッセージを受信するよ。ただし 制御 もし ( ) なら で「クローンか」が0のとき、つまり元のスプライトだけが ブロック定義 ( ) で「クリック」手続きを実行するようにガードしているんだ。

このガードがないとクローン全員が「クリック」手続きを実行してしまい、クローンが爆発的に増えてしまうよ。ブロードキャストはクローンにも届くから、元スプライトだけに処理を限定するのが大事なんだ。

#20クローンの初期設定

プログラミングのヒント
生まれたクローンが最初に何をするかを設定するよ。画面上部のランダムな位置に出現させるんだ。
step-19

制御 クローンされたとき でクローン開始時の処理を書くよ。まず 変数 ( ) を ( ) にする で「クローンか」を1にセットしてクローンであることを記録し、 見た目 表示する で表示するよ。

動き x座標を ( ) 、y座標を ( ) にする で、X座標は 演算 ( ) から ( ) までの乱数 で-117〜117のランダム、Y座標は161(画面上端付近)に配置するよ。画面の上から降ってくる演出の始点だね。

#21落下アニメーション

プログラミングのヒント
パーティクルがくるくる回りながら降ってきて、だんだん透明になっていくアニメーションを作るよ。
step-20

制御 ( ) 回繰り返す で20回ループしながら、 動き ( ) ( ) 度回す で3度ずつ回転、 動き y座標を ( ) ずつ変える で-10ずつ下に移動、 見た目 ( ) の効果を ( ) ずつ変える でゴースト効果を5ずつ増やすよ。

20回 × ゴースト5 = 100で完全に透明になる計算だよ。回転しながらフェードアウトすることで、パーティクルが風に舞うような自然な動きになるんだ。

#22縮小して消滅

プログラミングのヒント
フェードアウトが終わったパーティクルを縮小させてから削除するよ。これで一連のパーティクル演出の完成だね。
step-21

制御 ( ) 回繰り返す で10回 見た目 大きさを ( ) ずつ変える を-5ずつ実行して小さくしていき、最後に 制御 このクローンを削除する でクローンを削除するよ。縮小アニメーションを挟むことで、いきなり消えるよりも自然な見栄えになるんだ。

#23パーティクルの奥行き

プログラミングのヒント
パーティクルが他のスプライトの前に出てこないように、常に最背面に送り続けるよ。
step-22

イベント greenflag が押されたとき 制御 ずっと ループを作り、毎フレーム 見た目 ( ) へ移動する で最背面に送るよ。こうしておくと、クローンが何個生まれても全部バッテリーやショップアイテムの後ろに表示されるんだ。

#24数字ディスプレイの初期設定

プログラミングのヒント
クリック数をかっこいいカスタムフォントで表示するシステムを作り始めるよ。Scratchの変数モニターじゃなくて、自前の数字表示だからデザインの自由度がぐっと上がるんだ。

準備

スプライト「数字ディスプレイ」を開く

数字ディスプレイ数字ディスプレイ
スプライトについてクリック数をカスタム数字フォントでクローン表示するスプライト
どんな役割かクリック数をかっこいいカスタム数字で画面に表示するシステムを作るよ。クローンを横に並べて、それぞれの桁の数字を自動で表示するんだ。

変数「★数字のX位置」を追加

数字ディスプレイの開始X座標

変数「★数字のX位置」を追加

実装

step-23

イベント greenflag が押されたとき 見た目 大きさを ( ) %にする を45%に設定して、 見た目 隠す で親スプライトを隠すよ。親は数字のクローンを生むための「工場」の役割だから、自分自身は画面に出ないんだ。 変数 ( ) を ( ) にする で「★数字のX位置」を-200に設定して、左端から数字を並べる準備をしよう。

#25表示パラメータの設定

プログラミングのヒント
数字ディスプレイの表示に必要な各パラメータを設定するよ。桁数や文字間隔を変数で管理しておくと、あとから調整が簡単だよ。

準備

変数「★数字の値」を追加

数字ディスプレイの表示値計算用

変数「★数字の値」を追加

変数「★最大桁数」を追加

数字ディスプレイの最大桁数

変数「★最大桁数」を追加

変数「★数字の間隔」を追加

数字間の横幅

変数「★数字の間隔」を追加

実装

step-24

変数 ( ) を ( ) にする で「★数字の値」を1、「★最大桁数」を10、「★数字の間隔」を16にセットするよ。最大10桁表示できるようにして、各桁を16ピクセル間隔で並べるんだ。 動き x座標を ( ) 、y座標を ( ) にする で開始位置(「★数字のX位置」, 145)に移動しておこう。

#26桁クローンの生成

プログラミングのヒント
10桁ぶんのクローンを横一列に生成するよ。各クローンがそれぞれ1桁を担当して、全体でクリック数を表示する仕組みだよ。
step-25

制御 ( ) 回繰り返す で「★最大桁数」回ループし、毎回 変数 ( ) を ( ) にする で「★数字の値」に「★クリック数」をセットしてから 制御 ( ) のクローンを作る でクローンを生成するよ。生成後に 動き x座標を ( ) ずつ変える で「★数字の間隔」ぶん右にずれて、次のクローンの位置を準備するんだ。

#27桁の数字表示

プログラミングのヒント
各クローンが自分の担当する桁の数字を自動で表示する仕組みだよ。ここがこのシステムの一番面白いところだよ。
step-26

制御 クローンされたとき 見た目 ( ) へ移動する を最前面に、 見た目 表示する で表示するよ。 制御 ずっと ループの中で、 見た目 コスチュームを ( ) にする のコスチューム番号を計算で決めるんだ。

計算の仕組みはこうだよ。自分のX座標から「★数字のX位置」を引いて「★数字の間隔」で割ると、自分が何桁目かがわかる。その桁番号を 演算 ( ) の ( ) 番目の文字 に渡して「★クリック数」から1文字取り出し、その数字のコスチュームに切り替えるんだ。クローンの位置から自分の役割を計算するのは、Scratchならではの賢いテクニックだよ。

#28空桁の非表示

プログラミングのヒント
クリック数が10桁に満たないとき、上位の桁は空っぽになるよね。その空桁を隠す処理を追加しよう。
step-27

制御 もし ( ) ならでなければ 演算 ( ) の ( ) 番目の文字 の結果が空文字かどうかを判定するよ。空文字なら 見た目 隠す で隠し、数字があれば 見た目 表示する で表示するんだ。こうすることで、例えばクリック数が「42」なら先頭の8桁は非表示になって、見た目がすっきりするよ。

#29ショップ背景の表示

プログラミングのヒント
ここからショップ画面のUIを作っていくよ。まずはショップの背景を表示させよう。

準備

スプライト「ショップ背景」を開く

ショップ背景ショップ背景
スプライトについてショップ画面の背景UI
どんな役割かショップ画面の背景を表示するスプライトを作るよ。

実装

step-28

イベント greenflag が押されたとき 見た目 表示する 見た目 ( ) へ移動する で最背面、 見た目 コスチュームを ( ) にする でコスチュームをセットするよ。最背面に配置するのは、ショップアイテムのボタンやバッテリーが背景の手前に来るようにするためだよ。

#30ショップページの初期化

プログラミングのヒント
ショップは複数ページに分かれていて、矢印ボタンでページを切り替えられるようにするよ。まずはページ番号を管理する変数を初期化しよう。

準備

スプライト「右矢印」を開く

右矢印右矢印
スプライトについてショップページを次に進める矢印ボタン
どんな役割かショップのページを次に進めるための右矢印ボタンを作るよ。クリックするとショップページが1つ進むんだ。ショップページの初期値もここで設定するよ。

変数「★ショップページ」を追加

現在のショップページ番号(1〜3)

変数「★ショップページ」を追加

実装

step-29

イベント greenflag が押されたとき 変数 ( ) を ( ) にする を使い「★ショップページ」を1にセットするよ。ゲーム開始時は最初のページを表示するんだ。

#31右矢印の表示

プログラミングのヒント
ショップページを次に進めるための右矢印ボタンを作るよ。
step-30

イベント greenflag が押されたとき 見た目 表示する で表示し、 見た目 コスチュームを ( ) にする で「Arrow Right」コスチュームに設定するよ。 制御 ずっと ループで毎フレーム 見た目 ( ) へ移動する を最前面にすることで、他のスプライトに隠れないようにしているんだ。

#32右矢印の配置

プログラミングのヒント
右矢印をショップ画面の右側に配置するよ。
step-31

イベント greenflag が押されたとき 動き x座標を ( ) 、y座標を ( ) にする を(123, 10)にセットするよ。ショップエリアの右端に見やすく配置する位置だよ。

#33右矢印のサイズ

プログラミングのヒント
右矢印のサイズをちょうどいい大きさに調整するよ。
step-32

イベント greenflag が押されたとき 見た目 大きさを ( ) %にする を80%にセットするよ。100%だと大きすぎるから、ショップのUIに馴染むサイズに縮小しているんだ。

#34右矢印のクリック音

プログラミングのヒント
矢印ボタンをクリックしたときにも効果音を鳴らそう。ボタンを押した手応えを感じられるようにするためだよ。
step-33

イベント このスプライトが押されたとき 終わるまで ( ) の音を鳴らす の「Finger Snap」を再生するよ。バッテリーのクリック音と同じ音を使うことで、操作感に統一感が出るんだ。

#35次ページへの通知

プログラミングのヒント
右矢印がクリックされたら、ショップアイテムたちに「次のページに切り替えてね」と知らせるメッセージを送るよ。

準備

メッセージ「次のショップ」を追加

ショップの次ページへの切替時に送信するメッセージ

メッセージ「次のショップ」を追加

実装

step-34

イベント このスプライトが押されたとき イベント ( ) を送る を使って「次のショップ」メッセージを送信するよ。各ショップアイテムがこのメッセージを受け取って、自分が表示されるべきページかどうかを判断するんだ。

#36ページ上限チェック

プログラミングのヒント
3ページ目まで来たら、これ以上先に進めないようにガードする処理を追加するよ。
step-35

イベント このスプライトが押されたとき 制御 もし ( ) ならでなければ を使い、「★ショップページ」が3と等しいかを 演算 ( ) = ( ) でチェックするよ。3なら 制御   でスクリプトを止めて何もしない。3でなければ 変数 ( ) を ( ) ずつ変える で「★ショップページ」を1増やすんだ。

ページ番号が際限なく増えるのを防ぐ、いわば「壁」の役割だよ。この処理がないと、存在しないページ4以降に進んでしまって表示がおかしくなるんだ。

#37左矢印の表示

プログラミングのヒント
今度はショップページを前に戻すための左矢印ボタンを作るよ。右矢印とほぼ同じ構造だよ。

準備

スプライト「左矢印」を開く

左矢印左矢印
スプライトについてショップページを前に戻す矢印ボタン
どんな役割かショップのページを前に戻すための左矢印ボタンを作るよ。クリックするとショップページが1つ前に戻るんだ。

実装

step-36

イベント greenflag が押されたとき 見た目 表示する 見た目 コスチュームを ( ) にする で「Arrow Right」コスチュームに設定するよ。名前は「Arrow Right」だけど、スプライト自体が左右反転されているから左矢印として使えるんだ。 制御 ずっと で常に最前面に配置するよ。

#38左矢印の配置

プログラミングのヒント
左矢印をショップ画面の左側に配置しよう。
step-37

イベント greenflag が押されたとき 動き x座標を ( ) 、y座標を ( ) にする を(42, 13)にセットするよ。右矢印(123, 10)より左側に配置して、ペアになるようにしているんだ。

#39左矢印のサイズ

プログラミングのヒント
左矢印も右矢印と同じサイズに揃えるよ。
step-38

イベント greenflag が押されたとき 見た目 大きさを ( ) %にする を80%にセットするよ。左右の矢印が同じサイズだと、UIとしてバランスが取れるよね。

#40左矢印のクリック音

プログラミングのヒント
左矢印にも同じクリック音をつけるよ。
step-39

イベント このスプライトが押されたとき 終わるまで ( ) の音を鳴らす の「Finger Snap」を鳴らそう。ボタンの操作感を統一することで、プレイヤーが迷わず操作できるようになるんだ。

#41前ページへの通知

プログラミングのヒント
左矢印がクリックされたら、ショップアイテムたちに「前のページに戻って」と知らせるよ。

準備

メッセージ「前のショップ」を追加

ショップの前ページへの切替時に送信するメッセージ

メッセージ「前のショップ」を追加

実装

step-40

イベント このスプライトが押されたとき イベント ( ) を送る を使って「前のショップ」メッセージを送信するよ。右矢印の「次のショップ」と対になるメッセージだね。

#42ページ下限チェック

プログラミングのヒント
1ページ目にいるときは、もう前に戻れないようにガードしよう。右矢印の上限チェックと対になる処理だよ。
step-41

イベント このスプライトが押されたとき 制御 もし ( ) ならでなければ を使い、「★ショップページ」が1かを 演算 ( ) = ( ) でチェックするよ。1なら 制御   でスクリプト中断、1でなければ 変数 ( ) を ( ) ずつ変える で-1して前のページに戻るんだ。

#43アイテム1の配置

プログラミングのヒント
ショップの最初のアイテムの位置を決めるよ。ここからいよいよオートクリッカーのショップ画面を構築していくんだ。

準備

スプライト「ショップアイテム1」を開く

ショップアイテム1ショップアイテム1
スプライトについてショップページ1のオートクリッカー(100クリックで+10CPS)
どんな役割かショップの最初のアイテムを作るよ。100クリック消費すると、毎秒自動でクリックが増えるオートクリッカーを買えるようになるんだ。何回でも買い足せるスタック購入の仕組みも作るよ。

実装

step-42

イベント greenflag が押されたとき 動き x座標を ( ) 、y座標を ( ) にする を(51, 27)にセットするよ。ショップエリアの中央付近に配置して、プレイヤーの目に入りやすい位置にしているよ。

#44アイテム1の表示

プログラミングのヒント
ショップアイテム1を画面に表示させよう。このアイテムは最初のオートクリッカーで、100クリック消費すると毎秒自動でポイントが増えるようになるよ。
step-43

イベント greenflag が押されたとき 見た目 表示する で表示し、 見た目 ( ) へ移動する で最前面、 見た目 コスチュームを ( ) にする でコスチュームをセットするよ。最前面に配置するのは、ショップ背景の手前に来るようにするためだよ。

#45ショップアイテムのホバー演出

プログラミングのヒント
ショップアイテム1にもバッテリーと同じホバーアニメーションをつけるよ。マウスが触れたらアイテムが少し大きくなって、離れるとゆっくり元に戻るんだ。
step-44

イベント greenflag が押されたとき で開始して、 制御 ずっと の中で 制御 もし ( ) ならでなければ を使うよ。 調べる ( ) に触れた でマウスに触れているかを判定して、触れていたらサイズ90に、離れていたらサイズ80に向かってゆっくり近づけるんだ。

目標サイズが90と80になっているのは、ショップアイテムがバッテリーより少し小さく表示されるようにするためだよ。イージングの仕組み自体はバッテリーと同じで、差分の1/3ずつ近づける線形補間を使っているんだ。

#46オートクリッカーの購入処理

プログラミングのヒント
ショップアイテム1はオートクリッカーだよ。100クリック消費すると、毎秒自動でクリック数が増える仕組みを買えるんだ。
step-45

イベント このスプライトが押されたとき でクリックを検知して、 制御 ずっと の中で3つの条件を同時にチェックするよ。「★クリック数」が100以上、マウスが押されている、そしてマウスがアイテムに触れている――この3つ全部がtrueのときだけ購入が成立するんだ。

購入が成立したら、 変数 ( ) を ( ) ずつ変える で「★クリック数」を-100して代金を払い、「★1秒の自動獲得数」を+10するよ。これで毎秒10クリック分が自動で増えるようになるんだ。

#47オートクリッカーの自動加算

プログラミングのヒント
購入処理のすぐ後に、実際に毎秒クリック数を自動で増やす仕組みを作るよ。ここでScratchの面白い特性を活用するんだ。
step-46

購入条件が成立した後に、内側にもう1つの 制御 ずっと を置くよ。この中で 制御 ( ) 秒待つ で1秒待ってから、 変数 ( ) を ( ) ずつ変える で「★クリック数」に「★1秒の自動獲得数」を加算し続けるんだ。内側のループに入るとスクリプトはロックされるけど、もう一度アイテムをクリックすると新しいスレッドが起動して2回目の購入もできるよ。

プログラミングのヒント
Scratchでは、同じスクリプトを何度も同時に動かすことができるんだ。ボタンをクリックするたびに新しい「スレッド」が生まれて、前のスレッドと並行して動くよ。本物のゲーム開発でも「マルチスレッド」という同じ考え方が使われていて、複数の処理を同時に走らせるのはとても大切なテクニックなんだ。

#48購入不可時の保護処理

プログラミングのヒント
アイテムをクリックしたけどクリック数が足りない場合の処理も作るよ。購入スクリプトと同時に動く安全装置のような役割だよ。
step-47

イベント このスプライトが押されたとき でもう1つのスクリプトを作り、 制御 ずっと の中で「★クリック数」が100未満かつマウスがアイテムから離れている場合に、 変数 ( ) を ( ) にする で「★クリック数」をそのまま維持するよ。購入できないときに値が変わらないことを保証するんだ。

#49ページ切替時の非表示処理

プログラミングのヒント
ショップにはページが複数あるから、ページを切り替えたらこのアイテムを隠す必要があるよ。ショップアイテム1はページ1にあるから、ページ2に移動したら見えなくなるようにしよう。
step-48

イベント ( ) を受け取ったとき で「次のショップ」メッセージを受け取ったら、 制御 ずっと の中で「★ショップページ」が2かどうかチェックするよ。2なら 見た目 隠す で隠して、 見た目 ( ) へ移動する で最背面に送るんだ。

#50ページ1での表示処理

プログラミングのヒント
逆にショップページが1のときは、このアイテムを表示する処理が必要だよ。旗がクリックされた時から常にチェックし続けるんだ。
step-49

イベント greenflag が押されたとき から 制御 ずっと で、「★ショップページ」が1のときに 見た目 表示する で表示するよ。

#51表示時のレイヤーとコスチューム

プログラミングのヒント
表示するだけでなく、レイヤーの順番とコスチュームも正しく設定するよ。
step-50

見た目 ( ) へ移動する で最前面に移動して、 見た目 コスチュームを ( ) にする でコスチュームを設定するんだ。こうすることで、ページ1に戻ってきたときも正しい見た目で表示されるよ。

#52ショップアイテム2の配置

プログラミングのヒント
次はショップアイテム2を作るよ。このアイテムは「クリック倍率アップ」で、1クリックあたりの獲得ポイントを増やすタイプなんだ。

準備

スプライト「ショップアイテム2」を開く

ショップアイテム2ショップアイテム2
スプライトについてショップページ1のクリック倍率アップグレード(500クリックで+50/click)
どんな役割か1クリックあたりの獲得数を増やすアップグレードアイテムを作るよ。500クリック消費すると、1クリックで50ポイント多くもらえるようになるんだ。

実装

step-51

イベント greenflag が押されたとき で開始して、 動き x座標を ( ) 、y座標を ( ) にする でx:52、y:-32の位置に配置するよ。ショップアイテム1の下に並ぶ位置だね。

#53ショップアイテム2の初期表示

プログラミングのヒント
旗クリック時にアイテムの見た目を初期化するよ。ショップアイテム1と同じパターンだね。
step-52

イベント greenflag が押されたとき 見た目 表示する 見た目 ( ) へ移動する で最前面、 見た目 コスチュームを ( ) にする でコスチュームを設定するよ。

#54ショップアイテム2のホバー演出

プログラミングのヒント
ショップアイテム1と同じ要領で、マウスが触れると大きくなるホバーアニメーションをつけるよ。
step-53

イベント greenflag が押されたとき から 制御 ずっと で、 調べる ( ) に触れた を使ってマウスの接触を判定するよ。触れていればサイズ90に向かって、離れていればサイズ80に向かってイージングで近づけるんだ。

まとめ

ここまでで、クリッカーゲームの核となる部分が完成したよ!バッテリーをクリックしてポイントが増え、パーティクルが飛び散り、カスタム数字が光る――ゲームの「手触り」をつくる演出ブロックが揃ったね。ショップのページ切替と最初の2アイテムも動くようになったから、次はショップアイテムをさらに増やしていこう!

このスクラッチゲームの作り方への質問受付中! このスクラッチゲームの作り方への質問受付中!
チュートリアルで分からないことがあったらスクラッチAI「アスクラッチ」で何でも聞いてみよう!キミの作品の「中を見て」具体的にバグの調査をAIが手伝ってくれるよ!
アスクラッチで質問する
ブクマよろしくお願いします! ブクマよろしくお願いします!
どんどん追記・更新していくので、ブックマークやシェアよろしくお願いします!