私は現在、龍神録プログラミングの館を参考にしながら、自分なりにポインタを使ってグローバル変数を使わないようにしてプログラムを組んでおります
そこそこスムーズに進んでいたのですが、11章、エクセルを使って敵の出現データを作ってみよう(http://dixq.net/rp/11.html)で詰んでしまいました
具体的にはプログラムを実行すると、黒い画面が表示された数秒の後フリーズし、プログラムが停止しましたのウインドウが表示されます
以下ソースコードです 全てを貼ると非常に長くなってしまうため10章からの変更、追加点及びに関係しそうな部分のみ添付させていただきます
//main.cpp
#include "DxLib.h"
#include "struct.h"
#include "load.h"
#include "graph.h"
#include "player.h"
#include "define.h"
#include "enemy.h"
int key_update(int*);
int check_shift(int,int);
int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int)
{
	ChangeWindowMode(TRUE),DxLib_Init(),SetDrawScreen(DX_SCREEN_BACK);
	int key[256],board,stage_count=0,fanction=0;
	ch_t player;
	enemy_t enemy[ENEMY_MAX];
	enemy_t enemy_order[ENEMY_ORDER_MAX]; 
	player.x = 160.0;
	player.y = 300.0;
	load_graph(&player.img,&board,enemy);
	load_story(enemy_order);
	while(ScreenFlip()==0 && ProcessMessage()==0 && ClearDrawScreen()==0)
	{
		stage_count++;
		graph_ch(&player);
		graph_enemy(enemy);
		graph_board(&board);
		key_update(key);
		if(key[KEY_INPUT_RSHIFT] > 0||key[KEY_INPUT_LSHIFT] > 0)
			slow_move(&player,key);		
		else if(key[KEY_INPUT_UP]>0 || key[KEY_INPUT_RIGHT]>0 || key[KEY_INPUT_DOWN]>0 || key[KEY_INPUT_LEFT]>0)
			quick_move(&player,key);
		enemy_enter(enemy,&stage_count,enemy_order);
		enemy_action(enemy,&stage_count);		
	}
	DxLib_End();
	return 0;
}
int key_update(int key[])
{
	char all_key[256];
	GetHitKeyStateAll(all_key);
	int i;
	for(i=0;i<256;i++)
	{
		if(all_key[i] != 0)
			key[i]++;
		else
			key[i] = 0;
	}
	return 0;
}
//ここまでmain.cpp、ここから↓graph.cpp
#include "DxLib.h"
#include "struct.h"
#include "graph.h"
#include "define.h"
int graph_ch(ch_t *player)
{
	DrawGraph(player->x,player->y,player->img,TRUE);
	return 0;
}
int graph_board(int *board)
{
	DrawGraph(0,0,*board,TRUE);
	return 0;
}
int graph_enemy(enemy_t *enemy)
{
	int i;
	for(i=0;i<30;i++)
	{
		if(enemy[i].flag == 1)
		{
			DrawRotaGraph(enemy[i].x,enemy[i].y,0.5,0.0,enemy[i].img,TRUE);
		}
	}
	
	return 0;
}
//ここまでgraph.cpp、ここから↓load.cpp
#include "DxLib.h"
#include "define.h"
#include "struct.h"
#include "load.h"
int load_graph(int *player,int *board,enemy_t *enemy)
{
	*player = LoadGraph("画像/キャラクタ01.png");
	*board = LoadGraph("画像/board.png");
	int i;
	for(i=0;i<ENEMY_MAX;i++)
	{
		enemy[i].img = LoadGraph("画像/雑魚.png");
	}
	return 0;
}
int load_story(enemy_t *enemy_order)
{
	int n,num,i,fp;
	int input[64];
	char inputc[64];
	fp = FileRead_open("date/storyH0.csv");
	if(fp == NULL)
	{
		printfDx("error");
		return -1;
	}
	for(i=0;i<2;i++)
	{
		while(FileRead_getc(fp)!='\n')
		{
			while(FileRead_getc(fp)!='\n');
		}
	}
	n = 0,num = 0;
	while(1)
	{
		for(i=0;i<64;i++)
		{
			inputc[i]=input[i]=FileRead_getc(fp);//1文字取得する
            if(inputc[i]=='/')
			{
				while(FileRead_getc(fp)!='\n');//改行までループ
				i=-1;//カウンタを最初に戻して
				continue;
            }
            
			if(input[i]==',' || input[i]=='\n')
			{
                inputc[i]='\0';
                break;
            }
                        
			if(input[i]==EOF)
	     	{
				FileRead_close(fp);
				return 0;
            }
		}
		switch(num)
		{
            case 0: enemy_order[n].count    =atoi(inputc);break;
            case 1: enemy_order[n].pattern  =atoi(inputc);break;
            case 2: enemy_order[n].kind     =atoi(inputc);break;
            case 3: enemy_order[n].x        =atof(inputc);break;
            case 4: enemy_order[n].y        =atof(inputc);break;
            case 5: enemy_order[n].sp       =atof(inputc);break;
            case 6: enemy_order[n].bltime   =atoi(inputc);break;
            case 7: enemy_order[n].blknd    =atoi(inputc);break;
            case 8: enemy_order[n].color    =atoi(inputc);break;
            case 9: enemy_order[n].hp       =atoi(inputc);break;
            case 10:enemy_order[n].blknd2   =atoi(inputc);break;
            case 11:enemy_order[n].wait     =atoi(inputc);break;
            case 12:enemy_order[n].item_n[0]=atoi(inputc);break;
            case 13:enemy_order[n].item_n[1]=atoi(inputc);break;
            case 14:enemy_order[n].item_n[2]=atoi(inputc);break;
            case 15:enemy_order[n].item_n[3]=atoi(inputc);break;
            case 16:enemy_order[n].item_n[4]=atoi(inputc);break;
            case 17:enemy_order[n].item_n[5]=atoi(inputc);break;
        }
        num++;
                
		if(num==18)
		{
	       num=0;
           n++;
        }
	}
	return 0;
}
//ここまでload.cpp、ここから↓enemy.cpp
#include "DxLib.h"
#include "struct.h"
#include "enemy.h"
#include "define.h"
int enemy_pattern0(enemy_t **enemy,int *i)
{
	if((*enemy[*i]).count == 0)
		(*enemy[*i]).vy += 2;
	if((*enemy[*i]).count == 60)
		(*enemy[*i]).vy += 0;
	if((*enemy[*i]).count == 60+(*enemy[*i]).wait)
		(*enemy[*i]).vy -= 2;
	return 0;
}
int enemy_flag_search(enemy_t **enemy)
{
	int i;
	for(i=0;i<ENEMY_MAX;i++)
	{
		if((*enemy[i]).flag == 0)
			return i;
	}
	return -1;
}
int enemy_enter(enemy_t *enemy,int *stage_count,enemy_t *enemy_order)
{
	int i,j,t;
	for(t=0;t<ENEMY_ORDER_MAX;t++)
	{
		if(enemy_order[t].count == *stage_count)
		{
			 if(i=enemy_flag_search(&enemy) != -1)
			 {
				enemy[i].flag   =1;//フラグ
                enemy[i].count  =0;//カウンタ
                enemy[i].pattern=enemy_order[t].pattern;//移動パターン
                enemy[i].muki   =1;//向き
                enemy[i].kind   =enemy_order[t].kind;//敵の種類
                enemy[i].x      =enemy_order[t].x;//座標
                enemy[i].y      =enemy_order[t].y;
                enemy[i].sp     =enemy_order[t].sp;//スピード
                enemy[i].bltime =enemy_order[t].bltime;//弾の発射時間
                enemy[i].blknd  =enemy_order[t].blknd;//弾幕の種類
                enemy[i].blknd2 =enemy_order[t].blknd2;//弾の種類
                enemy[i].color  =enemy_order[t].color;//色
                enemy[i].wait   =enemy_order[t].wait;//停滞時間
                enemy[i].hp     =enemy_order[t].hp;//体力
                enemy[i].hp_max =enemy[i].hp;//体力最大値
                enemy[i].vx     =0;//水平成分の速度
                enemy[i].vy     =0;//鉛直成分の速度
                enemy[i].ang    =0;//角度
                for(j=0;j<6;j++)
				{
					enemy[i].item_n[j]=enemy_order[t].item_n[j];//落とすアイテム
                }
			 }
		}
	}
	return 0;
}
int enemy_action(enemy_t *enemy,int *stage_count)
{
	int i;
	for(i=0;i<ENEMY_MAX;i++)
	{
		if(enemy[i].flag == 1)
		{
			enemy_pattern0(&enemy,&i);
			enemy[i].count++;
		}
		if(enemy[i].x < -30 || enemy[i].x > 500 || enemy[i].y < -30 || enemy[i].y > 500)
			enemy[i].flag = 0;
	}
	return 0;
}
//ここまでenemy.cpp、ここからstruct.h
#ifndef INCLUDE_STRUCT
#define INCLUDE_STRUCT
struct ch_t
{
        int flag;       //フラグ
        int cnt;        //カウンタ
        int power;      //パワー
        int point;      //ポイント
        int score;      //スコア
        int num;        //残機数
        int mutekicnt;  //無敵状態とカウント
        int shot_mode;  //ショットモード
        int money;      //お金
        int img;        //画像
        int slow;       //スローかどうか
        double x,y;     //座標
};
struct enemy_t
{
        int flag;		//フラグ
		int count;		//カウンタ
		int pattern;	//移動パターン
		int muki;		//向き
		int kind;		//種類
		int hp;			//体力
		int hp_max;		//最大体力
		int item_n[6];	//アイテム
		int img;		//画像
       
        double x;	//座標x
		double y;	//座標y
		double vx;	//x速度
		double vy;	//y速度
		double sp;	//スピード
		double ang;	//角度
        int bltime;	//弾幕開始時間
		int blknd;	//弾幕の種類
		int blknd2;	//弾の種類
		int color;	//色
		int state;	//状態
		int wtime;	//待機時間
		int wait;	//停滞時間
};
#endif
//ここまでstruct.h,ここから↓define.h
#ifndef DEFINE_INCLUDE
#define DEFINE_INCLUDE
#define WHITE GetColor(255,255,255)
#define ENEMY_MAX 30
#define X_MIN -8
#define Y_MIN -37
#define X_MAX 351
#define Y_MAX 361
#define ENEMY_ORDER_MAX 500
#endif
ヒントだけでも教えていただけるとうれしいです
よろしくお願いします


 メニュー
 メニュー カレンダー
 カレンダー Clock
 Clock 最新メンバー
 最新メンバー 投稿数
 投稿数 Link to us
 Link to us カウンター
 カウンター