http://homepage2.nifty.com/natupaji/DxLib/ここのサイトを参考にいろいろやってみたのですがなかなかうまくいかずにできません。自分はVisual Studio 2010 Express を使っていてC言語でやっています。
以下のコードにスクロールを加えるにはどのようにしたらいいのですか?
#include "DxLib.h"
#define SCREEN_X (640)
#define SCREEN_Y (480)
#define MAPSIZE_X (32*(20*2)) //横マップサイズの長さ
#define MAPSIZE_Y (480) //縦マップサイズの長さ
#define CHIPSIZE (32) //一つのブロックサイズ
#define MAP_WIDTH (MAPSIZE_X/CHIPSIZE) //横のブロックの数
#define MAP_HEIGHT (MAPSIZE_Y/CHIPSIZE) //縦のブロックの数
int mapdate[MAP_HEIGHT][MAP_WIDTH] = {
{ 0,0,0,0,0, 0,0,0,0,0, 1,1,1,1,1, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 1,1,1,1,1, 0,0,0,0,0 },
{ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 1,1,1,1,1, 0,0,0,0,0 },
{ 0,0,0,0,0, 0,0,0,0,0, 0,0,1,0,1, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 1,1,1,1,1, 0,0,0,0,0 },
{ 0,0,0,0,1, 1,0,0,0,0, 0,0,1,1,1, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 1,1,1,1,1, 0,0,0,0,0 },
{ 0,1,1,1,1, 1,1,1,1,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 1,1,1,1,1, 0,0,0,0,0 },
{ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 1,1,1,1,1, 0,0,0,0,0 },
{ 0,0,0,0,0, 0,0,0,1,1, 1,1,1,1,1, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 1,1,1,1,1, 0,0,0,0,0 },
{ 0,0,0,0,1, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 1,1,1,1,1, 0,0,0,0,0 },
{ 0,0,0,0,1, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 1,1,1,1,1, 0,0,0,0,0 },
{ 0,0,0,0,1, 0,0,0,0,0, 0,0,0,0,1, 0,0,1,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0 },
{ 0,0,0,0,1, 0,0,0,0,0, 0,0,1,1,1, 0,0,0,1,1, 0,0,0,0,0, 0,0,0,0,0, 1,1,1,1,1, 0,0,0,0,0 },
{ 0,0,0,0,1, 0,0,1,1,0, 0,0,1,1,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 1,1,1,1,1, 0,0,0,0,0 },
{ 0,0,0,0,1, 0,0,1,1,0, 0,0,1,1,0, 0,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 1,1,1,1,1, 0,0,0,0,0 },
{ 1,1,0,0,0, 0,0,1,1,0, 0,0,1,1,0, 0,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 1,1,1,1,1, 0,0,0,0,0 },
{ 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,0,0,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1 },
};
int zikiX , zikiY ; //自機の座標
int zikiGraph[7]; //自機のイメージ
bool muki = TRUE; //自機の向き
int jumpP; //ジャンプパワー
int jumpF; //ジャンプフラグ
int chip; //一つのブロックのイメージ
int haikei; //背景
int i , j ;
//----------------------------------------------------------------------------------
int Key[256];
int GetHitKeyStateAll_2(int GetHitKeyStateAll_InputKey[]){
char GetHitKeyStateAll_Key[256];
GetHitKeyStateAll( GetHitKeyStateAll_Key );
for(int i=0;i<256;i++){
if(GetHitKeyStateAll_Key[i]==1) GetHitKeyStateAll_InputKey[i]++;
else GetHitKeyStateAll_InputKey[i]=0;
}
return 0;
}//----------------------------------------------------------------------------------
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
ChangeWindowMode(TRUE);//ウィンドウモード
if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;//初期化と裏画面化
//自機の保存と初期化
LoadDivGraph("zikiA.png",7,7,1,32,32,zikiGraph);
chip = LoadGraph("renga.png");
haikei = LoadGraph("haikei.bmp");
zikiX = 126;
zikiY = 415;
jumpP = 0;
jumpF = 0;
while(ProcessMessage()==0 && ClearDrawScreen()==0 && GetHitKeyStateAll_2(Key)==0 && Key[KEY_INPUT_ESCAPE]==0){
//↑メッセージ処理 ↑画面をクリア ↑入力状態を保存 ↑ESCが押されていない
//背景の描画
DrawGraph(0,0,haikei, FALSE);
//マップ描画
for( i = 0 ; i < SCREEN_Y ; i++ ){
for( j = 0 ; j < SCREEN_X ; j++ ){
if(mapdate[i][j] == 1)
DrawGraph( j*32 , i*32 , chip , FALSE);
}
}
//ジャンプ中か否か
if(mapdate[(zikiY+33)/32][(zikiX+8)/32] != 0
||mapdate[(zikiY+33)/32][(zikiX+26)/32] != 0){
jumpF = 0;
jumpP = 0;
}else{
jumpF = 1;
}
//ジャンプの処理
if( Key[KEY_INPUT_Z] == 1 && jumpF == 0 )jumpP = 17;
//落下処理
zikiY -= jumpP;
jumpP -= 1;
if(jumpP <= -10)jumpP = -10;
//自機の操作
if( Key[KEY_INPUT_RIGHT] != 0){//右キーを押して壁がなかったら座標を+5する
if(mapdate[(zikiY+8)/32][(zikiX+32)/32] == 0
||mapdate[(zikiY+26)/32][(zikiX+32)/32] == 0)
zikiX += 5;
muki = TRUE;
}
if( Key[KEY_INPUT_LEFT] != 0){//左キーを押して壁がなかったら座標を-5する
if(mapdate[(zikiY+8)/32][zikiX/32] == 0
||mapdate[(zikiY+26)/32][zikiX/32] == 0)
zikiX -= 5;
muki = FALSE;
}
//床の当たり判定
if( jumpP <= -1 ){
if(mapdate[(zikiY+33)/32][(zikiX+8)/32] != 0
|| mapdate[(zikiY+33)/32][(zikiX+26)/32] != 0){
zikiY = ((zikiY+33)/32)*32-33;
jumpF = 0;
}
}
//上(天井)の当たり判定
if( jumpP >= 0 ){
if(mapdate[(zikiY-1)/32][(zikiX+8)/32] != 0
|| mapdate[(zikiY-1)/32][(zikiX+26)/32] != 0){
zikiY = (zikiY/32)*32+33-1;
jumpP = 0;
}
}
//左の壁の当たり判定
if(mapdate[(zikiY+8)/32][zikiX/32] != 0
|| mapdate[(zikiY+26)/32][zikiX/32] != 0){
zikiX = ((zikiX)/32)*32+31;
}
//右の壁の当たり判定
if(mapdate[(zikiY+8)/32][(zikiX+32)/32] != 0
|| mapdate[(zikiY+26)/32][(zikiX+32)/32] != 0){
zikiX = ((zikiX+33)/32)*32-32;
}
//落下中にめり込まないようにする
if(jumpF == 1 && jumpP < 0){
if(mapdate[(zikiY+33)/32][(zikiX+8)/32] != 0
||mapdate[(zikiY+33)/32][(zikiX+26)/32] != 0){
jumpP = 0;
jumpF = 0;
}
}
if(jumpF == 1)DrawString(0,0,"jumpF 1",GetColor(255,0,0));
else DrawString(0,0,"jumpF 0",GetColor(255,0,0));
//自機描画
if(muki == FALSE){
DrawTurnGraph(zikiX,zikiY,zikiGraph[0],TRUE);
}else{
if(muki == TRUE){
DrawGraph(zikiX,zikiY,zikiGraph[0],TRUE);
}
}
ScreenFlip();
}
DxLib_End();
return 0;
}