MakeCode Arcadeで遊んで見る

#MakeCode Arcade
今年プログラミングが必修になるということで話題になっていた[Scratch](https://scratch.mit.edu/)とはどんなものだろうと思って見に行ってみました。
なるほどグラフィカルに簡単にプログラミングが出来るのか面白そうだなと思いましたが、もうちょい調べると似た感じのもので、MicroSoftの[MakeCode](https://www.microsoft.com/ja-jp/makecode)なるものがあることがわかりました。
しかもその中の[MakeCode Arcade](https://arcade.makecode.com/)は2Dゲームを作ることに特化しているということでちょっと遊んでみようと思ったわけです。
プログラミング経験のある人はパッと見で使い方がわかると思いますが、導入には[こちらの記事](https://daily-gadget.net/2019/05/01/post-2928/)あたりが良いかも知れません。

で、何かをやってみようと思うと、[こんにちはマイコン](https://www.m-sugaya.jp/arashi/pc-index.html)世代なので、まずはテニスゲームというかパドルとボールだけのスカッシュ的なものを作ってみてしまうのです。

[こちら](https://makecode.com/_JRx6f5duL1ti)

カーソルキーか[A],[D]キーでパドルの左右移動です。Aボタンが[Z]か[スペース]、Bボタンが[X]です。
まあ単純で面白いというほどのものでもないですが、一応段々と玉が早くなるので限界が来ます。
これが数分～10分くらいで作れてしまうので楽しいです。

##プログラムの説明
簡単にプログラムの説明をしてみます。
![mc001a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/325042/1a43ec7a-34c5-464a-c91e-883afa39d40f.png)
これがパドルとボールの動きです。
**on start**
　動作開始時に呼ばれるブロックです
**set dialog frame to タイプ**
　ダイアログを出して[A]ボタンが押されるのを待ちます
**show long text テキスト 位置**
　位置をbottomにしてテキストを表示します
**set score to 0**
　スコアを0にリセットします
**set "paddle" to sprite 絵 of kind "player"**
　絵を指定してスプライトを"paddle"という名前、"player"という種類で登録します
**set "paddle" to position to x 80 y 96**
　"paddle"の位置を(80,96)にします
**move "paddle" with buttons vx 150 vy 0**
　"paddle"をボタンで動かします、X速度(横方向)は150、Y速度(縦方向)は0
　つまり横にだけ動かせるように指定します
**set "paddle" stay in screen ON**
　"paddle"は画面内に留まるように指定します
　これによって画面端まで動かしたときに止まります
**set "ball" to projectile 絵 from "paddle" with vx 50 vy -50**
　"ball"を発射体として絵を指定して、"paddle"から発射します
　X速度(横方向)50，Y速度(縦方向)-50ですから斜め右上に向かって飛んでいきます
**set "ball" bopunce on wall ON**
　"ball"は壁で跳ね返ると指定します

![mc001b.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/325042/e9cfe1a0-212c-c395-fd68-73d5bf7a9402.png)
これはパドルとボールの当たり判定です
**on sprite of kind projectile overlaps otherSprite of kind "Player"**
　発射体（ここではボール）が種類"Player"の他のスプライトと重なったらという条件でこのブロック内の処理をします
**if "ball" vy(velocity y) > 0 then**
　もし"ball"のY速度が0より大きかったら、つまり下向きだったら以下の処理をします
　上からボールが飛んできたときにだけパドルが跳ね返すようにします
　これがないとボールとパドルが重なったときに引っかかって変な動きをするときがあります
**set "ball" velocity to vx "ball" vx(velocity x) vy "ball" vy(velocity y) x -1**
　長いですが、"ball"のX速度はそのままでY速度はかける-1する（反転する）という処理です
　これによってボールがパドルに当たったときに跳ね返ります
**change score by 1**
　スコアに1点加えます
**play tone at High C for 1/8 beat**
　高いドの音を短く鳴らします

![mc001c.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/325042/b1f6dfce-3742-ffee-2289-5c8f136af28f.png)
ここはゲームオーバーの判定です
**forever**
　このブロックは常に動いています
**if "ball" y > 112 then**
　もし"ball"のY座標が112よりも大きかったら以下を処理します
　パドルに当てられず画面の下まで行ってしまったらということです
**game over LOSE**
　ゲームオーバー（負け）ということです
　この1文だけでゲームオーバーの処理をしてくれるのは楽です

![mc001d.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/325042/763a0262-eb1b-a4d3-00ba-972c7bc4991e.png)
ここでは5秒毎にボールの速度を上げることでだんだんと難しくしています
**forever**
　このブロックは常に動いています（繰り返しています）
**pause 50000ms**
　5000ミリ秒（5秒）待ちます
　これで以下を5秒に1回処理することになります
以下の処理で横(X)、縦(Y)それぞれの速度を増します
**if "ball" vx(velocity x) > 0 then**
　もし"ball"の横方向速度が0より大きかったら
**set "ball" vx(velocity X) to ball vx(velocity x) + 5**
　X速度を5増やす（速くする）
**else**
　そうじゃなかったら（"ball"の横方向速度が0以下だったら）
**set "ball" vx(velocity X) to ball vx(velocity x) - 5**
　X速度を5減らす（速くする）
同じことをY速度にも行います

という感じでプログラムを解説してみました。
需要があるとは全く思えないですけど楽しかったので(^_^;

MakeCode Arcade結構楽しいのでもう少し凝ったものも作ってみたいです。