月曜日ですね
世間では月曜日らしいので久しぶりにゲーム制作の進捗報告でもしようかと思います(?)。今回はウディタでなくHSPでつくってるやつのほうの報告です。
こんなのをつくってしまった
前回までの内容。また数ヶ月前の記事を引っ張りだすことになってるけど、こちらになります。
inujini.hatenablog.com
今回はタイトル画面を作成しました。↑キーを押すとゲーム開始です。

ゲーム内容は、画面外に出ないようにタイミングよく↑キーを押してジャンプするだけのゲームとなっています。シンプル。

画面外に出てしまうとゲームオーバーです。それまでのジャンプ回数が画面に出てきます。再度、↑キーを押すとタイトルに戻ります。

これ、面白いの?
ノーコメントでお願いします。
タイトル画面とゲームシーンとゲームオーバー画面とスコア的な要素を含んでるので、何を言われようが僕はこれをゲームと言い張ります。ジャンプのパラメータをランダムにしたり、ジャンプの回数に応じて演出みたいの加えたらよりゲームっぽくなってくると思います。僕の中では「もうこれで完成でいいんじゃね?」みたいになってますけど…。
感想とか
主に画像の描画系の書き方がよくわからなかった。
でもとりあえず一つの形になったのでこれでいいのではないでしょうか?
以下、ソースコード
title "月曜ジャンプ"
buffer 1
picload "mon.bmp"
buffer 2, 200, 200
picload "monjum.bmp"
screen 0, 640, 480
*opening ;開始シーン
;メインゲームパラメータ
y = 240 -32
jFlag = 0
jBegin = 0
jCount = 0
redraw 0
color 255,255,255:boxf
pos 170,100
gcopy 2,0,0,200,200
pos 200,280
color 0,0,0
mes "Push [↑] Start"
mes "How to play"
mes "[↑] Jump"
redraw 1
stick openingKey
if(openingKey & 2){
goto *main
}
await 20
goto *opening
*main ;メインシーン
redraw 0
color 255,255,255:boxf
pos 320-32, y
gcopy 1,0,0,32,32
stick key
;ジャンプフラグ
if(jFlag = 1){
yTemp = y
y += (y - yPre) + 1
yPre = yTemp
;ジャンプ終了
;終了フラグが座標一致なので二段ジャンプでフラッピーバード挙動になる
if(y = 240-32 & jBegin = 0){
jFlag = 0
}
}
;ジャンプ
if(key & 2){
jCount = jCount + 1
jFlag = 1
jBegin = 1
yPre = y
y = y - 15
}
redraw 1
;確認用
pos 100,100
color 255,0,0
mes y
mes "フラグ:"+jFlag
mes "カウント数:" + jCount
await 20
;終了判定
if(y < -120 | y > 500){
goto *gameOver
}
goto *main
*gameOver ;終了シーン
redraw 0
stick endKey
color 255,255,255:boxf
color 0,0,0
pos 160,160
mes "GameOver"
mes "ジャンプした回数:" + jCount
mes "Push [↑] Replay"
if(endKey & 2){
color 255,255,255:boxf
goto *opening
}
await 20
redraw 1
goto *gameOver
とりあえず大きなシーン毎にステージを作成して、ループを回すという感じで作ってます。シーン内に処理があればサブルーチンで回すって感じをイメージ。それ以上に肥大化したものをつくろうとかは考えてないのでとりあえずこんなんで。まだ粗はあるから直しどころはたくさんあるけど、ひとまずはこれで……。
この言語まだよくわかってないけど、ループ回すお作法はこれでいいのだろうか。というか、これが自分の中で分かりやすい書き方だった。
*[ラベル名] redraw 0 color 255,255,255:boxf [処理] await 20 redraw 1 goto *[ラベル名]