ビルドは成功するのですが実行すると停止してしまします。
VS2008を使ってます。
main.cpp
#include "DxLib.h"
#include "Stage.h"
#include <iostream>
using namespace std;
char KeyBuf[ 256 ];
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
ChangeWindowMode( TRUE ) ; //ウィンドウモードに変更
if( DxLib_Init() == -1 ) return -1; // DXライブラリ初期化処理 エラーが起きたら終了
SetDrawScreen( DX_SCREEN_BACK ) ; // 描画先を裏画面に設定
while( 1 ){
ClearDrawScreen(); // 裏画面のデータを全て削除
GetHitKeyStateAll( KeyBuf ) ;
Stage stage;
stage.StageInput();
stage.StageRead();
stage.Stagedorw();
if( ProcessMessage() == -1 ) break ; //エラーが起きたら終了
ScreenFlip() ; // 裏画面データを表画面へ反映
}
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}class Stage{
public:
enum Object{
OBJ_A,
OBJ_B,
//OBJ_E,
OBJ_UNKNOWN,
};
private:
int fileSize,mWidth,mHeight;
char* fileImage;
Object* state;
public:
void StageInput();
Object* StageRead();
void Stagedorw();
};#include <fstream>
#include "DxLib.h"
#include "Stage.h"
using namespace std;
void Stage::StageInput(){
char* stage = "stageData2.txt";
ifstream inputFile(stage, ifstream::binary); //MAPDATA読み込み
inputFile.seekg(0,ifstream::end);
fileSize = static_cast<int>(inputFile.tellg()); //txtの文字数を入れる
inputFile.seekg(0,ifstream::beg);
fileImage = new char [fileSize]; //文字数分の配列を作る
inputFile.read(fileImage,fileSize); //配列に書き出し
}
Stage::Object* Stage::StageRead(){
mWidth = mHeight = 0; //初期化
int d = 0;
int f = 0;
for ( int i = 0; i < fileSize; ++i ){
switch ( fileImage[ i ] ){
case '1': case '0': //読み取ったtxtデータの縦横の最大値を取る
++d;
break;
case '\n':
++f;
//最大値更新
mWidth = max( mWidth, d );
mHeight = max( mHeight, f );
d = 0;
break;
}
}
state = new Object[mWidth * mHeight];
int x = 0;
int y = 0;
for ( int i = 0; i < fileSize; ++i){
Object t;
switch ( fileImage[ i ] ){
case '1': t = OBJ_A; break; //列挙型に変換
case '0': t = OBJ_B; break;
case '\n': x = 0; ++y; t = OBJ_UNKNOWN; break; //改行処理
default: t = OBJ_UNKNOWN; break;
}
if ( t != OBJ_UNKNOWN ){ //知らない文字なら無視
state[y*mWidth+x] = t;
++x;
}
}
return state; //今は使っていない
}
void Stage::Stagedorw(){ //描画
for ( int y = 0; y < mHeight; ++y ){
for ( int x = 0; x < mWidth; ++x ){
Object o = state[y*mWidth+x];
switch (o){
case OBJ_A:DrawBox(x*32,y*32,(x+1)*32,(y+1)*32,GetColor(255,255,255),TRUE); break;
case OBJ_B:DrawBox(x*32,y*32,(x+1)*32,(y+1)*32,GetColor( 0,255,255),TRUE); break;
default: break;
}
}
}
}読み込んでいるtxtは"stageData2.txt"という名前で、半角数字1と0と改行のみです。
11111
10001
10001
10001
10001
11111
こんなかんじです。 改行コードはCR+LFです。
state[y*mWidth+x] = t;
ここをコメントアウトすれば停止しないのですが・・・
全く分からないのでご指導お願いします・・・。