http://homepage2.nifty.com/natupaji/DxLib/dxprogram.html#N4 のHSP版です。DxLib.as は http://tkooler.moe.hm/hsp/img/DxLib.as から入手可能。
http://homepage2.nifty.com/natupaji/DxLib/dxprogram.html#N4 のHSP版です。DxLib.as は http://tkooler.moe.hm/hsp/img/DxLib.as から入手可能。
#runtime "hsp3cl" #include "DxLib.as" #define MAP_SIZE 64 // マップチップ一つのドットサイズ #define MAP_WIDTH 20 // マップの幅 #define MAP_HEIGHT 16 // マップの縦長さ // マップのデータ dim MapData, MAP_WIDTH, MAP_HEIGHT MapData(0, 0) = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 MapData(0, 1) = 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 MapData(0, 2) = 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0 MapData(0, 3) = 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0 MapData(0, 4) = 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0 MapData(0, 5) = 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0 MapData(0, 6) = 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0 MapData(0, 7) = 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0 MapData(0, 8) = 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0 MapData(0, 9) = 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0 MapData(0, 10) = 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0 MapData(0, 11) = 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0 MapData(0, 12) = 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0 MapData(0, 13) = 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 MapData(0, 14) = 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 MapData(0, 15) = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 Key = 0 OldX = 0 : OldY = 0 // 移動する前のプレイヤーの位置を保存する変数 SetGraphMode 640, 480, 16 DxLib_Init if( stat == -1 ){ // DXライブラリ初期化処理 dialog "エラー" : end // エラーが起きたら直ちに終了 } // 描画先画面を裏画面にセット SetDrawScreen DX_SCREEN_BACK // プレイヤーの初期位置をセット PlayerX = 2 PlayerY = 2 // ループ repeat ProcessMessage if stat != 0 : break CheckHitKey KEY_INPUT_ESCAPE if stat != 0 : break // キー入力取得 GetJoypadInputState DX_INPUT_KEY_PAD1 Key = stat // 移動する前のプレイヤーの位置を保存 OldX = PlayerX OldY = PlayerY // 上を押していたら上に進む if( Key & PAD_INPUT_UP ) : PlayerY -= 1 // 下を押していたら下に進む if( Key & PAD_INPUT_DOWN ) : PlayerY += 1 // 右を押していたら右に進む if( Key & PAD_INPUT_RIGHT ) : PlayerX += 1 // 左を押していたら左に進む if( Key & PAD_INPUT_LEFT ) : PlayerX -= 1 // 進入不可能なマップだった場合は移動できない if( MapData( PlayerX, PlayerY ) == 0 ){ PlayerX = OldX PlayerY = OldY } // マップとプレイヤーを描画 gosub *GraphDraw // 裏画面の内容を表画面に映す ScreenFlip // ウエイト WaitTimer 100 loop DxLib_End // DXライブラリ使用の終了処理 end stop // マップとプレイヤーの描画 *GraphDraw j = 0 : i = 0 MapDrawPointX = 0 MapDrawPointY = 0 // 描画するマップ座標値 DrawMapChipNumX = 0 DrawMapChipNumY = 0 // 描画するマップチップの数 // 描画するマップチップの数をセット DrawMapChipNumX = 640 / MAP_SIZE + 1 DrawMapChipNumY = 480 / MAP_SIZE + 1 // 画面左上に描画するマップ座標をセット MapDrawPointX = PlayerX - DrawMapChipNumX / 2 MapDrawPointY = PlayerY - DrawMapChipNumY / 2 // 背景を黒でつぶす GetColor 0, 0, 0 DrawBox 0, 0, 640, 480, stat, TRUE // マップを描く for i, 0, DrawMapChipNumY, 1 for j, 0, DrawMapChipNumX, 1 // 画面からはみ出た位置なら描画しない if( j + MapDrawPointX < 0 || i + MapDrawPointY < 0 || j + MapDrawPointX >= MAP_WIDTH || i + MapDrawPointY >= MAP_HEIGHT ) : _continue // マップデータが0だったら四角を描画する if( MapData(j + MapDrawPointX, i + MapDrawPointY) == 0 ){ GetColor 255, 0, 0 DrawBox j * MAP_SIZE, i * MAP_SIZE, j * MAP_SIZE + MAP_SIZE, i * MAP_SIZE + MAP_SIZE, stat, TRUE } next next // プレイヤーの描画 GetColor 255, 255, 255 DrawBox ( PlayerX - MapDrawPointX ) * MAP_SIZE, ( PlayerY - MapDrawPointY ) * MAP_SIZE, ( PlayerX - MapDrawPointX + 1 ) * MAP_SIZE, ( PlayerY - MapDrawPointY + 1 ) * MAP_SIZE, stat, TRUE return