Arcadeとは?
マイクロソフトが運営するMakecodeというプログラミング開発環境のひとつで
Arcadeのページにアクセスし、ブラウザ上でプログラミングを行うことができます。
命令はブロックになっていて、それを組み合わせてプログラムすることができます。また、ブロックからJavaScript(TypeScript)やPythonに切り替えることもできます。
Scratchとなにがちがうの?
一番の特徴は、作ったゲームを市販されているゲーム機に入れて遊ぶことができるところです。
スイッチサイエンスなどで対応機種を購入することができます。
また、ゲーム機は自作することもできます。
「ゲーム機」も作って遊ぼう!MakeCode Arcade
https://note.com/phillowcompiler/n/n797de5dfa44e
当初は英語でしたが、日本語にも対応されたので、小学生も遊ぶことができますね!
同じマイクロソフトなので「GitHub」とも連携でき、プロジェクトをArcadeから変更することも、GitHubから変更することもできるようになっています。他の人が作った拡張機能もGitHubのURLからArcadeに取り込むことができます。
Arcadeでアクションゲームを作ろう
###テスト用プロジェクトを開こう
背景やキャラクターはArcadeにもともと入っている素材を使うこともできますし
自分で描いたり取り込んだりすることもできます。
今回はテスト用に、背景・タイルマップ・キャラクターを用意してみました。
https://makecode.com/_6TpPVqcD8ec7
ページを開いて「EditCode」をクリックすると、プログラム編集画面が開きます。
###キャラクターを表示しよう
プログラム編集画面を開くと
「最初だけ・背景画像を設定」というブロックが配置されています。
これが背景を表示するプログラムです。
ここに、キャラクターを追加してみましょう。
「スプライト」をクリックすると、関連するブロックが現れます。
「mySpriteをスプライト□…にする」というブロックを図のように組み合わせます。
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F686444%2Ff5662039-03b5-4311-04b4-f91ca32381a3.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=63fb6a6907a250d6f050e931be26e31e)
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F686444%2F851998eb-7e17-6578-5ce5-133629f89caf.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=7ba7fae16a460b306487c7ce7fa53cbc)
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F686444%2F5d1b4bd5-8930-9538-7ddc-312ff2b05bc8.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=4dc13979c5621a715c7e559af5a17383)
###マップを作ろう
Arcadeは「タイルマップ」を使って、ステージを作ることができます。
「シーン」カテゴリから「タイルマップ□を設定する」を取り出し、組み合わせます。
□をクリックすると、タイルマップ編集画面が開きます。
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F686444%2Fd2267d87-b071-0f53-baa5-eb2c9d4d3a6f.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=3801405081d21828dd43a3b4da593f16)
左のツールボックスをクリックでもツール変更できますが、ショートカットにも対応しています。
- B:ペンツール
- G:バケツツール
- E:消しゴムツール
- H:ハンドツール
- Alt:スポイト
などです。
できたら完了をクリックします。
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F686444%2Fef81a860-42db-e24e-ddbc-987c4f2552b1.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=326cf21d26527c3d6a50ce5cc66dafbd)
###キャラクターを十字キーで動かそう
「コントローラー」カテゴリの「mySpriteをボタンで動かす」を組み合わせます
キャラクターが十字キーで動くようになりました。
でも空中でウロウロしてしまいます。
###キャラクターに重力をつけよう
キャラクターのパラメータを変えるには
「スプライト」カテゴリの「set mySprite x to 〇」ブロックを使います。
組み合わせて「set mySprite ay to 300」となるように変更します。
キャラクターが下に落ちていくことを確認できます。
###タイルマップに壁を設定しよう
キャラがタイルマップの壁や床にぶつかるようにします。
さっき設定したタイルマップを開きます。
「壁アイコン」をクリックして壁編集モードにします。
壁モードになったら、ペンツールで、壁や床に設定したいところを赤く塗ります。
キャラが地面に立てるようになりました。
###キャラがジャンプできるようにしよう
今のままでは、上キーを押すとフワフワ浮かんでしまうので
左右キーで移動・Aキーでジャンプするようにしてみます。
さっき組み合わせた「mySpriteをボタンで動かす」の⊕ボタンをクリックすると
vxとvyを入力できるようになります。
上下を動かなくしたいので、vyを0に設定します。
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F686444%2Ffb308bd2-110c-6ddf-79d2-9b02c82a0c4a.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=0de12a11efd7941b3f4946777a6ec513)
これでキャラクターがジャンプできるようになりました。
####地面にいる時だけジャンプしてほしい
このままだと、連続でAボタンを押すと空中でもジャンプできてしまいます。
「論理」カテゴリの「もし○○なら」と
「シーン」カテゴリの<mySpriteが○○の壁に当たった>を組み合わせて、図のように配置します。
これでキャラが下の壁(地面)に当たったときだけ、ジャンプするようになりました。
###キャラがステージからはみ出ないようにしたい
「シーン」カテゴリの下の方にある
「カメラでスプライトを追う」を使うと、キャラの移動に合わせてステージがスクロールするようになります。
###キャラをアニメーションさせたい
「高度なブロック」「拡張機能」をクリックすると、様々な拡張機能を追加することができます。
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F686444%2F8583df65-3695-d227-1443-d48090594eea.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=ed9e600a2c9fd7994a0ef29929c99bf3)
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F686444%2F03e8b1eb-38fc-dc95-d43f-422d90927229.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=91a3f73517b2ed680968f407eab24a16)
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F686444%2F54c7584e-8196-9557-0b61-5d09781d3323.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=ee0d6296bc94f41cb223492197faba3e)
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F686444%2F9a05d7a8-5efd-b97e-6cbe-425c55dda391.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=0e91aabcb718d7841d046d8c2fb8afb0)
####アニメーションを止めたい
歩いていない時には、アニメーションを止めておきます。
「右ボタンが**離した**時」と「アニメーションを終了」を組み合わせます。
このままだと、歩くモーションのまま止まってしまうので
「スプライト」カテゴリの「mySpriteの画像を□にする」ブロックで、止まっている画像にしておきます。
####動きにあわせてアニメーションを追加
上記の方法で、どのキーが押されたときに、どのアニメーションをするかを割り振ることができます。
また、しゃがみなどはアニメーションがいらないので「mySpriteの画像を□にする」で画像を変えるだけでOKです。
キーが離された時に、画像をリセットするのを忘れないようにします。
###ゲームオーバーとゲームクリア
####特定のタイルに触れるとゲームオーバーにする
タイルマップに「触れてはいけないタイル」を置きます。
GalleryでもMyTileでもなんでもいいですが、ここでは赤色タイルを作って置きました。(+ボタンでタイルを追加できます)
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F686444%2F4980eb68-4232-f37b-12e5-5930b3d1c313.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=d93792d87ad5b6268b2c386f039d3ca1)
これで、赤いタイルに触れると、「YOU LOSE」と表示されるようになりました。
####同じ方法でゲームクリアを作る
こんどは、ゴールに設定するタイルを、マップの上におき
そのタイルに触れたらゲームクリアになるようにします。
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F686444%2F72571470-df4c-26d7-7c1f-44e51cf4f393.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=37296543f5dc9c104dd931df1d81620c)
###敵を追加しよう
####敵の出現場所を決める
まずは、敵が出てくる場所を決めましょう。これもタイルマップを使うとラクに設定できます。
敵が出現するタイルを決め、配置します。
ここでは草むらタイルを敵の出現タイルとしました。
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F686444%2F418d5b3c-4b32-869f-5e1b-e6e3aada8e49.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=b99f7a7e869cc8bd6353dbfc019a7b29)
####敵をたくさん登場させる
「ループ」カテゴリの「配列listの値をvalueに入れてくりかえす」ブロックに
「シーン」カテゴリの(すべての□位置の配列)を組み合わせます。
listに近づけると、配列が組み合わせられます。タイルは、草むらのタイルを選びます。
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F686444%2F74193372-2e8f-4495-0f92-f8f2bee35152.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=5ed7307e4781f14b52524f0c10b47dd2)
####敵の場所を設定する
草むらタイルの場所はvalueに入ってきます。これを使って場所を設定します。
「シーン」カテゴリから「mySpriteをタイルマップ列行の上に配置」を組み合わせます。
変数名をmyEnemyに変更し、valueをドラッグして列行に組み合わせます。
これで、タイルの場所にmyEnemyが移動するようになりました。
####敵の速度・跳ね返りなどを調整する
敵の画像サイズによって、出てくる位置が思っている場所と違うことがありますので
「change myEnemy y by 〇」のブロックなどを使って微調整します。
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F686444%2F968117b6-a012-23e1-271c-0bdcaafc2354.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=82dd891930c152e83678ec516c81d11e)
###ここまでのサンプル
下記のURLからここまでのプログラムを確認できます。
https://makecode.com/_MkMLkTKmfTYp
ジャンプモーションやステージの切り替えなどは今回やっていませんが
ステージ番号を変数で管理すれば簡単に作れると思います。
ステージを増やしたり、色々な敵を追加したりして試してみて下さいね。