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