なんとか思い通りに動かすことができるようになりました。
今回もまた稚拙な内容かとは思いますが、ご教授いただければ幸いです。
以下のコードでは、テキストファイルからマップチップの配列を読み込もうとしています。
読み込むテキストファイルの内容は一番下に記載しています。
記述の内容はダブルポインタを使い、strtokでテキストファイルから読み込んだ列を分割し、
MAP_SIZEをmapSizeX,Yに代入、ダブルポインタにDATAの列を分割して代入し、
for文を使って描画をしているつもりですが、
実行したところ、マップチップは表示されませんでした。
mapSizeX,Yに代入した値を表示するようにしたところ、どちらも0と表示され、
MAP_SIZEすら読み込まれてないことがわかりました。
strtokの使い方が間違っているのか、それともあちこちのサイトに書かれているコードを参考にしたものなので、
そもそもの記述の内容がめちゃくちゃになっていることに気がついていないだけのか、
いずれにしろ判別をつけることができません。
なにかアドバイスをいただけたらと思います。
よろしくお願い致します。
#include "DxLib.h"
#include "stdio.h"
#include "string.h"
#include "stdlib.h"
//ウインドウの横と縦の大きさ
#define GAME_WINDOW_WIDTH 640//32*20
#define GAME_WINDOW_HEIGHT 480//32*15
#define SCRIPT_FILENAME "map.txt"//読み込むファイル
#define MAPCHIP_SIZE 32//マップチップサイズ
#define LINE_1 256//動的擬似に次元配列の実験用定数
int map;//配列
int mapSizeY,mapSizeX;//読み取ったマップのサイズ
int **pp;//ダブルポインタの宣言
int ran;
int x,y;
int z;//DATA列の読み込みの可否
//動的擬似二次元配列を使った場合の
//マップスクリプトの読み込み
void LoadMapFile(char*Filename)
{
char line[LINE_1];
z=0;
FILE*mapFile;
mapFile = fopen(Filename,"r");
while( fgets(line,LINE_1,mapFile))
{
//wordsにlineをカンマで区切って格納する
char*words = strtok(line,",");
//ファイル内のキーワードを先頭からチェックし、振り分ける
if(strcmp("MAP_SIZE",words) == 0 && z == 0)
{
mapSizeY = atoi(strtok(NULL,","));//一つ目
mapSizeX = atoi(strtok(NULL,","));//二つ目
//メモリの確保
int **pp = new int*[y];
for(int ran = 0; ran < y; ran++)
{
pp[y] = new int[x];
}
z = 1;//MAP_SIZE列の再読み込みを防ぐ
}
else if(strcmp("DATA",words) == 0)
{
for(x = 0; x < mapSizeX;x++)
{
map[&y][&x] = atoi(strtok(NULL,","));
y++;
}
}
}
fclose(mapFile);
}
//マップチップの描画
void Mapchipdraw()//ここで引数を使いyとxに代入する
{ //sizeofを削ると描画すらされない、mapSizeに値が代入されていない
//おそらくsizeofでバイト数を調べているから変になる
//なので訂正
for(y = 0; y < mapSizeY; y++)
{
for(x = 0; x < mapSizeX;x++)
{
if(map[&y][&x]==0)
{
DrawBox(x*MAPCHIP_SIZE,
y*MAPCHIP_SIZE,
x*MAPCHIP_SIZE+MAPCHIP_SIZE,
y*MAPCHIP_SIZE+MAPCHIP_SIZE,
GetColor(255,255,255),
TRUE);
}
}
}
}
//メイン
int WINAPI WinMain( HINSTANCE hInstace, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
//ウィンドウモードで起動
ChangeWindowMode( TRUE );
//画面の大きさは800 * 600
SetGraphMode( GAME_WINDOW_WIDTH, GAME_WINDOW_HEIGHT, 16 ) ;
//DxLib初期化
if( DxLib_Init() == -1 )
{
return -1;
}
//ここでマップテキストの読み込みと、擬似配列への代入
LoadMapFile(SCRIPT_FILENAME);
while(CheckHitKey(KEY_INPUT_ESCAPE) == 0)
{
ClearDrawScreen();
//マップチップの描画
Mapchipdraw();
//デバッグ用
DrawFormatString(0,180,GetColor(255,0,255),"mapSizeY%d",mapSizeY);
DrawFormatString(0,200,GetColor(255,0,255),"mapSizeX%d",mapSizeX);
ScreenFlip();
WaitTimer(20);//これがないとボタンの反応が早すぎるため
}
DxLib_End();
return 0;
}
MAP_SIZE 15,10
DATA 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
DATA 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,0,
DATA 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,0,
DATA 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,0,
DATA 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,0,
DATA 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,0,
DATA 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,0,
DATA 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,0,
DATA 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,0,
DATA 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,0,
DATA 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,0,
DATA 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,0,
DATA 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,0,
DATA 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,0,
DATA 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,