プログラムが勝手に終了してしまいます。

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
gansan

プログラムが勝手に終了してしまいます。

#1

投稿記事 by gansan » 14年前

プログラムをビルドしてもエラーは出ないのですが、実行してしばらくたつと何もしていないのにプログラムが終了してしまいます。

スレッド '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 ;              // ソフトの終了
}


アバター
a5ua
記事: 199
登録日時: 15年前

Re: プログラムが勝手に終了してしまいます。

#2

投稿記事 by a5ua » 14年前

LoadDivGraphなどの読み込み処理は、メインループの前に一回だけ呼ぶようにしてください。

gansan

Re: プログラムが勝手に終了してしまいます。

#3

投稿記事 by gansan » 14年前

原因がわかってすっきりしました。
ありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る