最終更新日:2024年4月27日
スクラッチが上達すると、スケールの大きな作品が作れるようになります。例えば、キャラクターが成長したり、アイテムを収集したり、いくつものステージが作れたりします。こんなとき、続きから始められる「セーブ機能」があると便利ですよね。この記事では、スクラッチでセーブ機能を作る方法を3つご紹介します。
目次
基本編
質問バージョン
質問バージョンでは、レベルや武器などをひとつずつ質問形式で入力してもらいます。入力された値を、該当の変数にセットしていけば完成です。今回は、「レベル」、「武器」、「ネコのx座標」、「ネコのy座標」をセットしています。
復活の質問からデータを読み込んだ後に、その値をゲームに反映させたいときがあると思います。例えば、「ネコの座標」です。データを読み込んだ後に、読み込んだ座標の位置に移動させたいですよね。いくつか方法があると思いますが、ここでは「メッセージ」を使いました。
プログラムの中身は下記から確認できます。
復活の呪文バージョン
復活の呪文は、区切り文字(私は「&」としました)を使って表現します。区切り文字を使うことで、一回の入力(復活の呪文)で複数の項目を読み込むことができます。
復活の呪文を手に入れる
復活の呪文は、「レベル」や「武器」などの変数から作られます。項目と項目の間に区切り文字を忘れずにいれましょう。
復活の呪文は以下のようなスクリプトを実行すると手に入れることができます。
復活の呪文を使う
下図は、復活の呪文を入力して、ゲーム内の変数に値が読み込まれる様子を表しています。
復活の呪文は以下のようにプログラミングします。分かりやすいように、ブロック定義を使って項目ごと(「レベル」「武器」「座標」)に値を読み込むようにしました。INDEX(インデックス)は、文字列(復活の呪文)の何番目の文字を指しているか判別するために使用しています。
各項目を読み込むプログラムでは、区切り文字が見つかるまで文字列をつなげていきます。出来上がった文字列は「復活の値」に保存されます。
プログラムの全体は下記から確認できます。
応用編
クラウド変数バージョン
クラウド変数を利用すれば、セーブデータをクラウド上に保存できるので、プレイヤーは復活の呪文を覚える必要がなくなります。
そもそも「クラウド変数」とは?
クラウド変数とは、クラウド(インターネットネットワーク)上に保存できる変数のことです。クラウド変数は、世界中の人と共有できる変数です。これを使えば、世界中の人とゲームのスコアを競ったりすることができます。
「クラウド変数」にはいくつか制約があるのでこれを守る必要があります。
・1つのプロジェクトにつき、10個までしかクラウド変数を作ることができない
・1つのクラウド変数につき、256文字までしか保存できない
・クラウド変数に保存できるのは、数値のみ
「クラウド変数」を使ったセーブ機能の仕組み
クラウド変数にゲームデータを保存し、前回の続きから遊びたいときはクラウド変数からデータをロードすることになります。クラウド変数に保存したい内容は、復活の呪文と同じです(下図の「10&2&140&-80&」)。しかし、数値以外の文字が含まれているのでこのままではクラウド変数には保存できません。
そこで、下記のような「エンコード」と「デコード」を使用します。エンコードをすれば、数値だけの文字列が取得できます。逆にデコードをすれば、数値だけの文字列から元の文字列が取得できます。
例えば、「10&2&140&-80&」をエンコードすると「37364838483740364846443648」となり、数値だけの文字列が得られます。これをクラウド変数に保存するのです。そしてセーブデータをロードしたいときは、クラウド変数に保存した数値だけの文字列(37364838483740364846443648)をデコードして、ゲームデータを復元(10&2&140&-80&)します。
デコード | エンコード |
---|---|
a ← | → 10 |
b ← | → 11 |
c ← | → 12 |
d ← | → 13 |
e ← | → 14 |
f ← | → 15 |
g ← | → 16 |
h ← | → 17 |
i ← | → 18 |
j ← | → 19 |
k ← | → 20 |
l ← | → 21 |
m ← | → 22 |
n ← | → 23 |
o ← | → 24 |
p ← | → 25 |
q ← | → 26 |
r ← | → 27 |
s ← | → 28 |
t ← | → 29 |
u ← | → 30 |
v ← | → 31 |
w ← | → 32 |
x ← | → 33 |
y ← | → 34 |
z ← | → 35 |
0 ← | → 36 |
1 ← | → 37 |
2 ← | → 38 |
3 ← | → 39 |
4 ← | → 40 |
5 ← | → 41 |
6 ← | → 42 |
7 ← | → 43 |
8 ← | → 44 |
9 ← | → 45 |
– ← | → 46 |
_ ← | → 47 |
& ← | → 48 |
セーブする(クラウド変数にデータを保存する)
それでは、クラウド変数を使ってデータをセーブするプログラムを見てみましょう。クラウド変数は世界中の人と共有する変数なので、データだけでなくユーザー名も保存することにしました。これを利用して、他のユーザーがセーブしたデータを利用できないようにします。
セーブデータを誰でもロードしてもいいということであれば、「ユーザー名をセーブする」というプログラムは必要ありません。
クラウド変数にデータを保存するときは、「0.1秒待つ」が必要です。クラウド変数への保存はすぐに反映されないので、「●秒待つ」ブロックを使って反映されるのを待つ必要があるのです。また、クラウド変数には、エンコードした文字列を保存するようにします。
ロードする(クラウド変数からデータを読み込む)
クラウド変数からデータをロードするプログラムです。自分が保存したセーブデータだけを読み込ませる場合は、クラウド変数に保存したユーザー本人のデータかどうかチェックします。他の人がセーブした内容をロードしてもよいのであれば、「データをロードする」だけプログラミングすれば OK です。
自分のセーブデータの場合は、変数「セーブデータあった?」を「はい」にします。自分のセーブデータと異なる場合は、「いいえ」にします。
以下は、クラウド変数に保存したデータをロードするプログラムです。最初にデコードをして、元の文字列に戻しています。
「レベル」、「武器」、「座標」とひとつずつデータをロードしていきます。
プログラムの全体は下記から確認できます。
まとめ
この記事では、3つのセーブ方法についてご紹介しました。セーブの方法は、簡単なものから難しいものまで色々あります。まずは、基本編の「質問バージョン」から試してみてください。
最終更新日:2024年4月27日
広告
最終更新日:2024年4月27日