プログラムを複数のファイルに分割する為にPictureRead、Obj_Syutugen、Anim_Draw、Anim_AllDraw関数を関数の外の必要なデータを引数として取り込めるようにしたくて次のようにプログラムを書きなおした所、下記のようなエラーが吐き出されてしまいました。
#include "DxLib.h"
#define Anim_longest_Picture 5//最も多い枚数の画像を使うアニメの使用画像枚数
#define ObjApMax 3//ObjApの要素の数
#define ObjPalMax 3//ObjPalの要素の数
#define SpriteAmount 12//スプライトの総数
#define PictureReadAmount 2//読み込む画像ファイルの数
//配列の生成に変数は使えない
//関数の外では変数に値を代入できない
//配列は定義時に値を代入する事
int TimeCount;//全体の時間カウント
int Object_Gr[SpriteAmount];//画像格納変数
double Object_point[SpriteAmount][2]={//各画像の原点
{20,20},
{20,20},
{20,20},
{20,20},
{20,20},
{20,20},
{20,20},
{20,20},
{20,20},
{20,20},
{20,20},
{20,20}
};
struct Anim{
int Picture[Anim_longest_Picture];//アニメに使う画像番号 [アニメ番号][使用画像]
int Frame[Anim_longest_Picture];//アニメの各画像の表示フレーム [アニメ番号][フレーム数]
};
struct Anim AnimObj[6] = {
{{0,1,-1,-1,-1},{100,200,-1,-1,-1}},//0:自機ニュートラル
{{2,3,-1,-1,-1},{10,20,-1,-1,-1}},
{{4,5,-1,-1,-1},{10,20,-1,-1,-1}},
{{6,7,-1,-1,-1},{100,200,-1,-1,-1}},
{{8,9,-1,-1,-1},{10,20,-1,-1,-1}},
{{10,11,-1,-1,-1},{10,20,-1,-1,-1}}
};
struct ReadFileInf{
char *FileName;//ファイルのポインタ
int allnum,xnum,ynum,xsize,ysize;//画像の分割総数,横に対する分割数,縦に対する分割数,分割された画像一つのx方向の大きさ,y方向の大きさ
};
struct ReadFileInf ReadForObject_Gr[PictureReadAmount] = {
{ "../Picture/STGtate_test.png" , 6 , 2 , 3 , 40 , 40 },
{"../Picture/STGtate_test2.png" , 6 , 2 , 3 , 40 , 40 }
};
struct Obj{
int AnimNo,Stcnt,layer;//アニメ番号,アニメ切り替え基準カウンター,表示レイヤー
int flag;//出現する時間and出現判定
double x,y;//x座標,y座標
};
struct Obj ObjPal[ObjPalMax] = {//オブジェクト毎のパラメータ
{4,0,80, 0, 100,100},
{0,0,50, 1000, 110,110},
{0,0,50, 2000, 150,110}
};
struct Obj ObjAp[ObjApMax] = {//出現しているオブジェクトのデータ(出現していない所は全て-1)
{-1,-1,-1, -1, -1,-1},
{-1,-1,-1, -1, -1,-1},
{-1,-1,-1, -1, -1,-1}
};
void PictureRead(int *OG_inPictureRead , struct ReadFileInf *RFOG_inPictureRead , int PRA__inPictureRead){//画像ファイル読み込み
//使用外部データ:int Object_Gr,struct ReadFileInf ReadForObject_Gr, define PictureReadAmount
//呼び出し元:main
int i;
int a=0;
for(i = 0; i < PRA__inPictureRead; i ++){
LoadDivGraph( RFOG_inPictureRead[i].FileName , RFOG_inPictureRead[i].allnum , RFOG_inPictureRead[i].xnum , RFOG_inPictureRead[i].ynum , RFOG_inPictureRead[i].xsize , RFOG_inPictureRead[i].ysize , OG_inPictureRead + a );
a += RFOG_inPictureRead[i].allnum;
}
}
void Obj_Syutugen(int TC_inObj_Syutugen , struct Obj *OA_inObj_Syutugen ,
struct Obj *OP_inObj_Syutugen , int OAM_inObj_Syutugen , int OPM_inObj_Syutugen){//オブジェクトの出現管理
//使用外部変数:int TimeCount, struct Obj ObjAp[] , struct Obj ObjPal[] , define ObjApMax , define ObjPalMax
//呼び出し元:main
int i,j;
for(i = 0; i < OPM_inObj_Syutugen; i ++){
if(TC_inObj_Syutugen == OP_inObj_Syutugen[i].flag){
for(j = 0; j < OAM_inObj_Syutugen; j++){
if(OA_inObj_Syutugen[j].flag == -1){
OA_inObj_Syutugen[j].AnimNo = OP_inObj_Syutugen[i].AnimNo;
OA_inObj_Syutugen[j].flag = OP_inObj_Syutugen[i].flag;
OA_inObj_Syutugen[j].layer = OP_inObj_Syutugen[i].layer;
OA_inObj_Syutugen[j].Stcnt = OP_inObj_Syutugen[i].Stcnt;
OA_inObj_Syutugen[j].x = OP_inObj_Syutugen[i].x;
OA_inObj_Syutugen[j].y = OP_inObj_Syutugen[i].y;
break;
}
}
}
}
}
void Anim_Draw(int ObjectNumber , int AlP_inAnim_Draw , struct Obj *OA_inAnim_Draw , struct Anim *AO_inAnim_Draw ,
double *Op_inAnim_Draw , int *OG_inAnimDraw , int TC_inAnimDraw){//アニメ描画
//使用外部変数:define Anim_longest_Picture , struct Obj ObjAp[] , struct Anim AnimObj[]
//double Object_point[][] , int Object_Gr[] , int TimeCount
//呼び出し元:Anim_All_Draw
int i,j;
int a[AlP_inAnim_Draw];//アニメの各画像の終了フレーム
for(i = 0; i < AlP_inAnim_Draw; i ++){//aの初期化
a[i] = 0;
}
int b=0;//aの最大値
int c=0;
for(i = 0; i < AlP_inAnim_Draw; i ++){
for(j = 0; j <= i; j ++){
if(AO_inAnim_Draw[OA_inAnim_Draw[ObjectNumber].AnimNo].Frame[j] >=0){
a[i] += AO_inAnim_Draw[OA_inAnim_Draw[ObjectNumber].AnimNo].Frame[j];
}
else{
a[i] = -1;
}
}
}
for(i = 0;i < AlP_inAnim_Draw; i ++){
if(a[i]>b){
b = a[i];
}
}
c = (TC_inAnimDraw - OA_inAnim_Draw[ObjectNumber].Stcnt)%b;
for(i = 0;i < AlP_inAnim_Draw; i ++){
if(c<a[i]){
DrawGraph( OA_inAnim_Draw[ObjectNumber].x - Op_inAnim_Draw[AO_inAnim_Draw[OA_inAnim_Draw[ObjectNumber].AnimNo].Picture[i]][0],
OA_inAnim_Draw[ObjectNumber].y - Op_inAnim_Draw[AO_inAnim_Draw[OA_inAnim_Draw[ObjectNumber].AnimNo].Picture[i]][1],
Object_Gr[AO_inAnim_Draw[OA_inAnim_Draw[ObjectNumber].AnimNo].Picture[i]], TRUE ); //画像の描画
break;
}
}
}
void Anim_AllDraw(int OAM_inAnim_AllDraw , struct Obj *OA_inAnim_AllDraw , int AlP_inAnim_AllDraw , struct Anim *AO_inAnim_AllDraw ,
double *Op_inAnim_AllDraw , int *OG_inAnim_AllDraw , int TC_inAnim_AllDraw){//定義されたアニメの描画
//使用外部変数:ObjApMax,struct Obj ObjAp[]
//Anim_Draw内部:define Anim_longest_Picture , struct Obj ObjAp[] , struct Anim AnimObj[]
//double Object_point[][] , int Object_Gr[] , int TimeCount
//呼び出し元:main
int i,j,k;
int dumy=100000;//並び替え時の比較対象
int H=0;
int KariObj[OAM_inAnim_AllDraw];//臨時出現オブジェクトデータベース
for(i = 0; i < OAM_inAnim_AllDraw; i ++){
KariObj[i]=-1;
}
for(j = 0; j < OAM_inAnim_AllDraw; j ++){//レイヤー順に並び替え
for(i = 0; i < OAM_inAnim_AllDraw; i ++){
if(OA_inAnim_AllDraw[i].flag>=0){//並び替えの対象は出現しているものに限る
if(dumy>=OA_inAnim_AllDraw[i].layer){
for(k = 0; k < j; k++){
if(i==KariObj[k]){
H=1;
}
}
if(H==0){
dumy=OA_inAnim_AllDraw[i].layer;
KariObj[j]=i;
}
H=0;
}
}
}
H=0;
dumy=100000;
}
for(j = 0; j < OAM_inAnim_AllDraw; j ++){
if(KariObj[j] >= 0 && KariObj[j] < OAM_inAnim_AllDraw){
Anim_Draw(KariObj[j],OA_inAnim_AllDraw,AlP_inAnim_AllDraw,AO_inAnim_AllDraw,Op_inAnim_AllDraw,OG_inAnim_AllDraw,TC_inAnim_AllDraw);
}
}
}
int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){
ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen( DX_SCREEN_BACK ); //ウィンドウモード変更と初期化と裏画面設定
TimeCount=0;
PictureRead(Object_Gr,ReadForObject_Gr,PictureReadAmount);
// while( 裏画面を表画面に反映, メッセージ処理, 画面クリア )
while( ScreenFlip()==0 && ProcessMessage()==0 && ClearDrawScreen()==0 ){
Obj_Syutugen(TimeCount,ObjAp,ObjPal,ObjApMax,ObjPalMax);
Anim_AllDraw(ObjApMax,ObjAp,Anim_longest_Picture,AnimObj,Object_point,Object_Gr,TimeCount);
TimeCount++;
}
DxLib_End(); // DXライブラリ終了処理
return 0;
}
1>c:\aaaa\visual studio 2008\projects\tatestg_test\tatestg_test\main.cpp(104) : error C2057: 定数式が必要です。
1>c:\aaaa\visual studio 2008\projects\tatestg_test\tatestg_test\main.cpp(104) : error C2466: サイズが 0 の配列を割り当てまたは宣言しようとしました。
1>c:\aaaa\visual studio 2008\projects\tatestg_test\tatestg_test\main.cpp(104) : error C2133: 'a' : サイズが不明です。
1>c:\aaaa\visual studio 2008\projects\tatestg_test\tatestg_test\main.cpp(128) : error C2109: 配列または、ポインタでない変数に添字が使われました。
1>c:\aaaa\visual studio 2008\projects\tatestg_test\tatestg_test\main.cpp(129) : error C2109: 配列または、ポインタでない変数に添字が使われました。
1>c:\aaaa\visual studio 2008\projects\tatestg_test\tatestg_test\main.cpp(145) : error C2057: 定数式が必要です。
1>c:\aaaa\visual studio 2008\projects\tatestg_test\tatestg_test\main.cpp(145) : error C2466: サイズが 0 の配列を割り当てまたは宣言しようとしました。
1>c:\aaaa\visual studio 2008\projects\tatestg_test\tatestg_test\main.cpp(145) : error C2133: 'KariObj' : サイズが不明です。
1>c:\aaaa\visual studio 2008\projects\tatestg_test\tatestg_test\main.cpp(171) : error C2664: 'Anim_Draw' : 2 番目の引数を 'Obj *' から 'int' に変換できません。(新しい機能 ; ヘルプを参照)
1> この変換が可能なコンテキストはありません。
1>c:\aaaa\visual studio 2008\projects\tatestg_test\tatestg_test\main.cpp(184) : error C2664: 'Anim_AllDraw' : 5 番目の引数を 'double [12][2]' から 'double *' に変換できません。(新しい機能 ; ヘルプを参照)
1> 指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。
多分、構造体を引数として渡す時にミスを起こしているのと#defineで定義したAnim_longest_Picture,ObjApMax,ObjPalMax,SpriteAmount,PictureReadAmountの値を変数に入れる事が出来なくてエラーを起こしているのだと思いますが、前者はどこで間違っているのかが分からず、後者はdefineの値を配列の要素数を定義する時にも使用しているためAnim_longest_Picture,ObjApMax,ObjPalMax,SpriteAmount,PictureReadAmountの定義方法を変数での定義に変える事が出来ずどうしていいか分からずに困っています。
プログラミングはwindows7でVC++ 2008EEを使って行っています。
基礎しか学んだことのない初心者ですがよろしくお願いします。