【HSP3】DXライブラリをHSPで使ってみるサンプル(7.メニュー処理基本)

http://homepage2.nifty.com/natupaji/DxLib/dxprogram.html#N7 のHSP版です。DxLib.as は http://tkooler.moe.hm/hsp/img/DxLib.as から入手可能です。今回からウィンドウモードに変更になってます。またC言語版は関数ポインタを使用してますが、HSPで使用してもうれしくないので代わりにラベル型配列変数を使用しています。

http://homepage2.nifty.com/natupaji/DxLib/dxprogram.html#N7 のHSP版です。DxLib.as は http://tkooler.moe.hm/hsp/img/DxLib.as から入手可能です。今回からウィンドウモードに変更になってます。またC言語版は関数ポインタを使用してますが、HSPで使用してもうれしくないので代わりにラベル型配列変数を使用しています。

#runtime "hsp3cl"
#include "DxLib.as"

	// 処理ラベル型変数配列
	ldim Method, 3
	Method = *RedBoxDraw, *RandPsetPixel, *GDraw
	
	// 選択項目の文字列
	sdim String, 64, 3
	String = "赤い箱を描画する", "ランダムにドットを打つ", "グラデーションを描く"

*main
	
	//SetGraphMode 640, 480, 16
	ChangeWindowMode TRUE	// ウィンドウモードになる
	DxLib_Init
	if( stat == -1 ){	// DXライブラリ初期化処理
		 dialog "エラー" : end		// エラーが起きたら直ちに終了
	}
	
	// 選択ラベルの位置初期化
	SPoint = 0
	
	// 選択項目の数を取得&ついでに項目描画
	SenntakuNum = 0
	repeat length(String)
		GetColor 255, 255, 255
		DrawString 32, SenntakuNum * 32, String(SenntakuNum), stat
		SenntakuNum++
	loop
	
	// ループ	
	repeat
		ProcessMessage
		if stat != 0 : break
	
		// 前のカーソル消去
		DrawBox 0, 0, 32, SenntakuNum * 32, 0, TRUE
	
		// カーソル描画
		GetColor 255, 255, 0
		DrawBox 0, SPoint * 32, 16, SPoint * 32 + 16, stat, TRUE
	
		// キー入力待ち
		WaitKey
		
		// キー入力に応じて処理
		// カーソル移動
		CheckHitKey KEY_INPUT_UP
		if ( (stat != 0) && (SPoint != 0) ) : SPoint--
		CheckHitKey KEY_INPUT_DOWN
		if ( (stat != 0) && (SPoint < SenntakuNum - 1) ) : SPoint++
	
		// 決定キー時処理
		CheckHitKey KEY_INPUT_Z
		if( stat != 0 ){
			// 項目に応じた処理を行う
			gosub Method(SPoint)
	
			// キー入力待ち
			WaitKey

			// ループから抜ける
			break
		}
		
	loop
	
	DxLib_End					// DXライブラリ使用の終了処理
end

stop
// 赤い箱を描画するラベル
*RedBoxDraw
	GetColor 255, 0, 0
	DrawBox 0, 0, 640, 480, stat, TRUE
return
// ランダムにドットを打つラベル
*RandPsetPixel
	repeat 1000
		GetRand 639
		r639 = stat
		GetRand 479
		r479 = stat
		GetRand 255
		r = stat
		GetRand 255
		g = stat
		GetRand 255
		b = stat
		GetColor r, g, b
		DrawPixel r639, r479, stat
	loop
return
// グラデーションを描くラベル
*GDraw
	repeat 480
		GetColor 255, 255, 255 * cnt / 480
		DrawLine 0, cnt, 640, cnt + 1, stat
	loop
return