【スクラッチ】セーブ&ロード機能を実装してみよう

ブロックの応用テクニック
Screenshot
Scratch星人
Scratch星人

ゲームをしていて「途中でやめなければいけない・・」という経験はありませんか?

そんな時、セーブ機能があればどれだけ助かるか!と思いますよね。

この記事ではスクラッチでセーブ&ロード機能を実装する方法を紹介します。

少しレベルアップした内容ですが、ひとつひとつ丁寧に解説していくので、ぜひ最後までチャレンジしてみてください。

セーブ&ロードの仕組みを考えよう

まず「セーブとロードって何をしているの?」というところから整理しましょう。

セーブとは、今のゲームの状態(レベル・スコア・アイテムの所持状況など)をどこかに保存することです。

ロードとは、保存しておいたデータを読み込んで、ゲームに反映させることです。

本物のゲームではデータをサーバーやハードディスクに保存しています。

スクラッチでは、クラウド変数というしくみを使うことで、同じようなことができます。

クラウド変数とは?

通常の変数はゲームを終了すると消えてしまいます。

スクラッチの場合、そのまま残ることもありますが、基本的な使い方の一つとしてゲームを開始した際に変数の値を初期値にリセットするため、消えると考えて読み進めてください。

「クラウド変数」はインターネット上に数字を保存できる特別な変数です。

以前の記事でも解説しているので、ぜひ目を通してみてください。

【スクラッチ】クラウド変数の使い方
Scratch星人「クラウド変数」…なにやらカッコいい名前ですね!この記事では「クラウド変数」の使い方を覚えて、スクラッチをさらに楽しむ方法をご紹介します。クラウド変数とは変数の値が保存され、履歴として残るものを「クラウド変数」と言います。…

通常の変数との違いをまとめると次のようになります。

項目通常の変数クラウド変数
ゲーム終了後消える残る
別の端末から見られない見られる
保存できる型数字・文字数字のみ
必要なものなしScratchアカウント

「数字しか保存できない」という点が、クラウド変数の最大の制約です。

この制約をどう乗り越えられるかが、今回のポイントになります。

クラウド変数を使うための準備

クラウド変数を使うには、Scratchアカウントにログインしている必要があります。

また、クラウド変数が使えるのはNew Scratcherを卒業したアカウントのみです。一定期間活動することで、自動的に切り替わります。

準備ができたら、変数を新規作成するときに「クラウド変数(サーバーに保存)」にチェックを入れましょう。

Screenshot
Screenshot

クラウド変数は、変数名の先頭に「☁︎」マークが付くので、すぐに見分けられます。

プログラムを作成しよう

今回は、シンプルなRPG風のゲームを例に「レベル」と「所持金」の2つをセーブ・ロードするプログラムを作ります。

まず、次の変数を用意してください。

変数名種類役割
レベル通常の変数現在のレベル
所持金通常の変数現在の所持金
☁セーブデータクラウド変数保存用

「数字しか保存できない」クラウド変数に、レベルと所持金の2つの数字をまとめて保存するのが今回の工夫です。

例えば、レベルが「5」・所持金が「1200」のとき、「51200」という1つの数字にして保存します。

ロードするときは、この数字を分解して元に戻します。

セーブボタンのコード

Screenshot

なぜ10000をかけるのか?

所持金が最大9999まであると想定した場合、レベルに10000をかけて前に置くことで、あとから分解しやすくなります。

レベル所持金セーブデータ
150010500
5120051200
129999129999
Scratch星人
Scratch星人

所持金の設定をもっと多くしたい場合は、かける数を増やせばいいわけです!

この「複数の数字を1つにまとめる」考え方を、プログラミングではエンコードと呼びます。

ロードボタンのコード

保存した数字を分解して、レベルと所持金に戻します。

Screenshot

分解のしくみを解説します。

セーブデータが「51200」の場合を例に考えてみましょう。

まずレベルを取り出します。

51200 ÷ 10000 = 5.12
→ 小数点以下を切り捨て → 5 ←これがレベル

次に所持金を取り出します。

51200 - (5 × 10000) = 51200 - 50000 = 1200 ←これが所持金

数字を「割り算と引き算」で分解しているだけです。

これをデコードと言います。エンコードとデコードはセットで覚えておきましょう。

調整用のコード

Screenshot

今回の記事では、実際のゲームは作成していないので、初期化と、変数の値を変更するプログラムを作成しておきましょう。

注意点

クラウド変数を使う際に、いくつか知っておきたいことがあります。

保存できる数字の桁数に上限がある

クラウド変数に保存できるのは256文字以内の数字です。レベルや所持金の最大値を決めるときに意識しておきましょう。

複数人が同時にプレイするとデータが上書きされる

クラウド変数はプロジェクトを見ているすべての人で共有されています。自分のセーブデータが他の人に上書きされてしまう可能性があります。完全なセーブ機能を作るには、ユーザーIDを組み合わせた応用テクニックが必要です。

オフラインでは使えない

クラウド変数はインターネットに接続している環境でのみ動作します。

まとめ

クラウド変数を使ったセーブ&ロード機能の実装方法を解説しました。

今回のポイントをまとめます。

  • クラウド変数はインターネット上に数字を保存できる
  • 複数のデータは「掛け算で合体→割り算で分解」してやりとりする
  • この考え方をエンコード・デコードという

保存したいデータが増えた場合も、同じ考え方で桁数を増やしていけば対応できます。

ぜひ自分のゲームにセーブ機能を追加して、本格的な作品に仕上げてみてください( ・∇・)

コメント

タイトルとURLをコピーしました