敵移動プログラムを書いている時に、訳が分からなくなりました。
► スポイラーを表示
Enemy.cpp
Enemy.h
Enemy_MovePat.h
Enemy_MovePat.h
main.cpp
#include "Enemy.h"
#include "DxLib.h"
#include "Enemy_MovePat.h"
#define ENEMY_MAX 30
typedef struct Enemy_t
{
int nMovePat;
int nCnt;
int nAliveFlag; // 生存フラグ
double dAng, dSpd;
double x, y; // 座標
}
Enemy_t;
static int gCnt;
static Enemy_t gEnemy[ ENEMY_MAX ] = { 0 };
void Enemy_Init()
{
for( int i=0 ; i<ENEMY_MAX ; i++ ) {
memset( &gEnemy[i], 0, sizeof( struct Enemy_t ) );
}
gCnt = 0;
}
void ( *EnemyMovePat[] )( Enemy_t* ) =
{
Enemy_Move001,
};
static void Enemy_Action()
{
for( int i=0 ; i<ENEMY_MAX ; i++ ) {
if( gEnemy[i].nAliveFlag == 1 ) {
gEnemy[i].nCnt++;
EnemyMovePat[ gEnemy[i].nMovePat ]( &gEnemy[i] );
if( gEnemy[i].x < -30 || gEnemy[i].x > 670 || gEnemy[i].y < -30 || gEnemy[i].y > 510 ) {
gEnemy[i].nAliveFlag = 0;
}
}
}
}
static void Enemy_Enter()
{
if( gCnt == 120 ) {
gEnemy[0].nAliveFlag = 1;
gEnemy[0].nMovePat = 0;
gEnemy[0].x = 240;
gEnemy[0].y = -10;
gEnemy[0].dSpd = 1.0;
}
}
int Enemy_Update()
{
gCnt++;
Enemy_Enter();
Enemy_Action();
return 0;
}
void Enemy_Draw()
{
for( int i=0 ; i<ENEMY_MAX ; i++ ) {
if( gEnemy[i].nAliveFlag == 1 ) {
DrawFormatString( ( int )gEnemy[i].x, ( int )gEnemy[i].y, GetColor( 255, 255, 255 ), "敵" );
}
}
}
void Enemy_End()
{
}
#ifndef DEF_ENEMY_H
#define DEF_ENEMY_H
struct Enemy_t;
void Enemy_Init();
int Enemy_Update();
void Enemy_Draw();
void Enemy_End();
#endif // DEF_ENEMY_H
#include "DxLib.h"
#include "Enemy_MovePat.h"
#include "Enemy.h"
void Enemy_Move001( Enemy_t* pEnemy )
{
if( pEnemy->nCnt < 120 ) {
pEnemy->y += 3.0;
}
if( pEnemy->nCnt > 120 + 180 ) {
pEnemy->y += 0;
}
if( pEnemy->nCnt > 120 + 180 + 120 ) {
pEnemy->y -= 3.0;
}
}
#ifndef DEF_ENEMYMOVE_H
#define DEF_ENEMYMOVE_H
#include "Enemy.h"
void Enemy_Move001( Enemy_t* pEnemy );
#endif // DEF_ENEMYMOVE_H
#include "DxLib.h"
#include "Enemy.h"
static bool ProcessLoop()
{
ScreenFlip();
if( ProcessMessage() ) return false;
if( ClearDrawScreen() ) return false;
return true;
}
int WINAPI WinMain( HINSTANCE, HINSTANCE, LPSTR, int )
{
ChangeWindowMode( TRUE ), DxLib_Init(), SetDrawScreen( DX_SCREEN_BACK );
Enemy_Init();
while( ProcessLoop() ) {
if( Enemy_Update() ) break;
Enemy_Draw();
}
Enemy_End();
DxLib_End();
return 0;
}
すると
► スポイラーを表示
------ ビルド開始: プロジェクト: Enemy_sample, 構成: Debug Win32 ------
コンパイルしています...
Enemy_MovePat.cpp
d:\prog\samples\enemy_sample\src\enemy_movepat.cpp(7) : error C2027: 認識できない型 'Enemy_t' が使われています。
d:\prog\samples\enemy_sample\src\enemy.h(4) : 'Enemy_t' の宣言を確認してください。
d:\prog\samples\enemy_sample\src\enemy_movepat.cpp(7) : error C2227: '->nCnt' : 左側がクラス、構造体、共用体、ジェネリック型へのポインタではありません。
d:\prog\samples\enemy_sample\src\enemy_movepat.cpp(8) : error C2027: 認識できない型 'Enemy_t' が使われています。
d:\prog\samples\enemy_sample\src\enemy.h(4) : 'Enemy_t' の宣言を確認してください。
d:\prog\samples\enemy_sample\src\enemy_movepat.cpp(8) : error C2227: '->y' : 左側がクラス、構造体、共用体、ジェネリック型へのポインタではありません。
d:\prog\samples\enemy_sample\src\enemy_movepat.cpp(11) : error C2027: 認識できない型 'Enemy_t' が使われています。
d:\prog\samples\enemy_sample\src\enemy.h(4) : 'Enemy_t' の宣言を確認してください。
d:\prog\samples\enemy_sample\src\enemy_movepat.cpp(11) : error C2227: '->nCnt' : 左側がクラス、構造体、共用体、ジェネリック型へのポインタではありません。
d:\prog\samples\enemy_sample\src\enemy_movepat.cpp(12) : error C2027: 認識できない型 'Enemy_t' が使われています。
d:\prog\samples\enemy_sample\src\enemy.h(4) : 'Enemy_t' の宣言を確認してください。
d:\prog\samples\enemy_sample\src\enemy_movepat.cpp(12) : error C2227: '->y' : 左側がクラス、構造体、共用体、ジェネリック型へのポインタではありません。
d:\prog\samples\enemy_sample\src\enemy_movepat.cpp(15) : error C2027: 認識できない型 'Enemy_t' が使われています。
d:\prog\samples\enemy_sample\src\enemy.h(4) : 'Enemy_t' の宣言を確認してください。
d:\prog\samples\enemy_sample\src\enemy_movepat.cpp(15) : error C2227: '->nCnt' : 左側がクラス、構造体、共用体、ジェネリック型へのポインタではありません。
d:\prog\samples\enemy_sample\src\enemy_movepat.cpp(16) : error C2027: 認識できない型 'Enemy_t' が使われています。
d:\prog\samples\enemy_sample\src\enemy.h(4) : 'Enemy_t' の宣言を確認してください。
d:\prog\samples\enemy_sample\src\enemy_movepat.cpp(16) : error C2227: '->y' : 左側がクラス、構造体、共用体、ジェネリック型へのポインタではありません。
ビルドログは "file://d:\prog\samples\Enemy_sample\Debug\BuildLog.htm" に保存されました。
Enemy_sample - エラー 12、警告 0
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========
また、このエラーを消そうと以下のコードを書き直しました。
► スポイラーを表示
► スポイラーを表示
------ ビルド開始: プロジェクト: Enemy_sample, 構成: Debug Win32 ------
コンパイルしています...
Enemy_MovePat.cpp
d:\prog\samples\enemy_sample\src\enemy_movepat.cpp(7) : error C2065: 'nCnt' : 定義されていない識別子です。
d:\prog\samples\enemy_sample\src\enemy_movepat.cpp(8) : error C2065: 'y' : 定義されていない識別子です。
d:\prog\samples\enemy_sample\src\enemy_movepat.cpp(11) : error C2065: 'nCnt' : 定義されていない識別子です。
d:\prog\samples\enemy_sample\src\enemy_movepat.cpp(12) : error C2065: 'y' : 定義されていない識別子です。
d:\prog\samples\enemy_sample\src\enemy_movepat.cpp(15) : error C2065: 'nCnt' : 定義されていない識別子です。
d:\prog\samples\enemy_sample\src\enemy_movepat.cpp(16) : error C2065: 'y' : 定義されていない識別子です。
ビルドログは "file://d:\prog\samples\Enemy_sample\Debug\BuildLog.htm" に保存されました。
Enemy_sample - エラー 6、警告 0
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========
【開発環境】
Visual C++ 2008 Express Edition
C言語
Dxライブラリ