スクラッチでマリオっぽいスクロールゲームを作る上級技⑩ もはやマリオメーカーっす

スクラッチでマリオっぽいスクロールゲームを作る上級技⑩ もはやマリオメーカーっす
グリフパッチ(動画)
ok-scratch(解説)

和訳解説は動画作者のグリフパッチさんご本人から許可をいただいて掲載しております。
チャンネルはYOUTUBE ( by griffpatch )からどうぞ。

マリオメーカーみたいにステージをカンタンにカスタマイズする仕組みを作っていくぞ!
スターター
プロジェクト
リミックス用プロジェクトへ
難しさ

任意)自分の作業中のスクラッチ作品URLを記録しておこう!再開するときに便利だよ。

LOADING...

※ この記録は今使ってるPCに保存されます。別のPCで作業するときは表示されません。

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

前回(ぜんかい)タイルをスクロールさせることに成功(せいこう)したね!上下(じょうげ)左右(さゆう)(うご)かすと画面(がめん)(がい)にタイルが移動(いどう)して、()えなくなると同時(どうじ)(ぎゃく)(がわ)(まわ)()んでリサイクルさせる仕組(しく)みを(つく)()んだ。しかも画面(がめん)(がい)移動(いどう)するときに発生(はっせい)するスクラッチ特有(とくゆう)問題(もんだい)()っかかり現象(げんしょう)」にBIGコスチューム対応(たいおう)する方法(ほうほう)(まな)んだ。なかなか充実(じゅうじつ)した(まな)びがあったんじゃないかな!(まな)びの加速(かそく)()まらない!今回(こんかい)もぶっ()ばしていくからついてきてくれぃ♪

今回(こんかい)目標(もくひょう)「」

地形(ちけい)生成(せいせい)準備(じゅんび)をする

ではスプライト「地形(ちけい)生成(せいせい)」を(ひら)いてほしい。
このスプライトにはコスチュームはなくて、コーディングだけしていく(よう)のスプライト。

リスト「★ステージグリッド(タイル設計(せっけい)())」を用意(ようい)する

タイルを規則的(きそくてき)(なら)べるためにリストを使(つか)って管理(かんり)していくので、このタイミングでリストを(つく)ろう。

リストでグリッドを管理(かんり)する作戦(さくせん)

でもリストでタテとヨコを管理(かんり)することなんて出来(でき)るだろうか?それには今回(こんかい)作戦(さくせん)内容(ないよう)事前(じぜん)理解(りかい)しておくことが大切(たいせつ)になってくる。

ここまでの復習(ふくしゅう)

まずグリッドは前回(ぜんかい)(まな)んだね。方眼(ほうがん)用紙(ようし)みたいに縦横(じゅうおう)整列(せいれつ)されたマス(タイル)みたいなイメージのデザインだったよね。こんな↓
で、スクラッチでタイル(マップチップ)をグリッド(じょう)(なら)べてスクロールすることまでは成功(せいこう)しているよね。

グリッドをリストで管理(かんり)する方法(ほうほう)

いまはランダムでいろんなタイルが(なら)べられているけど、今回(こんかい)のチュートリアルでは規則(きそく)(ただ)しく開発者(かいはつしゃ)意図(いと)したとおりに整然(せいぜん)とタイルを(なら)べていきたい。こんな↓
これをどうすればリストで管理(かんり)できるか、という作戦(さくせん)内容(ないよう)(つた)える。

グリッドは左下(ひだりした)から(かぞ)える

まずグリッドのマスはどういう順番(じゅんばん)(なら)んでいるだろうか。(した)()()てほしい。
このようにグリッドは左下(ひだりした)を1として、(うえ)()かって2,3,4とカウントアップしていき、(つぎ)(れつ)の一(ばん)()からまた5,6,7……と(かぞ)えていくんだ。

グリッドをリストで管理(かんり)する方法(ほうほう)

これをリストで管理(かんり)するとこうなる。
画像(がぞう)右側(みぎがわ)(あたら)しく表示(ひょうじ)されたリスト「★ステージグリッド(タイル設計(せっけい)())」の(なか)()てほしい。1つ()には10という数字(すうじ)(はい)ってるよね。これはステージグリッドの1つ()のマスにはコスチューム(ばん)(ごう)10のタイルが(はい)ってますよという意味(いみ)になるんだ。(つづ)けて2マス()、3マス()もコスチューム(ばん)(ごう)10のタイルが(はい)っていることが()()れる。で4つ()のマスには(なに)もないので、空白(くうはく)のタイル(=コスチューム(ばん)(ごう)2)が格納(かくのう)されている。そして5つ()だ。ここにはステージグリッドの5マス()のタイルが(はい)ってる。リストだけ()ると何番目(なんばんめ)から(つぎ)(ぎょう)になるのか()からないけど、そこは変数(へんすう)管理(かんり)すればタテが何個(なんこ)のグリッドなのか()かるから大丈夫(だいじょうぶ)。とまぁこれがグリッドをリストで管理(かんり)する(かんが)(かた)だ。これをしっかり(あたま)()れておくと、ココからの実装(じっそう)がより明確(めいかく)理解(りかい)できると(おも)う。よぉし(はなし)はここまでにして()(うご)かしていくぞぉ!
スクラッチでマリオっぽいスクロールゲームを作る上級技⑩ もはやマリオメーカーっすを語るok-scratch ok-scratch

u003cpu003eちなみに3(れつ)()と4(れつ)()は10,2,2,2だよ。u003c/pu003e

ブロック定義(ていぎ)「_地形(ちけい)生成(せいせい)する」を用意(ようい)する

じゃ、(さい)描画(びょうが)なしのブロック定義(ていぎ)用意(ようい)するよ!これが地形(ちけい)生成(せいせい)のメイン処理(しょり)だ。

リストを初期(しょき)()する

とりあえず処理(しょり)最初(さいしょ)にリストの初期化(しょきか)(おこな)おう。

ステージグリッドのサイズを変数(へんすう)()する

グリッドの横幅(よこはば)(たか)さを変数(へんすう)管理(かんり)していくようにしよう。

初期(しょき)()する

とりあえずヨコ30、タテ20で初期(しょき)()しておこう。

ステージの土台(どだい)(つく)

じゃあグリッドにタイルのコスチューム(ばん)(ごう)をどんどん()れていってステージを(つく)ってみよう。まずどんなステージを(つく)るのか共有(きょうゆう)するよ。(いま)から(つく)るのはこんな(かん)じの箱型(はこがた)のステージ↓
左右(さゆう)(かべ)があって、(うえ)には天井(てんじょう)(した)には(ゆか)がある、こんなシンプルなステージの枠組(わくぐ)みを(つく)っていくよ。使(つか)うタイルはすべてコスチューム(ばん)(ごう)10のもの。

(ひだり)(かべ)(つく)

まずは(ひだり)(かべ)から(つく)ってみよう。

ブロック定義(ていぎ)「_(かべ)追加(ついか)する」を用意(ようい)する

(かべ)追加(ついか)する処理(しょり)(さい)描画(びょうが)なしのブロック定義(ていぎ)にまとめていくよ。
()()
地形(ちけい)生成(せいせい)する処理(しょり)()()そう。

ステージグリッドの(たか)さだけ()(かえ)すループを(つく)

(かべ)(たか)さはステージグリッドの(たか)さと(おな)じだから、さっそくさっき(つく)った変数(へんすう)利用(りよう)しよう。

タイルを追加(ついか)する

(かべ)のタイルは10(ばん)だから、10をリストに追加(ついか)していくよ。
  • 10は定数(ていすう)として変数(へんすう)化(か)すべき? 10は定数(ていすう)として変数(へんすう)化(か)すべき?
    u003cpu003eパッと()で10が(なに)意味(いみ)しているのか()かりづらいから、いつもどおりマジックナンバー(≒よく()からない数字(すうじ))をなくすために10も変数(へんすう)にしたほうがいいかな、と(おも)(ひと)もいるかも。でもそうするとコスチュームの(かず)だけ変数(へんすう)(つく)必要(ひつよう)があって、なにげにコスチューム(すう)が67()あるから(おお)すぎるwu003c/pu003eu003cpu003e(ぎゃく)()かりづらくなりそうだから、リスト「★ステージグリッド(タイル設計(せっけい)())」に追加(ついか)する数字(すうじ)はコスチューム(ばん)(ごう)ですよとコメントなどに明記(めいき)しておくのがベター。u003c/pu003e

(ゆか)天井(てんじょう)(つく)

(となり)(れつ)(うつ)って、今度(こんど)(ゆか)天井(てんじょう)(つく)ろうか。
今度(こんど)はさっきより複雑(ふくざつ)だね。まず一番(いちばん)(した)にはタイル10の(ゆか)があって、(あいだ)空白(くうはく)だからタイル2がズラッと(なら)んで、最後(さいご)にまたタイル10で天井(てんじょう)(つく)(かん)じだね。

ブロック定義(ていぎ)「_(ゆか)天井(てんじょう)追加(ついか)する」を用意(ようい)する

これもブロック定義(ていぎ)にしていこう。

(ゆか)追加(ついか)する

まずはタイル10を追加(ついか)しようか。

空白(くうはく)追加(ついか)する

つぎに空白(くうはく)だからタイル2をズラッと追加(ついか)しよう。追加(ついか)する回数(かいすう)(ゆか)天井(てんじょう)の2タイル(ぶん)(たか)さから()いた(かず)だ。
タイル2を追加(ついか)する
中身(なかみ)空白(くうはく)とする。

天井(てんじょう)追加(ついか)する

最後(さいご)天井(てんじょう)としてタイル10を追加(ついか)しよう。

ブロック定義(ていぎ)「_(ゆか)天井(てんじょう)追加(ついか)する」を実行(じっこう)する

ではこのブロック定義(ていぎ)実行(じっこう)したいのだけど、(いま)(つく)ったのは1(れつ)だけだよね。イメージ(どお)りなら(おな)地形(ちけい)がヨコにもずっと(つづ)いてほしいのでループで(かこ)って一気(いっき)(つく)っちゃいたいよね!
(りょう)サイドの(かべ)(のぞ)いた回数(かいすう)だけ()(かえ)
(りょう)サイドに1つずつ(かべ)があるから合計(ごうけい)2を横幅(よこはば)から()いた回数(かいすう)()(かえ)せばOKだね。
実行(じっこう)していくぅ
よしよし、きっと上手(うま)くいってるはず。

(みぎ)(かべ)(つく)

まだ実行(じっこう)しても描画(びょうが)されないけど(みぎ)(かべ)(つく)っちゃおう。
といってもさっき(つく)ったブロック定義(ていぎ)「_(かべ)追加(ついか)する」を実行(じっこう)したらOKだね。

メッセージ「地形(ちけい)生成(うみな)します」を(つく)

この一連(いちれん)処理(しょり)(うご)かすタイミングはメッセージを()()ったときにするよ。こうすることで(ほか)のスプライトの初期化(しょきか)などが()わったり、都合(つごう)のいいタイミングで地形(ちけい)生成(せいせい)ができるゆえ。

実行(じっこう)する

スプライト「タイル」からメッセージを(おく)

このメッセージを(おく)るのはタイルからにしておこうか。

リストの中身(なかみ)確認(かくにん)する

よし、これで(みどり)(はた)()したらリスト「★ステージグリッド(タイル設計(せっけい)())」の(なか)にちょうど600()のデータが(はい)るようになったはずだからチェックしてみてほしい!

タイルのクローン生成(せいせい)手順(てじゅん)改修(かいしゅう)する

リストはできたけど、まだ(みどり)(はた)()してもタイルが設計(せっけい)()(どお)りには(なら)ばないよね。ということでこのリストをしっかり使(つか)っていくところを(つく)っていく。その前提(ぜんてい)として、すでに(つく)ったタイルのクローン生成(せいせい)手順(てじゅん)(すこ)しだけ変更(へんこう)しておこうと(おも)う。ここから(ひら)いてほしいスプライトは「タイル」だ。

変数(へんすう)「ステージグリッドのインデックス」を(つく)

(あたら)しく変数(へんすう)(つく)るよ。
この変数(へんすう)役割(やくわり)なんだけど、リスト「★ステージグリッド(タイル設計(せっけい)())」のインデックスを保持(ほじ)することになる。
  • インデックスってなに? インデックスってなに?

    インデックスというのはリストの何番目かという数字です。リストじゃなくても例えば図書館の本棚を想像してみて。本棚の5番目にある本のインデックスは5。19番目にある本のインデックスは19みたいなイメージ。

    プログラミングだとインデックスという言葉は必須知識の1つだから、もし知らなかったらこの機会に覚えよう。

    ちなみにメジャーなプログラミング言語だとインデックスは1番目が0になる。2番目が1になる。でもスクラッチだと1番目は1だし、2番目は2になってるから注意。

初期(しょき)()する

座標(ざひょう)変更(へんこう)する

このタイミングで座標(ざひょう)処理(しょり)変更(へんこう)していく。(した)(しめ)した2箇所(かしょ)をまずは()えるよ。
この2箇所(かしょ)(しき)削除(さくじょ)して、シンプルに16にしておいてほしい。
この16はタイルのサイズ(32)の半分(はんぶん)という()(あじ)がある。(あとでリファクタリングのときに変数(へんすう)()する予定(よてい))16にセットするのは、それがタイルのセンターを(しめ)座標(ざひょう)だから。
これを32ずつズラせば、すべてのマスにきっちりタイルが()まっていく。
  • クローン生成(せいせい)数(すう)を使(つか)った計算(けいさん)ではだめなの? クローン生成(せいせい)数(すう)を使(つか)った計算(けいさん)ではだめなの?
    u003cpu003e変更(へんこう)(まえ)はクローン生成(せいせい)(すう)()(ざん)をして座標(ざひょう)算出(さんしゅつ)してたけど、今後(こんご)はカメラを使(つか)ってステージを(うご)かしていくように()えるから、(さき)見据(みす)えて変更(へんこう)しておいたんだ。カメラはスプライト「マリオ」を(つく)るときに実装(じっそう)する予定(よてい)だから、もうちょっと(さき)だね。u003c/pu003e

ステージグリッドのインデックスを()える

(つぎ)はインデックスを変更(へんこう)しよう。

タテ移動(いどう)する

コーディングは(つぎ)(とお)り。
「■クローン生成(せいせい)(すう)Y(かい)()(かえ)す」というループ(ない)にブロックを追加(ついか)したよ。こうすることで下図(かず)のような(うご)きがデータ(じょう)実現(じつげん)できるってこと。

改行(かいぎょう)する

(つぎ)はヨコ移動(いどう)、ではなくて改行(かいぎょう)改行(かいぎょう)する手順(てじゅん)としては、
  1. まずヨコ移動(いどう)してから
  2. (つぎ)一番(いちばん)(した)移動(いどう)する
複雑(ふくざつ)()えるけどコーディングしてみるとカンタン。ステージグリッドのインデックスを(つぎ)演算(えんざん)結果(けっか)ずつ()えればOK。
ステージグリッドのインデックスに反映(はんえい)するとこうなる↓
演算(えんざん)はシンプルだけど、直感的(ちょっかんてき)()かりづらいよね!演算(えんざん)を2段階(だんかい)(かんが)えると理解(りかい)しやすいよ。下図(かず)()てみて。
2つの変数(へんすう)役割(やくわり)
ステージグリッドとクローン生成(せいせい)(すう)Yという2つの変数(へんすう)使(つか)っているよね。復習(ふくしゅう)がてら(かく)変数(へんすう)役割(やくわり)(おも)()してみよう。
  • ステージグリッドの(たか)さは、画面(がめん)(がい)()えない範囲(はんい))も(ふく)めたステージのタテの(おお)きさ
  • クローン生成(せいせい)(すう)Yは、画面(がめん)(ない)()える範囲(はんい))に生成(せいせい)されるクローンのタテの個数(こすう)
だからステージグリッドの(たか)さのほうが基本的(きほんてき)数字(すうじ)(おお)きい。
演算(えんざん)解説(かいせつ)
で、演算(えんざん)解説(かいせつ)をしようか。
① ヨコに移動(いどう)する
まずインデックスにステージグリッドの(たか)さを()すことでヨコの(れつ)移動(いどう)できる。この演算(えんざん)()るまでに変数(へんすう)「■クローン生成(せいせい)(すう)Y」(かい)()(かえ)すループでインデックスは1ではなくて画面(がめん)の1つ(じょう)位置(いち)(うえ)()だと5になっているはずだ。そこにいったん変数(へんすう)「■ステージグリッドの(たか)さ」を()してみようか。(うえ)()参考(さんこう)にすると6だね。だから5+6=11ってことだね。これを視覚(しかく)()すると下図(かず)のようになるよ↓
② 一(ばん)()移動(いどう)する
そして変数(へんすう)「■クローン生成(せいせい)(すう)Y」をマイナスするんだよね。上図(じょうず)参考(さんこう)にするとクローン生成(せいせい)(すう)Yは4だね。つまり11ー4=7だ!インデックス7はちょうど(つぎ)(ぎょう)の一(ばん)()位置(いち)だね。
これでステージの(たか)さとクローン生成(せいせい)(すう)がどんなにかけ(はな)れていても確実(かくじつ)改行(かいぎょう)処理(しょり)上手(うま)くいくんだ。
スクラッチでマリオっぽいスクロールゲームを作る上級技⑩ もはやマリオメーカーっすを語るok-scratch ok-scratch

u003cpu003e改行(かいぎょう)するのは、この演算(えんざん)唯一(ゆいいつ)方法(ほうほう)ではないよ。今回(こんかい)はこの方法(ほうほう)採用(さいよう)しているけど、数学的(すうがくてき)改行(かいぎょう)算出(さんしゅつ)する方法(ほうほう)はもっとある。だからキミの(かんが)えがこれとは(ちが)っててもOK。u003c/pu003e

(すこ)しだけ()れたけどカメラを実装(じっそう)する段階(だんかい)になると、こういった数学的(すうがくてき)確実(かくじつ)上手(うま)くいく方法(ほうほう)実装(じっそう)しておいたほうが(なに)かと無難(ぶなん)になるんだよ。仕組(しく)みが複雑(ふくざつ)でも1つ1つは確実(かくじつ)(うご)いてくれれば、バグったときもどこを(なお)せばいいか発見(はっけん)しやすいし。または土管(どかん)でワープみたいなマリオの位置(いち)座標(ざひょう)がガラリと一変(いっぺん)するような処理(しょり)(つく)るときも、こういう計算(けいさん)位置(いち)()()仕組(しく)みが(ととの)っているとバグが()きにくいんだ。

着替(きが)える()(ところ)()える

いまコスチュームをランダムで着替(きが)えているブロックがあるけど、これをメッセージ「タイルを配置(はいち)します」を()()ったときに()えよう。

既存(きそん)のブロックを削除(さくじょ)する

いまのブロックは削除(さくじょ)してOK。

(あら)たにブロックを()

メッセージ「タイルを配置(はいち)します」を()()ったときにコスチュームを着替(きが)えるようにしていくよ。まずはココ↓にブロックを()こう。

設計(せっけい)()(どお)りのタイルを配置(はいち)する

リスト「★ステージグリッド(タイル設計(せっけい)())」で指定(してい)した(とお)りのタイルを配置(はいち)したいので、リストからコスチューム(ばん)(ごう)()()そう。これを使(つか)うよ↓
ちょい(へん)数名(すうめい)(なが)いけどw
スクラッチでマリオっぽいスクロールゲームを作る上級技⑩ もはやマリオメーカーっすを語るok-scratch ok-scratch

u003cpu003eステージグリッドのインデックスは(かく)クローンが別々(べつべつ)()()っている状態(じょうたい)だよ。だから自分(じぶん)がどのタイルに着替(きが)えるべきか、クローンごとに判断(はんだん)できるように(ととの)ってる。u003c/pu003e

カチッとハメていこう↓
うん、(なが)いねw
スクラッチでマリオっぽいスクロールゲームを作る上級技⑩ もはやマリオメーカーっすを語るok-scratch ok-scratch

u003cpu003e解説(かいせつ)のためにリストの名前(なまえ)にカッコでタイル設計(せっけい)()()いてあるけど、把握(はあく)できたならもうカッコ(ない)()してもOKだよ。u003c/pu003eu003cpu003eあとはステージグリッドのインデックスを、ステージグリッドindexとかステージグリッドidxとか()いてもいいかな。u003c/pu003eu003cpu003e解説(かいせつ)記事(きじ)だからそのままにしておくけど、みんなは自由(じゆう)にしてね。u003c/pu003e

カメラの座標(ざひょう)初期(しょき)()しておく

テストの(まえ)にカメラの座標(ざひょう)初期(しょき)()しておくね。カメラXは240、カメラYは180にしておくよ。

テストぉ!

いよいよテストで(うご)かしてみるぞ!(なが)かった!
やふー!なんかめっちゃステージの土台(どだい)っぽいの(語彙力(ごいりょく)w)()てきたぁ!みんなも出来(でき)た?

ステージを洗練(せんれん)させる

とはいえまだまだスクロールしてみると課題(かだい)山積(やまづみ)しているのが()かる。
次回(じかい)はこのタイルがループしちゃってる問題(もんだい)にタックルしていく。もう(すこ)しで本格的(ほんかくてき)なスクロールゲームの土台(どだい)()(はい)るぜ!
スクラッチでマリオっぽいスクロールゲームを作る上級技⑩ もはやマリオメーカーっすを語るok-scratch ok-scratch

u003cpu003eこのチュートリアルではみんなが(つく)った作品(さくひん)をスタジオに掲載(けいさい)していこうと(おも)ってるので、もし自分(じぶん)のアレンジを()てほしい!という(ひと)がいたらスタジオのコメントで(おし)えてね。u003c/pu003eu003cpu003eあと挑戦(ちょうせん)したけど上手(うま)くいかなくて、自分(じぶん)ではもう無理(むり)挫折(ざせつ)寸前(すんぜん)、みたいな(ひと)もコメントで状況(じょうきょう)(おし)えてくれたら、時間(じかん)()けるときにチェックしてみるよ。u003c/pu003eu003cpu003eu003ca href=u0022https://scratch.mit.edu/studios/33795511u0022 target=u0022_blanku0022 rel=u0022noreferrer noopener nofollowu0022u003ehttps://scratch.mit.edu/studios/33795511u003c/au003eu003c/pu003e

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

スクラッチプログラミングのゲーム攻略

スクラッチプログラミングのゲーム

    • 厳選されたスクラッチ人気作品リストがレビュー付きで楽しめます
      趣味に関するスクラッチ作品例
      勉強になるスクラッチ作品