シーン管理の方法を替えてみました。それでもマップが出なかったので少しいじってみると、ビルドは正常にされるのですが、遷移時にプログラムが停止するようになりました。
多分メイン関数にはりつけても同じだとは思います。
以下がコードです。
#pragma once
#define STR_MAX 256
//グローバール
extern int g_lasttime;
extern int g_frametime;
typedef enum {
GAME_TITLE, GAME_MAP, GAME_END, GAME_OVER
}GameScene;
extern int g_titleimg;
extern float g_hx;
extern float g_hy;
extern char key[256];
void DrawGameTitle();
void DrawGameMap();
void DrawGameEnd();
void DrawGameOver();
void SceneMgr_Update();
void SceneMgr_Draw();
void SceneMgr_ChangeScene(GameScene nextScene);
#include"Common.h"
//グローバール
int g_lasttime = 0;
int g_frametime = 0;
static GameScene 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();
SceneMgr_Update();
SceneMgr_Draw();
ScreenFlip();
WaitKey(); // キー入力待ち
if (key[KEY_INPUT_ESCAPE] == 1){
DxLib_End(); // DXライブラリ使用の終了処理
return 0; //
}
}
}
void SceneMgr_Update(){
switch (g_gamestate){
case GAME_TITLE:
Title_Update();
break;
case GAME_MAP:
Map_Update();
break;
}
}
void SceneMgr_Draw(){
switch (g_gamestate){
case GAME_TITLE:
Title_Draw();
break;
case GAME_MAP:
Map_Draw();
break;
}
}
void SceneMgr_ChangeScene(GameScene NextScene){
g_gamestate = NextScene;
}
#pragma once
#define MAP_LISTROOT "Map\\map.txt"
#define MAP_ROOT "Map\\"
#define MAP_DATAROOT "\\data.txt"
#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 num_x;
int num_y;
int mapchip[MAP_CHIP_MAX];
int mapdata[MAP_CHIP_RAYER][MAP_CHIP_Y_MAX][MAP_CHIP_X_MAX];
};
struct MapPlug{
char name[STR_MAX];
};
struct MapField{
int back;
int graphic;
};
struct MapObject{
int field;
int wall;
int obg;
int item;
};
struct MAP{
MapData data;
MapField field;
MapPlug plug;
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,bool flag);
void Map_Update();
void Map_Draw();
#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 };
char* a;
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);
strcpy_s(map.plug.name, sizeof(map.plug.name), strtok_s(str, PERIOD, &a));
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[256];
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 < 1; i++){
if (FileRead_gets(&buf[i], sizeof(BYTE), fh) == -1){
MB("MapChip Image Cannot Read");
FileRead_close(fh);
return false;
}
map.data.size_x = buf[i] - '0';
}
for (int i = 0; i < 1; i++){
if (FileRead_gets(&buf[i], sizeof(BYTE), fh) == -1){
MB("MapChip Image Cannot Read");
FileRead_close(fh);
return false;
}
map.data.size_y = buf[i] - '0';
}
for (int i = 0; i < 1; i++){
if (FileRead_gets(&buf[i], sizeof(BYTE), fh) == -1){
MB("MapChip Image Cannot Read");
FileRead_close(fh);
return false;
}
map.data.num_x = buf[i] - '0';
}
for (int i = 0; i < 1; i++){
if (FileRead_gets(&buf[i], sizeof(BYTE), fh) == -1){
MB("MapChip Image Cannot Read");
FileRead_close(fh);
return false;
}
map.data.num_y = buf[i] - '0';
}
FileRead_seek(fh, 8, SEEK_SET);
for (int k = 0; k < 4; k++){
for (int i = 0; i < map.data.num_y; i++){
for (int j = 0; j < map.data.num_x; j++){
for (int l = 0; l < 1; l++){
if (FileRead_gets(&buf[l], sizeof(BYTE), fh) == -1){
MB("MapImage Cannot Read");
FileRead_close(fh);
return false;
}
}
map.data.mapdata[k][i][j] = buf[i]-'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.size_x, map.data.size_y)) == -1){
MB("MapChip Cannot Read");
return false;
}
return true;
}
void DrawMap(int no ,bool flag){
for (int i = 0; i <(WINDOW_HEIGHT/map.data.size_y); i++){
for (int j = 0; j <( WINDOW_WIDTH/map.data.size_x); j++){
DrawGraph((j * map.data.size_x), (i * map.data.size_y), map.data.mapchip[map.data.mapdata[no][i][j]],flag);
}
}
}
void Map_Draw(){
DrawMap(0,false);
}
void Map_Update(){
}
#include"Common.h"
void Title_Update(){
if (CheckHitKey(KEY_INPUT_Z) != 0){
SceneMgr_ChangeScene(GAME_MAP);
}
}
void Title_Draw(){
DrawBox(0, 0, 640, 480, GetColor(255, 255, 255), true);
DrawGraph(0, 0, g_titleimg, false);
}
32,32,20,15/
0000000001000000000/
0000000001000000000/
0000000001000000000/
0000000001000000000/
0000000001000000000/
0000000001000000000/
0000000001000000000/
0000000001000000000/
0000000001000000000/
0000000001000000000/
0000000001000000000/
0000000001000000000/
0000000001000000000/
0000000001000000000/
0000000001000000000/