#4
投稿記事
by KEYONN_ » 15年前
こんな感じでどうでしょう。
マップエディタは、C+WINAPIか、C#で作るか、フリーのものを使うとして、
Map[20][300];にマップチップ番号を代入してあげてください。
#define CHIP_SIZE 16
#define MAX_BLOCKX CHIP_SIZE*20
#define MAX_BLOCKY CHIP_SIZE*300
#define SCREEN_WIDTH 240
#define SCREEN_HEIGHT 320
typedef struct Map_{
int ChipNumber; //マップチップ
int ChipNumber2; //マップチップ2
int EnemyNumber; //敵の番号(例:Map[0][0].EnemyNumber=1)
}Map_;
Map_ Map[20][300];
//初期化関数
void Init()
{
FILE *fp;
fp=fopen("./data/mapdata01.txt","r");
for(i=0;i<300;i++){
for(j=0;j<20;j++){
if(j!=20)
fscanf(fp,"%d,",&Map[j].ChipNumber);
else
fscanf(fp,"%d",&Map[j].ChipNumber);
}
}
}
//スクロールを計算する関数
void CalcScroll(void)
{
//キャラクターが画面の中心にくるようにする
sx=Player.x-(SCREEN_WIDTH/2);
//sy=Player.y-(SCREEN_HEIGHT/2);
//sxが0より小さいなら0にする。(それ以上下がらないようにする)
if(ScrollX<0) ScrollX=0;
if(ScrollY<0) ScrollY=0;
if(ScrollX>(MAX_BLOCKX)-SCREEN_WIDTH) ScrollX=(MAX_BLOCKX)-SCREEN_WIDTH;
if(ScrollY>(MAX_BLOCKY)-SCREEN_HEIGHT) ScrollY=(MAX_BLOCKY)-SCREEN_HEIGHT;
}
//背景を描画する関数
void DrawBG()
{
int StartX=ScrollX/CHIP_SIZE,StartY=ScrollY/CHIP_SIZE;
int EndX=(ScrollX+SCREEN_WIDTH-1)/16,EndY=(ScrollY+SCREEN_HEIGHT-1)/16;
for(int i=StartY;i<=EndY;i++)
{
for(int j=StartX;j<=EndX;j++)
{
//マップチップを描画する
DrawChip(Map[j].ChipNumber,j*CHIP_SIZE-ScrollX,i*CHIP_SIZE-ScrollY);
}
}
}