#MakeCode Arcade
今年プログラミングが必修になるということで話題になっていたScratchとはどんなものだろうと思って見に行ってみました。
なるほどグラフィカルに簡単にプログラミングが出来るのか面白そうだなと思いましたが、もうちょい調べると似た感じのもので、MicroSoftのMakeCodeなるものがあることがわかりました。
しかもその中のMakeCode Arcadeは2Dゲームを作ることに特化しているということでちょっと遊んでみようと思ったわけです。
プログラミング経験のある人はパッと見で使い方がわかると思いますが、導入にはこちらの記事あたりが良いかも知れません。
で、何かをやってみようと思うと、こんにちはマイコン世代なので、まずはテニスゲームというかパドルとボールだけのスカッシュ的なものを作ってみてしまうのです。
カーソルキーか[A],[D]キーでパドルの左右移動です。Aボタンが[Z]か[スペース]、Bボタンが[X]です。
まあ単純で面白いというほどのものでもないですが、一応段々と玉が早くなるので限界が来ます。
これが数分~10分くらいで作れてしまうので楽しいです。
##プログラムの説明
簡単にプログラムの説明をしてみます。
これがパドルとボールの動きです。
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"は壁で跳ね返ると指定します
これはパドルとボールの当たり判定です
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
高いドの音を短く鳴らします
ここはゲームオーバーの判定です
forever
このブロックは常に動いています
if "ball" y > 112 then
もし"ball"のY座標が112よりも大きかったら以下を処理します
パドルに当てられず画面の下まで行ってしまったらということです
game over LOSE
ゲームオーバー(負け)ということです
この1文だけでゲームオーバーの処理をしてくれるのは楽です
ここでは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結構楽しいのでもう少し凝ったものも作ってみたいです。