ボスの体力ゲージは緑のゲージを赤のゲージの上に重ねて表示しています。
そこでやりたい事は、ボスがプレイヤーの弾に衝突した時に、体力ゲージの緑のゲージを先に減らして、
緑のゲージが無くなったら赤のゲージも減る処理がしたいのですが、どう書けばいいですか?
#include <stdio.h> //C言語
#include "gs.h" //学内ライブラリィ
#include "def.h" //共通定義
#include "Graphics.h" //グラフィック
//宣言-------------------------------------------
//参照-------------------------------------------
extern gsTexture sRed; //赤のグラフ
extern gsTexture sGreen; //緑のグラフ
extern gsTexture sNumText; //数字の文字
extern gsTexture sEnemy2;
extern OBJ gEnemy2[ENEMY2_MAX];
//グラフを表示-----------------------------------------------------
void GraphicsDrawBox( int x, int y, int size1, int size2)
{
//赤色で下地を描く
gsDraw2DEx( sRed, x ,y ,16, size2, 0x80ffffff );
//緑で上に描く
if( size2 > 0)
{
gsDraw2DEx( sGreen, x, y, 16, size1, 0x80ffffff);
}
}
#include <stdio.h> //C言語
#include "gs.h" //学内ライブラリィ
#include "def.h" //共通定義
#include "Boss1.h" //ボス
#include "Graphics.h" //グラフィック処理
//変数宣言----------------------------------------------------------------
OBJ gBoss1; //ボスの構造体
//変数参照----------------------------------------------------------------
extern gsTexture sBoss1; //ボス1
extern gsTexture sBoss1Damage; //ボス1ダメージ
extern gsTexture sBossText; //ボスの文字
extern int gScore; //スコア
//開始------------------------------------------------------------------------------------------------
void Boss1Start(void)
{
gBoss1.flg = OFF; //存在しない設定
}
//メイン処理-------------------------------------------------------------------------------------------
void Boss1Main(void)
{
//存在しなければ
if( gBoss1.flg == OFF)
{
Boss1Set(); //発生
}
//存在すれば
else
{
Boss1Move(); //移動
Boss1InScreen(); //移動範囲の制限
Boss1Damage(); //ダメージ
//Boss1Shot(); //弾を発射
}
}
//表示---------------------------------------------------------------------------------------------
void Boss1Draw(void)
{
//存在しなければ中止
if( gBoss1.flg == OFF)
{
return;
}
//通常の状態
if( gBoss1.timer == 0)
{
gsDraw2D( sBoss1, (int)gBoss1.x, (int)gBoss1.y); //ボス
}
//ダメージ中なら
else
{
//通常と交互に表示処理を行う
if( gBoss1.timer%2 == 0)
{
gsDraw2D( sBoss1, (int)gBoss1.x, (int)gBoss1.y); //通常
}
else
{
gsDraw2D( sBoss1Damage, (int)gBoss1.x, (int)gBoss1.y); //ダメージ中
}
}
//HPを表示
gsDraw2D( sBossText, 1020, 10); //ボス文字
GraphicsDrawBox( 1020, 80, gBoss1.HP/2, 500 );//ボスHP
GraphicsDrawBox( 1020, 80, gBoss1.HP/2, 500 );//ボスHP
}
//発生----------------------------------------------------------------------------------------
void Boss1Set(void)
{
//スコアが4500小さいでは発生しない
if( gScore < 4500)
{
return; //何もしない
}
gBoss1.flg = ON; //存在させる
gBoss1.x = 300; //X座標を設定
gBoss1.y -= 300; //Y座標を設定
gBoss1.dir = 3; //左右に移動
gBoss1.HP = 1000; //HPを設定
}
//移動----------------------------------------------------------------------------------------
void Boss1Move(void)
{
//上から下に移動
if( gBoss1.y <= 0)
{
gBoss1.y += 3; //下に移動
}
else
{
gBoss1.x += gBoss1.dir; //左右に移動
}
}
//移動範囲の制限------------------------------------------------------------------------------
void Boss1InScreen(void)
{
//左方向
if( gBoss1.x < 120)
{
gBoss1.dir += 3; //右に移動
}
else
//右方向
if( gBoss1.x > 640)
{
gBoss1.dir -= 3; //左に移動
}
}
//ダメージ-------------------------------------------------------------------------------------
void Boss1Damage(void)
{
//ダメージ中なら
if( gBoss1.timer > 0)
{
//加算し、50超えるとダメージ終了
gBoss1.timer++;
if( gBoss1.timer > 50)
{
gBoss1.timer = 0;
}
}
}