【HSP3】DXライブラリをHSPで使ってみるサンプル(4.マップスクロール基本[スクロール滑らか版])

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 //
#define MOVE_FRAME 32 //
//
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 ){ //
dialog "" : end //
}
//
SetDrawScreen DX_SCREEN_BACK
//
PlayerX = 2
PlayerY = 2
// (0)
Move = 0
//
repeat
ProcessMessage
if stat != 0 : break
CheckHitKey KEY_INPUT_ESCAPE
if stat != 0 : break
//
if( Move == 0 ){
//
GetJoypadInputState DX_INPUT_KEY_PAD1
Key = stat
//
if( Key & PAD_INPUT_UP ) {
Move = 1
MoveX = 0
MoveY = -1
}
//
if( Key & PAD_INPUT_DOWN ) {
Move = 1
MoveX = 0
MoveY = 1
}
//
if( Key & PAD_INPUT_RIGHT ) {
Move = 1
MoveX = 1
MoveY = 0
}
//
if( Key & PAD_INPUT_LEFT ) {
Move = 1
MoveX = -1
MoveY = 0
}
//
if( Move == 1 ){
if( MapData( PlayerX + MoveX, PlayerY + MoveY ) == 0 ){
Move = 0
}else{
MoveCounter = 0
}
}
//
ScrollX = 0
ScrollY = 0
}
//
if( Move == 1 ){
MoveCounter++
//
if( MoveCounter == MOVE_FRAME ){
Move = 0
//
PlayerX += MoveX
PlayerY += MoveY
//
ScrollX = 0
ScrollY = 0
}else{
//
ScrollX = -( MoveX * MAP_SIZE * MoveCounter / MOVE_FRAME )
ScrollY = -( MoveY * MAP_SIZE * MoveCounter / MOVE_FRAME )
}
}
//
gosub *GraphDraw
//
ScreenFlip
loop
DxLib_End // 使
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
//
if( MapData(j + MapDrawPointX, i + MapDrawPointY) == 0 ){
GetColor 255, 0, 0
DrawBox j * MAP_SIZE + ScrollX, i * MAP_SIZE + ScrollY, j * MAP_SIZE + MAP_SIZE + ScrollX, i * MAP_SIZE + MAP_SIZE + ScrollY, 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
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX