敵さんにHPを付けてあげたい
Posted: 2012年2月24日(金) 15:15
また質問させていただきます。。。
今度は、敵のHPが0になった時に敵が消滅してくれるようにしたいんです!
一様、敵さんに攻撃はヒットするようにはできました。
ソースを載せるのでアドバイスお願いします。。。
わからない所は敵にHPをどう渡せば良いのかがわかりません。
今度は、敵のHPが0になった時に敵が消滅してくれるようにしたいんです!
一様、敵さんに攻撃はヒットするようにはできました。
ソースを載せるのでアドバイスお願いします。。。
わからない所は敵にHPをどう渡せば良いのかがわかりません。
/////////////////////////////////////////////
///...インクルード
/////////////////////////////////////////////
#include "FPSsample.h"
#include "player.h"
#include "Bullet.h"
#include "enemy.h"
#include <math.h>
////////////////////////////////////////////
///...マクロ定義(defineなど)
////////////////////////////////////////////
#define MAX_BULLET (100)
#define MAX_DAMEJI (1) //弾のダメージ
#define LIMIT_UP (2.0f) //上移動限界
#define LIMIT_LEFT (2.0f) //左移動限界
#define LIMIT_RIGHT (78.0f) //右移動限界
#define LIMIT_DOWN (24.0f) //下移動限界
/////////////////////////////////////////////
//グローバル変数
/////////////////////////////////////////////
BULLET g_aBullet[MAX_BULLET];
/*-----------------------------------
関数名 :InitBullet
機能 :初期化
引数 :void
戻り値 :int
-----------------------------------*/
void InitBullet()
{
//配列の個数分ループ
for(int nCntBullet = 0 ; nCntBullet < MAX_BULLET ; nCntBullet = nCntBullet + 1)
{
g_aBullet[nCntBullet].type = BULLETTYPE_PLAYER;
g_aBullet[nCntBullet].bUse = false;
g_aBullet[nCntBullet].fPosX = 0.0f;
g_aBullet[nCntBullet].fPosY = 0.0f;
g_aBullet[nCntBullet].fPosXOld = 0.0f;
g_aBullet[nCntBullet].fPosYOld = 0.0f;
g_aBullet[nCntBullet].fMoveX = 0.0f;
g_aBullet[nCntBullet].fMoveY = 0.0f;
}
}
/*-----------------------------------
関数名 :UninitBullet
機能 :
引数 :void
戻り値 :int
-----------------------------------*/
void UninitBullet()
{
;//今は空白
}
/*-----------------------------------
関数名 :UpdateBullet
機能 :位置更新
引数 :void
戻り値 :int
-----------------------------------*/
void UpdateBullet()
{
//配列の個数分ループ
for(int nCntBullet = 0 ; nCntBullet < MAX_BULLET ; nCntBullet = nCntBullet + 1)
{
//構造体が使われているかどうか
if(g_aBullet[nCntBullet].bUse)
{
//前回の位置に現在の位置を代入
g_aBullet[nCntBullet].fPosXOld = g_aBullet[nCntBullet].fPosX;
g_aBullet[nCntBullet].fPosYOld = g_aBullet[nCntBullet].fPosY;
//現在の位置に移動量を加える
g_aBullet[nCntBullet].fPosX = g_aBullet[nCntBullet].fPosX + g_aBullet[nCntBullet].fMoveX;
g_aBullet[nCntBullet].fPosY = g_aBullet[nCntBullet].fPosY + g_aBullet[nCntBullet].fMoveY;
//限界座標を超えているか?
if(g_aBullet[nCntBullet].fPosX < LIMIT_LEFT || g_aBullet[nCntBullet].fPosX > LIMIT_RIGHT || g_aBullet[nCntBullet].fPosY < LIMIT_UP || g_aBullet[nCntBullet].fPosY > LIMIT_DOWN)
{
LOCATE((int)g_aBullet[nCntBullet].fPosXOld , (int)g_aBullet[nCntBullet].fPosYOld);
printf(" "); //前回の場所をクリア
g_aBullet[nCntBullet].bUse = false;
}
}
}
}
/*-----------------------------------
関数名 :DrawBullet
機能 :弾の描画
引数 :void
戻り値 :int
-----------------------------------*/
void DrawBullet()
{
//配列の個数分ループ
for(int nCntBullet = 0 ; nCntBullet < MAX_BULLET ; nCntBullet = nCntBullet + 1)
{
//構造体が使われているかどうか
if(g_aBullet[nCntBullet].bUse)
{
//弾のタイプごとに色を変化させる
if(g_aBullet[nCntBullet].type == BULLETTYPE_PLAYER)
{
COLOR(LIME);
}
else
{
COLOR(PINK);
}
//前回の位置にある弾をクリア
LOCATE((int)g_aBullet[nCntBullet].fPosXOld , (int)g_aBullet[nCntBullet].fPosYOld);
printf(" ");
//現在の位置に弾を表示
LOCATE((int)g_aBullet[nCntBullet].fPosX , (int)g_aBullet[nCntBullet].fPosY);
printf("=");
}
}
}
/*-----------------------------------
関数名 :SetBullet
機能 :弾発射
引数 :void
戻り値 :int
-----------------------------------*/
void SetBullet(float posX , float posY , float moveX , float moveY , BULLETTYPE type)
{
//配列の個数分ループ
for(int nCntBullet = 0 ; nCntBullet < MAX_BULLET ; nCntBullet = nCntBullet + 1)
{
//構造体が未使用かどうか
if(g_aBullet[nCntBullet].bUse == false)
{
//弾の発生座標
g_aBullet[nCntBullet].fPosX = posX;
g_aBullet[nCntBullet].fPosY = posY;
//弾の移動量
g_aBullet[nCntBullet].fMoveX = moveX;
g_aBullet[nCntBullet].fMoveY = moveY;
g_aBullet[nCntBullet].type = type; //弾の種類
g_aBullet[nCntBullet].bUse = true; //構造体を使用中に変更
break;
}
}
}
/*-----------------------------------
関数名 :CheckCollisionBullet
機能 :当たり判定処理
引数 :void
戻り値 :int
-----------------------------------*/
bool CheckCollisionBullet(ENEMY *pEnemy)
{
for(int nCntBullet = 0 ; nCntBullet < MAX_BULLET ; nCntBullet ++)
{
if(
sqrt(
pow(pEnemy ->fPosX- g_aBullet[nCntBullet].fPosX,2)
+ pow(pEnemy ->fPosY- g_aBullet[nCntBullet].fPosY,2)
) < 1
)
{
//弾にあたっていたらHPを減らす
pEnemy ->fHP--;
return true;
}
}
//敵の消滅処理
if(pEnemy ->fHP <= 0 ) //敵のHPが0の時敵消滅
{
LOCATE((int)pEnemy -> fPosXOId, (int)pEnemy -> fPosYOId);//前回の位置
printf(" ");
LOCATE((int)pEnemy -> fPosXOId, (int)pEnemy -> fPosYOId - 1);//前回の位置の一つ上
printf(" ");
printf("わかり合えたと信じている...", pEnemy < 0);
}
return false;
}
/*---------------EOF---------------*/