ソースコードは以下の通りです
[/code]
#include"Common.h"
MAP map;
MAP_LIST maplist;
int LoadListFile(const char*name, char list[][STR_MAX], int max);
//ファイルのパス読み込み
bool LoadMapList(){
if ((maplist.num = LoadListFile(MAP_LISTROOT, maplist.list, MAP_LIST_MAX)) == -1){
MB("MapList Cannot Open");
return false;
}
return true;
}
bool LoadMapData(){
int fh = 0;
char pass[STR_MAX] = { NULL };
char str[STR_MAX] = { NULL };
sprintf_s(pass, "%s%s%s", MAP_ROOT, maplist.list[maplist.map_id], MAP_DATAROOT);
if ((fh = FileRead_open(pass)) == 0){
MB("MapData Cannot Open");
return false;
}
FileRead_gets(str, STR_MAX, fh);
map.data.size_x = atoi(str);
map.data.size_y = atoi(str);
map.data.chipsize_x = atoi(str);
map.data.chipsize_y = atoi(str);
if (FileRead_close(fh) == -1){
MB("MapData Cannot Close");
return false;
}
return true;
}
bool LoadMapFieldData(){
int fh = 0;
char pass[STR_MAX] = { NULL };
char buf[10];
sprintf_s(pass, "%s%s%s", MAP_ROOT, maplist.list[maplist.map_id], MAP_IMAGEROOT);
if ((fh = FileRead_open(pass)) == 0){
MB("MapImage Cannot Open");
return false;
}
for (int i = 0; i < map.data.size_y; i++){
for (int j = 0; j < map.data.size_x; j++){
for (int l = 0; l < MAP_CHIP_RAYER; l++){
map.data.mapdata[l][j] = (int)(buf - '0');
}
}
}
if (FileRead_close(fh) == -1){
MB("MapImage Cannot Close");
return false;
}
return true;
}
bool LoadMapGraph(){
char pass[STR_MAX] = { NULL };
sprintf_s(pass, "%s%s%s", MAP_ROOT, maplist.list[maplist.map_id], MAP_GRAPH);
if ((map.data.num = LoadDivImageFile(pass, map.data.mapchip, map.data.chipsize_x, map.data.chipsize_y)) == -1){
MB("MapChip Cannot Read");
return false;
}
return true;
}
void DrawMap(int no){
for (int i = 0; i <map.data.size_y; i++){
for (int j = 0; j < map.data.size_x; j++){
DrawGraph((j * map.data.size_x), (i * map.data.size_y), map.data.mapchip[map.data.mapdata[no][j]],false);
}
}
}
void GameMap(){
DrawMap(0);
}
[/code]
#define MAP_IMAGEROOT "\\image.txt"
#define MAP_GRAPH "\\chip.png"
#define MAP_LIST_MAX 10
#define MAP_CHIP_NUM_X 20
#define MAP_CHIP_NUM_Y 15
#define MAP_CHIP_RAYER 4
#define MAP_CHIP_MAX 1024
#define MAP_CHIP_X_MAX 192
#define MAP_CHIP_Y_MAX 192
#define MAP_RAYER 4
#define STR_MAX 256
#define SCROLL_MAX_X 40
#define SCROLL_MAX_Y 30
struct MapData{
int size_x;//マップのサイズX
int size_y;//マップのサイズY
int num;
int chipsize_x;
int chipsize_y;
int mapchip[MAP_CHIP_MAX];
int mapdata[MAP_CHIP_RAYER][MAP_CHIP_Y_MAX][MAP_CHIP_X_MAX];
};
struct MapField{
int back;
int graphic;
};
struct MapObject{
int field;
int wall;
int obg;
int item;
};
struct MAP{
MapData data;
MapField field;
MapObject object;
};
struct MAP_LIST{
char list[MAP_LIST_MAX][STR_MAX];
int num;
int map_id;
};
extern MAP_LIST maplist;
bool LoadMapList();
bool LoasMapData();
bool LoadMapFieldData();
bool LoadMapGraph();
void DrawMap(int no);
void GameMap();
#include"Common.h"
//グローバール
int g_lasttime = 0;
int g_frametime = 0;
GameState g_gamestate= GAME_TITLE;
int g_titleimg;
float g_hx, g_hy = 0;
// プログラムは WinMain から始まります
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
ChangeWindowMode(TRUE);
SetDrawScreen(DX_SCREEN_BACK);
if (DxLib_Init() == -1) // DXライブラリ初期化処理
{
return -1; // エラーが起きたら直ちに終了
}
//いまのところの変数
g_titleimg = LoadGraph("Title\\Title.png");
char key[256];
while (ScreenFlip() == 0 && ProcessMessage() == 0 && GetHitKeyStateAll(key) == 0){
ClearDrawScreen();
//実際の処理書くとこ
switch (g_gamestate){
case GAME_TITLE:
DrawGameTitle();
break;
case GAME_MAP:
DrawGameMap();
break;
case GAME_END:
DrawGameEnd();
break;
case GAME_OVER:
DrawGameOver();
break;
}
ScreenFlip();
WaitKey(); // キー入力待ち
if (key[KEY_INPUT_ESCAPE] == 1){
DxLib_End(); // DXライブラリ使用の終了処理
return 0; //
}
}
}
void DrawGameTitle(){
GameTitle();
}
void DrawGameMap(){
GameMap();
}
void DrawGameEnd(){
}
void DrawGameOver(){
}
#define STR_MAX 256
//グローバール
extern int g_lasttime;
extern int g_frametime;
enum GameState{
GAME_TITLE, GAME_MAP, GAME_END, GAME_OVER
};
extern GameState g_gamestate;
extern int g_titleimg;
extern float g_hx;
extern float g_hy;
extern char key[256];
void DrawGameTitle();
void DrawGameMap();
void DrawGameEnd();
void DrawGameOver();
足りない情報があったときもどうぞ