プログラムが勝手に終了してしまいます。
Posted: 2011年4月16日(土) 02:20
プログラムをビルドしてもエラーは出ないのですが、実行してしばらくたつと何もしていないのにプログラムが終了してしまいます。
スレッド 'Win32 スレッド' (0x1e44) はコード -1 (0xffffffff) で終了しました。
スレッド 'Win32 スレッド' (0x1e04) はコード -1 (0xffffffff) で終了しました。
プログラム '[6496] gsproject.exe: ネイティブ' はコード -1 (0xffffffff) で終了しました。
と書いてあるのですが何が原因なんでしょうか?
自分はまだまだ初心者なのでどう意味なのかまったくわかりませんがよろしくお願いします。
以下プログラムです 読みにくくてすみません
スレッド 'Win32 スレッド' (0x1e44) はコード -1 (0xffffffff) で終了しました。
スレッド 'Win32 スレッド' (0x1e04) はコード -1 (0xffffffff) で終了しました。
プログラム '[6496] gsproject.exe: ネイティブ' はコード -1 (0xffffffff) で終了しました。
と書いてあるのですが何が原因なんでしょうか?
自分はまだまだ初心者なのでどう意味なのかまったくわかりませんがよろしくお願いします。
以下プログラムです 読みにくくてすみません
#include "DxLib.h"
#include "math.h"
int stateKey[256];
int GetHitKeyStateAll_2(){
char GetHitKeyStateAll_Key[256];
GetHitKeyStateAll( GetHitKeyStateAll_Key );
for(int i=0;i<256;i++){
if(GetHitKeyStateAll_Key[i]==1) stateKey[i]++;
else stateKey[i]=0;
}
return 0;
}
int CheckStateKey(unsigned char Handle){
return stateKey[Handle];
}
typedef struct {
double x, y, m_x, m_y;
double speed;
int image[12];
int Xsize,Ysize;
}ch_t;
ch_t mychar;
struct shot{
double x,y;
bool flag;
};
struct shot mychshot[15];
int ProcessLoop(){
if(ProcessMessage()!=0)return -1; //プロセス処理がエラーなら-1を返す
if(ClearDrawScreen()!=0)return -1; //画面クリア処理がエラーなら-1を返す
GetHitKeyStateAll_2(); //現在のキー入力処理を行う
return 0;
}
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
ChangeWindowMode( TRUE ) ; // ウインドウモードにする
if( DxLib_Init() == -1 ) return -1; // DXライブラリ初期化処理
mychar.x=0;
mychar.y=0;
mychar.m_x=0;
mychar.m_y=0;
mychar.speed=4.0;
mychar.Xsize=32;
mychar.Ysize=48;
double naname=sqrt(2.0);
bool sayuflag = false;
bool jogeflag = false;
int field_MAXL = 0;
int field_MAXR = 639;
int field_MAXU = 0;
int field_MAXD = 479;
int shot_counter = 0;
double shot_speed = 8.0;
int shot_Ysize = 32;
int shot_Xsize = 40;
int shot_image[24];
int RefreshTime;
for(int i=0;i<15;i++){
mychshot[i].x=0;
mychshot[i].y=0;
mychshot[i].flag=false;
}
while(ProcessLoop()==0){//メインループ
RefreshTime = GetNowCount(); //今の時間を取得
///////////////////////////////////////////////////////////////////////////
////// 自機キャラの移動処理 //////////////////
if(CheckStateKey(KEY_INPUT_LEFT) > 0)
mychar.m_x -=mychar.speed;
if(CheckStateKey(KEY_INPUT_RIGHT) > 0)
mychar.m_x +=mychar.speed;
if((CheckStateKey(KEY_INPUT_LEFT) > 0)||(CheckStateKey(KEY_INPUT_RIGHT) > 0))
sayuflag = true;
else
sayuflag = false;
if(CheckStateKey(KEY_INPUT_UP) > 0)
mychar.m_y -=mychar.speed;
if(CheckStateKey(KEY_INPUT_DOWN) > 0)
mychar.m_y +=mychar.speed;
if((CheckStateKey(KEY_INPUT_UP) > 0)||(CheckStateKey(KEY_INPUT_DOWN) > 0))
jogeflag = true;
else
jogeflag = false;
if((sayuflag == true)&&(jogeflag == true))
{
mychar.m_x /= naname;
mychar.m_y /= naname;
}
if((CheckStateKey(KEY_INPUT_LSHIFT))||(CheckStateKey(KEY_INPUT_RSHIFT)))
{
mychar.m_x /= 2.5;
mychar.m_y /= 2.5;
}
if((mychar.x+mychar.m_x<field_MAXL)||(mychar.x+mychar.m_x>field_MAXR-mychar.Xsize))
mychar.m_x = 0;
if((mychar.y+mychar.m_y<field_MAXU)||(mychar.y+mychar.m_y>field_MAXD-mychar.Ysize))
mychar.m_y = 0;
mychar.x+=mychar.m_x;
mychar.y+=mychar.m_y;
mychar.m_x=0;
mychar.m_y=0;
//////////////////////////////////////////////////////////////////////////////////
SetDrawScreen( DX_SCREEN_BACK ) ; // 描画先を裏画面にする
if(shot_counter<5)
shot_counter ++;
else if(CheckStateKey(KEY_INPUT_Z) > 0){
shot_counter = 0;
for(int i=0; i<15; i++){
if (mychshot[i].flag == false){
mychshot[i].x = mychar.x -(shot_Xsize-mychar.Xsize)/2;
mychshot[i].y = mychar.y + 3;
mychshot[i].flag = true;
break;
}
}
}
LoadDivGraph( "shot\\(40x32).png" , 24 , 4 , 6 , 40 , 32 , shot_image );//自機ショットの画像を分割して読み込む
for(int i=0; i<15; i++){
if (mychshot[i].flag ==true){
mychshot[i].y -= shot_speed;
DrawGraph( (int)mychshot[i].x , (int)mychshot[i].y , shot_image[2], TRUE ) ; //自機ショットの画像を表示
if(mychshot[i].y < -shot_Ysize){
mychshot[i].flag = false;
}
}
}
LoadDivGraph( "chara\\chara01.png" , 12 , 3 , 4 , 32 , 48 , mychar.image );//自機キャラの画像を分割して読み込む
DrawGraph( (int)mychar.x , (int)mychar.y , mychar.image[10] , TRUE ) ; //自機キャラの画像を表示
if(CheckStateKey(KEY_INPUT_ESCAPE)==1)break; //エスケープが入力されたらブレイク
ScreenFlip() ; // 裏画面データを表画面へ反映
while(GetNowCount() - RefreshTime < 17); //1周の処理が17ミリ秒になるまで待つ
}
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}