コミュ障だから明日が僕らをよんだって返事もろくにしなかった

何かを創る人に憧れたからブログをはじめたんだと思うよ

月曜なので作成中のゲーム(仮)の進捗とか

月曜日ですね

世間では月曜日らしいので久しぶりにゲーム制作の進捗報告でもしようかと思います(?)。今回はウディタでなくHSPでつくってるやつのほうの報告です。

こんなのをつくってしまった

前回までの内容。また数ヶ月前の記事を引っ張りだすことになってるけど、こちらになります。
inujini.hatenablog.com


今回はタイトル画面を作成しました。↑キーを押すとゲーム開始です。
f:id:andron:20170102224040p:plain

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

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

これ、面白いの?

ノーコメントでお願いします。
タイトル画面とゲームシーンとゲームオーバー画面とスコア的な要素を含んでるので、何を言われようが僕はこれをゲームと言い張ります。ジャンプのパラメータをランダムにしたり、ジャンプの回数に応じて演出みたいの加えたらよりゲームっぽくなってくると思います。僕の中では「もうこれで完成でいいんじゃね?」みたいになってますけど…。

感想とか

主に画像の描画系の書き方がよくわからなかった。
でもとりあえず一つの形になったのでこれでいいのではないでしょうか?

以下、ソースコード

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 *[ラベル名]