その他の画面効果

まず、倍率を表示する部分です。


;■ 倍率表示
*messageborn
	dmy=my-ey.ent : if dmy<0 : dmy=-dmy
	dstv=480-dmy/50
	if highdst<dstv : highdst=dstv
	dstlevel=level
	dstcore=dstv*dstlevel
	score=en.ent*100*dstcore+score
	repeat imax
		if iff.cnt>0 : continue
		ix.cnt=ex.ent
		iy.cnt=ey.ent
		iv.cnt=dstv
		iff.cnt=20
		il.cnt=dstlevel
		realscore=en.ent*100		;・・・???
		break
	loop
return

倍率は、y軸座標の比較だけで行っています。そのため非常にシンプルです。自機に近いほど倍率が高いようにするための計算をし、あとはそれをスコアに加算するだけです。???の部分は何の処理をしてるのか私にもわからなくなってしまいました。realscoreという変数はここ以外には出てこないので、全く意味の無い行かもしれません^^;



続いてゲーム情報の表示をする部分です。ここにはなんのひねりもありません。画面上に倍率表示がしばらく残るような処理を行ってるだけです。まぁ特に解説する必要もないでしょう。


;■ ゲーム情報
*message
	repeat imax
		if iff.cnt<1 : continue
		rnd icr,8 : icr=icr*32+31
		rnd icg,8 : icg=icg*32+31
		rnd icb,8 : icb=icb*32+31
		color icr,icg,icb
		font "MSゴシック",iv.cnt*2+8,1
		pos ix.cnt,iy.cnt
		mes "× "+iv.cnt
		iy.cnt++
		iff.cnt--
	loop

	font "MSゴシック",12,3
	if highscore<score : highscore=score
	color 0,255,255
	pos 10,10 : mes "HIGHSCORE "+highscore

	color 255,255,255
	pos 10,30 : mes "SCORE "+score

	color 0,255,0
	pos 10,50
	mes "HIGH DISTANCE "+highdst

	color 255,255,0
	pos 10,70
	mes "LEVEL "+level

	color 255,255,255
	pos 10,460
	mes "SHIELD "
	if mf<1 : return
	repeat mf
		color 255,cnt*32,0
		pos cnt*10+60,460
		mes "■"
	loop
return



続いて、ポーズの処理です。Escが押されたらこのルーチンへ飛び、再度押されるまでメインルーチンには戻らないようにしてあります。


;■ ポーズ処理
*pausegame
	redraw 2
	font "MSゴシック",40,3
	rnd icr,8 : icr=icr*32+31
	rnd icg,8 : icg=icg*32+31
	rnd icb,8 : icb=icb*32+31
	color icr,icg,icb
	pos 250,200 : mes "PAUSE"
	stick pat : if pat&128>0 : return
	getkey returntop,121 : if returntop=1 : end ; 強制終了(F10)
	await 30
	redraw 1
goto *pausegame

例えば、ポーズ中も星は流れるようにする、といった処理を加えようと思ったら、もう一つメインルーチンを作るくらいのつもりでやらないとダメです。まぁサンプルではそこまで難しいことはやるつもりもなかったので、文字の色を変化させるだけに留めてあります。

一点だけ、メインルーチンにもある強制終了の処理ですが、ウィンドウモードで起動させてる限り特に必要はないのですが、全画面表示にしたり、DirectX対応にした場合などは必ず必要です。特にDirectX対応にした場合はCtrl+Alt+Delも効かなくなるので、無限ループになる部分には必ず入れるようにしましょう。

前のページへ戻る 解剖記のメニューへ戻る 次のページへ進む