すいませんこのエラー原因がわかりません
Posted: 2015年1月04日(日) 20:17
龍神録のサイトを参考にしてゲームを制作してるのですが10番の敵を表示させてみようのところで詰んでいます。いろいろと改変してみてるのですがエラーが取れません。どなたかお力をかしていただけないでしょうか
ソースコードはこれで
エラーの出てる箇所はenemey.cpp 7~12行目、18~26行目、34~40行目
graph.cpp 11~12行目
エラーの種類は同じでenemey_t enemey[]Error;式は完全なオブジェクト型へのポインターである必要があります。です
宜しくお願いします。
ソースコードはこれで
main.cpp
#include "GV.h"
//ループで必ず行う3大処理
//ループで必ず行う3大処理
int ProcessLoop(){
if(ProcessMessage()!=0)return -1;//プロセス処理がエラーなら-1を返す
if(ClearDrawScreen()!=0)return -1;//画面クリア処理がエラーなら-1を返す
GetHitKeyStateAll_2();//現在のキー入力処理を行う
GetHitPadStateAll(); //現在のパッド入力処理を行う
return 0;
}
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){
ChangeWindowMode(TRUE);//ウィンドウモード
if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;//初期化と裏画面化
while(ProcessLoop()==0){//メインループ
switch(func_state){
case 0:
load(); //データロード
first_ini();//初回の初期化
func_state=99;
break;
case 99://STGを始める前に行う初期化
ini();
func_state=100;
break;
func_state=100;
break;
case 100:
calc_ch(); //キャラクタ計算
ch_move(); //キャラクタの移動制御
enemy_main();//敵処理メイン
graph_main();//描画メイン
stage_count++;
break;
default:
printfDx("不明なfunc_state\n");
break;
}
if(CheckStateKey(KEY_INPUT_ESCAPE)==1)break;//エスケープが入力されたらブレイク
ScreenFlip();//裏画面反映
}
DxLib_End();//DXライブラリ終了処理
return 0;
load.cpp
#include "DxLib.h"
#include "GV.h"
extern int img_ch[2][12];
void load(){
img_board[10] = LoadGraph("img/board/10.png");
img_board[11] = LoadGraph("img/board/11.png");
img_board[12] = LoadGraph("img/board/12.png");
img_board[20] = LoadGraph("img/board/20.png");
LoadDivGraph( "img/char/0.png" , 12 , 4 , 3 , 73 , 73 , img_ch[0] ) ;
LoadDivGraph( "img/enemy/0.png" , 9 , 3 , 3 , 32 , 32 , img_enemy[0] ) ;
}
graph.cpp
#include "DxLib.h"
#include "GV.h"
#include "struct.h"
extern struct ch_t ch;
extern int img_ch[2][12];
extern struct enemey_t enemy[];
void graph_enemy(){
int i;
for(i=0;i<ENEMY_MAX;i++){
if(enemy[i].flag==1){
DrawRotaGraphF(enemy[i].x+FIELD_X,enemy[i].y+FIELD_Y,1.0f,0.0f,img_enemy[0][enemy[i].img],TRUE);
}
}
}
void graph_ch(){
DrawRotaGraphF(ch.x,ch.y,1.0f,0.0f,img_ch[0][ch.img],TRUE);
}
void graph_board(){
DrawGraph( 0, 0,img_board[10],FALSE);
DrawGraph( 0, 16,img_board[11],FALSE);
DrawGraph( 0,464,img_board[12],FALSE);
DrawGraph(416, 0,img_board[20],FALSE);
}
void graph_main(){
graph_ch();
graph_board();
graph_enemy();
}
fanction.cpp
#include "DxLib.h"
//graph.cpp
//描画メイン
GLOBAL void graph_main();
//key.cpp
//現在のキー入力処理を行う
GLOBAL int GetHitKeyStateAll_2();
//受け取ったキー番号の現在の入力状態を返す
GLOBAL int CheckStateKey(unsigned char Handle);
//laod.cpp
//データのロード
GLOBAL void load();
GLOBAL void first_ini();
GLOBAL void calc_ch();
GLOBAL void GetHitPadStateAll();
GLOBAL void ch_move();
GLOBAL int CheckStatePad(unsigned int Handle);
GLOBAL void enemy_main();
GLOBAL void ini();
enemey.cpp
#include "DxLib.h"
#include "struct.h"
#include "GV.h"
extern struct enemey_t enemy[];
//敵の移動パターン0での移動制御
void enemy_pattern0(int i){
if(enemy[i].cnt<60){
enemy[i].y+=2.0;
}
if(enemy[i].cnt>60+240){
enemy[i].y-=2.0;
}
}
//敵データの登録
void enemy_enter(){
if(stage_count==100){//ゲームが始まって100カウントで登録
enemy[0].cnt =0;
enemy[0].muki =1;
enemy[0].flag =1;
enemy[0].bltime =150;
enemy[0].hp =1000;
enemy[0].hp_max =enemy[0].hp;
enemy[0].pattern=0;
enemy[0].x =FIELD_MAX_X/2;
enemy[0].y =-20;
}
}
//敵の行動制御
void enemy_act(){
int i;
for(i=0;i<ENEMY_MAX;i++){
if(enemy[i].flag==1){//その敵のフラグがオンになってたら
enemy_pattern0(i);
enemy[i].cnt++;
enemy[i].img=enemy[i].muki*3+(enemy[i].cnt%18)/6;
//敵が画面から外れたら消す
if(enemy[i].x<-50 || FIELD_MAX_X+50<enemy[i].x || enemy[i].y<-50 || FIELD_MAX_Y+50<enemy[i].y)
enemy[i].flag=0;
}
}
}
//敵処理メイン
void enemy_main(){
enemy_enter();
enemy_act();
}
define.h
#define FIELD_MAX_X 384
#define FIELD_MAX_Y 448
#define FIELD_X 32
#define FIELD_Y 16
#define PAD_MAX 16
#define ENEMY_MAX 30
struct.h
//キャラクターに関する構造体
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; //スローかどうか
float x,y; //座標
} ;
//パッドに関する構造体
struct pad_t{
int key[PAD_MAX];
};
//コンフィグに関する構造体
struct configpad_t{
int left;
int up;
int right;
int down;
int shot;
int bom;
int slow;
int start;
int change;
};
struct enemy_t{
//フラグ、カウンタ、移動パターン、向き、敵の種類、HP最大値、落とすアイテム、画像
int flag;
int cnt;
int pattern;
int muki;
int knd;
int hp;
int hp_max;
int item_n[6];
int img;
//座標、速度x成分、速度y成分、スピード、角度
double x;
double y;
double vx;
double vy;
double sp;
double ang;
int bltime;//弾幕開始時間、
int blknd;//弾の種類
int blknd2;//弾の種類
int col;//色
int state;//状態
int wtime;//待機時間
int wait;//停滞時間
};
key.cpp
#include "DxLib.h"
#include "GV.h"
#include "struct.h"
extern struct configpad_t configpad;
unsigned 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];
}
//パッドの入力状態を格納する変数
extern struct pad_t pad;
//引数1と引数2のうち大きい方を引数1に代入する
void input_pad_or_key(int *p, int k){
*p = *p>k ? *p : k;
}
//パッドとキーボードの両方の入力をチェックする関数
void GetHitPadStateAll(){
int i,PadInput,mul=1;
PadInput = GetJoypadInputState( DX_INPUT_PAD1 );//パッドの入力状態を取得
for(i=0;i<16;i++){
if(PadInput & mul) pad.key[i]++;
else pad.key[i]=0;
mul=2;
}
input_pad_or_key(&pad.key[configpad.left] ,CheckStateKey(KEY_INPUT_LEFT ));
input_pad_or_key(&pad.key[configpad.up] ,CheckStateKey(KEY_INPUT_UP ));
input_pad_or_key(&pad.key[configpad.right] ,CheckStateKey(KEY_INPUT_RIGHT ));
input_pad_or_key(&pad.key[configpad.down] ,CheckStateKey(KEY_INPUT_DOWN ));
input_pad_or_key(&pad.key[configpad.shot] ,CheckStateKey(KEY_INPUT_Z ));
input_pad_or_key(&pad.key[configpad.bom] ,CheckStateKey(KEY_INPUT_X ));
input_pad_or_key(&pad.key[configpad.slow] ,CheckStateKey(KEY_INPUT_LSHIFT ));
input_pad_or_key(&pad.key[configpad.start] ,CheckStateKey(KEY_INPUT_ESCAPE ));
input_pad_or_key(&pad.key[configpad.change] ,CheckStateKey(KEY_INPUT_LCONTROL));
}
//渡されたパッドキー番号の入力状態を返す。返り値が-1なら不正
int CheckStatePad(unsigned int Handle){
if(0<=Handle && Handle<PAD_MAX){
return pad.key[Handle];
}
else{
printfDx("CheckStatePadに渡した値が不正です\n");
return -1;
}
}
GV.h
#include "DxLib.h"
#include "define.h"
#ifdef GLOBAL_INSTANCE
#define GLOBAL
#else
#define GLOBAL extern
#endif
#include "function.h" //関数宣言
#include "math.h"
//画像用変数宣言部
GLOBAL int img_ch[2][12]; //キャラクタ画像9枚分 X2(変身用)
//構造体変数宣言部
extern struct ch_t ch; //キャラクタデータ宣言
extern struct configpad_t configpad;
GLOBAL int func_state;
GLOBAL int img_board[40];
GLOBAL void calc_ch();
GLOBAL int stage_count;
GLOBAL int img_enemy[3][9];//敵画像9枚分 X3体分
extern struct enemey_t enemy[];
ini.cpp
#include "DxLib.h"
#include "define.h"
#include "struct.h"
#include "GV.h"
struct ch_t ch;
struct pad_t pad;
struct configpad_t configpad;
struct enemy_t enemy[ENEMY_MAX];
void first_ini(){
//一番最初の初期化
ch.x=FIELD_MAX_X/2;
ch.y=FIELD_MAX_Y*3/4;
configpad.down=0;
configpad.left=1;
configpad.right=2;
configpad.up=3;
configpad.bom=4;
configpad.shot=5;
configpad.slow=11;
configpad.start=13;
configpad.change=6;
}
void ini(){
stage_count=1;
memset(&ch,0,sizeof(ch_t));//自機データの初期化
ch.x=FIELD_MAX_X/2;
ch.y=FIELD_MAX_Y*3/4;
memset(enemy,0,sizeof(enemy_t)*ENEMY_MAX);//敵データの初期化
}
graph.cpp 11~12行目
エラーの種類は同じでenemey_t enemey[]Error;式は完全なオブジェクト型へのポインターである必要があります。です
宜しくお願いします。