//--------------------------------------------------------------------------------------
// File: EmptyProject.cpp
//
// Empty starting point for new Direct3D applications
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//--------------------------------------------------------------------------------------
//古い文字列操作関数に対する警告を回避する
#pragma warning (disable : 4995)
#pragma warning (disable : 4996)

#include <stdio.h>
#include <tchar.h>

#include "dxstdafx.h"
#include "resource.h"

//---------------------------------------------
//プロトタイプ宣言
//-------------------------------

//---------------------------------------------
//その他のインクルード
//-------------------------------
#include "keycheck.h"


//---------------------------------------------
//その他のディファイン
//最大値とかを指定させる
//-------------------------------
/*自機用*/
#define MYSHIP 1            //自機の最大数
#define MYSHIP_SPEED 4      //自機用の移動速度
/*自機用の弾*/
#define BULLET_SPEED 11     //自機用弾の移動速度
#define BULLET_MAX 10       //弾の最大数
/*敵用*/
#define ENEMY_MAX 2			//敵の最大数
#define ENEMY_SPEED 3       //敵の動く最大速度
#define ENEMY_SPEED_B 4     //敵の動く最大速度パターンＢ
/*敵用の弾*/
#define ENEMY_BLT_MAX 20    //敵の弾の最大数
#define ENEMY_BLT_SPEED 6	//敵用弾の移動速度
/*中ボス*/
#define BOSS_MAX 1			//ボス最大数
#define BOSS_SPEED 3		//ボスの移動速度
#define BOSS_BLT_MAX 10		//ボスの弾の最大数
#define BOSS_BLT_B_MAX 5	//ボスの弾の最大数
#define BOSS_BLT_SPEED 5	//ボスの移動速度
#define BOSS_BLT_B_SPEED 7	//ボスの移動速度
#define BOSS_BLT_C_SPEED 9	//ボスの移動速度
/*お宝*/
#define TAKARA_MAX 3		//お宝最大数
#define TKR_BLT_MAX	5		//宝マックス
#define TKR_SPEED 5			//宝落下速度


//--------------------------------------------------------------------------------------
//関数
//-------------------------------
int gamemode = 0;//ゲームモード管理変数『０：タイトル　１：ゲーム画面　２：ゲームクリア　３：ゲームオーバー　４：ステージクリア　５：ネクスト画面』
int times = 60,ti = 0,te = 0,ts = 0;//制限時間管理用変数
int i;
int score;//得点
int Hi_score;//最高得点
int Life = 50;//体力
int count_e;//倒した敵の数
int Boss_L = 0;//ボスの体力。
int Stage = 0;//ステージ数
int Stage_S = 0;//STAGE数管理
int count_T;//宝カウント管理

//--------------------------------------------------------------------------------------
//テクスチャ関数
//-------------------------------
LPDIRECT3DTEXTURE9      pTexture;//自機用
LPDIRECT3DTEXTURE9      pText_tama;//自弾用
LPDIRECT3DTEXTURE9      pText_teki;//敵用
LPDIRECT3DTEXTURE9      pText_teta;//敵弾用
LPDIRECT3DTEXTURE9      pText_icon;//アイテム用
LPDIRECT3DTEXTURE9      pText_back;//背景用
LPDIRECT3DTEXTURE9      pText_back_a;//背景用
LPDIRECT3DTEXTURE9		pText_back_sc;//得点背景用
LPDIRECT3DTEXTURE9		pText_boss;//中ボス
LPDIRECT3DTEXTURE9		pText_boss_ta;//中ボス用弾
LPDIRECT3DTEXTURE9		pText_boss_ta2;//中ボス用弾
LPDIRECT3DTEXTURE9		pText_takara1;//お宝１
LPDIRECT3DTEXTURE9		pText_takara2;//お宝２
LPDIRECT3DTEXTURE9		pText_takara3;//お宝３
LPDIRECT3DTEXTURE9		pText_title;//タイトル画像
LPDIRECT3DTEXTURE9		pText_title_back;//タイトル背景画像
//LPDIRECT3DTEXTURE9      pText_logo_a;//ロゴ００１用
//LPDIRECT3DTEXTURE9      pText_life;//自機ライフ用


//スプライトの作成
LPD3DXSPRITE            pSprite;

//--------------------------------------------------------------------------------------
//座標関数
//-------------------------------
D3DXVECTOR3             gPos_map = D3DXVECTOR3(0,0,0);//背景画像用の画像指定位置
D3DXVECTOR3             gPos_map_a = D3DXVECTOR3(0,-480,0);//背景画像用の画像指定位置
D3DXVECTOR3				gPos_sc = D3DXVECTOR3(384,-30,0);//背景画像用の画像指定位置
D3DXVECTOR3				gPos_title = D3DXVECTOR3(30,0,0);//背景画像用の画像指定位置
//D3DXVECTOR3               gPos_logo_a = D3DXVECTOR3(150,420,0);//ロゴ００１画像用の画像指定位置
//D3DXVECTOR3				gPos_b = D3DXVECTOR3(0,-480,0);//●●用の画像指定位置


//--------------------------------------------------------------------------------------
//マトリクス
//-------------------------

D3DXMATRIX  matrix_ji;//自機
D3DXMATRIX  matrix_back;//背景
D3DXMATRIX	matrix_back_a;//背景
D3DXMATRIX	matrix_back_sc;//ハイスコア背景画像
D3DXMATRIX  matrix_title;//自機
D3DXMATRIX  matrix_title_back;//自機
//D3DXMATRIX    matrix_logo_a;//ロゴ００１


	//---------------------------------------------
	//自機の構造体　※基本「０」で！
	//---------------------------------
	typedef struct _myship
	{
		D3DXVECTOR3     gPos;//敵用の画像指定位置
		int             active;//有効フラグ　０：OFF　１：ON
		D3DXMATRIX      matrix;//行列
	};

	_myship myship[MYSHIP];//弾構造体の宣言

	//---------------------------------------------
	//弾の構造体
	//------------------
	typedef struct _bullet
	{
		D3DXVECTOR3     gPos_tm;//自機弾用の画像指定位置
		int             active;//有効フラグ　０：OFF　１：ON
		int             type;//弾の種類
		D3DXMATRIX      matrix;//行列
	};
	 
	_bullet bullets[BULLET_MAX];//弾構造体の宣言

	//---------------------------------------------
	//敵の構造体
	//--------------------------
	typedef struct _enemy
	{
		D3DXVECTOR3     gPos_te;//敵の座標
		int             active_te;//有効フラグ　０：OFF　１：ON
		int             shot_wait;//発車待ち
		int             type;//敵の種類
		D3DXMATRIX      matrix_te;//敵の行列
	};

	_enemy enemy[ENEMY_MAX];//敵構造体の宣言

	//---------------------------------------------
	//敵の弾の構造体
	//------------------
	typedef struct _enemy_blt
	{
		D3DXVECTOR3     gPos;//敵用の画像指定位置
		int             active;//有効フラグ　０：OFF　１：ON
		int             type;//弾の種類
		D3DXMATRIX      matrix;//行列
	};

	_enemy_blt enemy_blt[ENEMY_MAX][ENEMY_BLT_MAX];//弾構造体の宣言

	//---------------------------------------------
	//敵の弾の構造体　中ボス
	//------------------
	typedef struct _enemy_boss
	{
		D3DXVECTOR3		gPos;//敵用の画像指定位置
		int				active;//有効フラグ　０：OFF　１：ON
		int             shot_wait;//発車待ち
		int				type;//弾の種類
		D3DXMATRIX		matrix;//行列
	};

	_enemy_boss enemy_boss[BOSS_MAX];//弾構造体の宣言

	//---------------------------------------------
	//敵の弾の構造体
	//------------------
	typedef struct _boss_blt
	{
		D3DXVECTOR3     gPos;//敵用の画像指定位置
		int             active;//有効フラグ　０：OFF　１：ON
		int             type;//弾の種類
		D3DXMATRIX      matrix;//行列
	};

	_boss_blt boss_blt[BOSS_BLT_MAX][BOSS_MAX];//弾構造体の宣言

	//---------------------------------------------
	//敵の弾の構造体
	//------------------
	typedef struct _boss_blt2
	{
		D3DXVECTOR3     gPos;//敵用の画像指定位置
		int             active;//有効フラグ　０：OFF　１：ON
		int             type;//弾の種類
		D3DXMATRIX      matrix;//行列
	};

	_boss_blt2 boss_blt2[BOSS_BLT_MAX][BOSS_MAX];//弾構造体の宣言

	//---------------------------------------------
	//敵の弾の構造体
	//------------------
	typedef struct _boss_blt3
	{
		D3DXVECTOR3     gPos;//敵用の画像指定位置
		int             active;//有効フラグ　０：OFF　１：ON
		int             type;//弾の種類
		D3DXMATRIX      matrix;//行列
	};

	_boss_blt3 boss_blt3[BOSS_BLT_MAX][BOSS_MAX];//弾構造体の宣言

	//---------------------------------------------
	//お宝を管理する構造体
	//---------------------------------
	/*typedef struct _takara
	{
		D3DXVECTOR3     gPos;//宝用の画像指定位置
		int             active;//有効フラグ　０：OFF　１：ON
		int             type;//宝の種類
		D3DXMATRIX      matrix;//行列
	};

	_takara takara[TAKARA_MAX];//弾構造体の宣言*/
	//---------------------------------------------
	//お宝を管理する構造体
	//---------------------------------
	typedef struct _takara2
	{
		D3DXVECTOR3     gPos;//宝用の画像指定位置
		int             active;//有効フラグ　０：OFF　１：ON
		int             type;//宝の種類
		D3DXMATRIX      matrix;//行列
	};

	_takara2 takara2[TAKARA_MAX][TKR_BLT_MAX];//弾構造体の宣言










//--------------------------------------------------------------------------------------
//フォント作成　変数宣言
//--------------------------------
LPD3DXFONT              pFont;///フォント０タイプ＝ ＡＲＰ浪漫明朝体Ｕ》主に、[文字表示]など
LPD3DXFONT              pFonta;//フォントＡタイプ＝《Broadway BT》主に、[制限時間]など
LPD3DXFONT              pFontb;//フォントＢタイプ＝《HGep037》主に、[ステータス表示]など
LPD3DXFONT              pFontc;//フォントＣタイプ＝《FancyBalloonsAlphabet》主に、[最高得点]など
LPD3DXFONT              pFontd;//フォントＤタイプ＝《BackSeatAlphabetWidth》主に、[スコア（得点）]など
LPD3DXFONT              pFonte;//フォントＥタイプ＝《D3 Cosmism》主に、[時間]など
LPD3DXFONT              pFontf;//フォントＦタイプ＝《SHOWA73ARegular》主に、[タイトル画面文字]など
LPD3DXFONT              pFontg;//フォントＧタイプ＝《富士ポップＰ》主に、[その他　小さな文字]など
LPD3DXFONT              pFonth;//フォントＨタイプ＝《TAPEMAN》主に、[使わないかも]など



//--------------------------------------------------------------------------------------
// Create any D3DPOOL_MANAGED resources here 
//--------------------------------------------------------------------------------------
HRESULT CALLBACK OnCreateDevice( IDirect3DDevice9* pd3dDevice, const D3DSURFACE_DESC* pBackBufferSurfaceDesc, void* pUserContext )
{
    return S_OK;
}


//--------------------------------------------------------------------------------------
// Create any D3DPOOL_DEFAULT resources here 
//--------------------------------------------------------------------------------------
HRESULT CALLBACK OnResetDevice( IDirect3DDevice9* pd3dDevice, 
                               const D3DSURFACE_DESC* pBackBufferSurfaceDesc, void* pUserContext )
{
    return S_OK;
}


//--------------------------------------------------------------------------------------
// Handle updates to the scene
//--------------------------------------------------------------------------------------
#ifdef DXUTD3D9 /*新しいＤＸＵＴ対応のため*/
void CALLBACK OnFrameMove( double fTime, float fElapsedTime, void* pUserContext )
#else
void CALLBACK OnFrameMove( IDirect3DDevice9* pd3dDevice, double fTime, float fElapsedTime, void* pUserContext )
#endif
{
    //  キー状態を調べる関数
    keycheck( );

    switch(gamemode)
    {
    case 0://【タイトル画面】
        if(gamemode == 0)
        {
            if(KEY_S == PUSH)//Ｓキーが押されたら下記の処理を実行！
            {
                gamemode = 1;//タイトル画面からゲーム画面へ移動
				Stage = 1;//最初のSTAGE数を代入
				Stage_S = 1;//ステージ数が変化しても同じ処理をするため
            }
        }

		//ハイスコア得点の背景画像
		D3DXMatrixTranslation( &matrix_back_sc,0,0,0);

		//ハイスコア得点の背景画像
		D3DXMatrixTranslation( &matrix_title_back,0,0,0);

		//ハイスコア得点の背景画像
		D3DXMatrixTranslation( &matrix_title,0,0,0);
 
        //＜matrix_te用＝ロゴ００１画像＞
        //移動行列を作成
        //D3DXMatrixTranslation( &matrix_logo_a,0,0,0);

        break;
	case 1://【ゲーム画面】
		switch(Stage_S)
		{
		case 1://

			//--------------------------------------------------------------------------------------
			//自機を移動させる処理　（押された時、押しっぱなしになった時）
			//-------------------------------------------------------------------
			if(KEY_LEFT == PUSH || KEY_LEFT == HOLD)
			{
				myship[0].gPos.x -= MYSHIP_SPEED;
			}
			if(KEY_RIGHT == PUSH || KEY_RIGHT == HOLD)
			{
				myship[0].gPos.x += MYSHIP_SPEED;
			}
			if(KEY_UP == PUSH || KEY_UP == HOLD)
			{
				myship[0].gPos.y -= MYSHIP_SPEED;
			}
			if(KEY_DOWN == PUSH || KEY_DOWN == HOLD)
			{
				myship[0].gPos.y += MYSHIP_SPEED;
			}


			//--------------------------------------------------------------------------------------
			//自機の画像が
			//画面から消えないようにする
			//-------------------------------
			if(myship[0].gPos.x < 0)//画面の左
			{
				myship[0].gPos.x = 0;
			}
			if(myship[0].gPos.x >= 585)//画面の右
			{
				myship[0].gPos.x = 585;
			}
			if(myship[0].gPos.y < 0)//画面の上
			{
				myship[0].gPos.y = 0;
			}
			if(myship[0].gPos.y >= 425)//画面の下
			{
				myship[0].gPos.y = 425;
			}


			//--------------------------------------------------------------------------------------
			//自弾の発射
			//----------------------------------
			if(KEY_SPACE == PUSH)//スペースキーが押されたら
			{
				for (int b = 0; b < BULLET_MAX; b++)
				{
					if(bullets[b].active == 0)
					{
						bullets[b].active = 1;//弾の表示
						//自機の中央に表示させる
						bullets[b].gPos_tm.x = myship[0].gPos.x + 29;
						bullets[b].gPos_tm.y = myship[0].gPos.y + 15;
						break;//処理を抜け出す
					}
				}
			}

			//--------------------------------------------------------------------------------------
			//自弾の移動
			//----------------------------------

			// for文で弾の数だけやる
			for(int b = 0;b < BULLET_MAX; b++)
			{
				if(bullets[b].active == 1)//弾が有効
				{
					switch(bullets[b].type)
					{
					case 0://
						// 弾の座標はbullet構造体の中に入れる
						bullets[b].gPos_tm.y -= BULLET_SPEED;//弾の座標を減らす
						if(bullets[b].gPos_tm.y < 0)
						{
							bullets[b].gPos_tm.y = myship[0].gPos.y;
							bullets[b].active = 0;
						}
						break;
					case 1://
						break;
					}
				}
			}

			//--------------------------------------------------------------------------------------
			//自機用の弾と敵の当たり判定
			//-------------------------------------------
			for(int b = 0;b < BULLET_MAX; b++)
			{
				if(bullets[b].active == 1)//弾がないのに当たり判定させないため
				{
					for(int em = 0;em < ENEMY_MAX;em++)
					{
						if( enemy[em].active_te == 1 )  //敵が有効
						{
							if(bullets[b].gPos_tm.x >= enemy[em].gPos_te.x)
							{
								if(bullets[b].gPos_tm.x <= enemy[em].gPos_te.x + 70)//画像の中心部が初期設定になっているので半分の値を代入
								{
									if(bullets[b].gPos_tm.y >= enemy[em].gPos_te.y)
									{
										if(bullets[b].gPos_tm.y <= enemy[em].gPos_te.y + 35)//画像の中心部が初期設定になっているので半分の値を代入
										{
											//弾が当たったら、フラグをOFFにする
											enemy[em].active_te = 0;
											bullets[b].active = 0;
											score += 150;//敵を倒すことが出来たら得点ＵＰ！
											
											for(int tm = 0;tm < TAKARA_MAX;tm++)
											{
												for(int tb = 0;tb < TKR_BLT_MAX;tb++)
												{
													takara2[tm][tb].active = 1;
												}
											}
											count_e++;//倒せたら１プラス
										}
									}
								}
							}
						}
					}
				}
			}




			//--------------------------------------------------------------------------------------
			//自機用の弾とボスの当たり判定
			//-------------------------------------------
			for(int b = 0;b < BULLET_MAX; b++)
			{
				if(bullets[b].active == 1)//弾がないのに当たり判定させないため
				{
					for(int bm = 0;bm < BOSS_MAX;bm++)
					{
						if( enemy_boss[bm].active == 1 )  //敵が有効
						{
							if(bullets[b].gPos_tm.x >= enemy_boss[bm].gPos.x + 12)
							{
								if(bullets[b].gPos_tm.x <= enemy_boss[bm].gPos.x + 90)
								{
									if(bullets[b].gPos_tm.y >= enemy_boss[bm].gPos.y + 28)
									{
										if(bullets[b].gPos_tm.y <= enemy_boss[bm].gPos.y + 105)
										{
											Boss_L -= 1;
											bullets[b].active = 0;
											score += 15;//敵を倒すことが出来たら得点ＵＰ！

											if(Boss_L <= 0)
											{
												//弾が当たったら、フラグをOFFにする
												enemy_boss[bm].active = 0;
												gamemode = 4;//ステージクリア画面に移動！
											}
										}
									}
								}
							}
						}
					}
				}
			}





			//--------------------------------------------------------------------------------------
			//敵の再発生
			//-------------------------------------------

			for(int em = 0;em < ENEMY_MAX;em++)
			{
				if( enemy[em].active_te == 0 )  //敵が無効
				{
					enemy[em].active_te = 1;
					if( enemy[em].type == 0 )
					{
						enemy[em].gPos_te.x = -100;
					}
					else
					{
						enemy[em].gPos_te.x = 710;
					}
				}
			}


			//--------------------------------------------------------------------------------------
			//敵の動き
			//------------------------------------------

			//敵の動き
			for(int em = 0;em< ENEMY_MAX;em++)
			{
				if(enemy[em].active_te == 1)
				{
					if( enemy[em].type==0 )
					{
						enemy[em].gPos_te.x += ENEMY_SPEED;
						if(enemy[em].gPos_te.x > 640)
						{
							enemy[em].gPos_te.x = -100;
						}
					}
					else
					{
						enemy[em].gPos_te.x -= ENEMY_SPEED_B;
						if(enemy[em].gPos_te.x < -70)
						{
							enemy[em].gPos_te.x = 680;
						}
					}
				}
			}

			//--------------------------------------------------------------------------------------
			//敵用弾の発射
			//-----------------------------------------
  
			for(int em = 0;em < ENEMY_MAX; em++)
			{
				if(enemy[em].active_te == 1)
				{
					//  弾の発射待ち？
					if( enemy[em].shot_wait > 0 ) 
					{
						enemy[em].shot_wait--;//発射しない
					}
					else
					{
						for (int eb = 0; eb < ENEMY_BLT_MAX; eb++)
						{
							if(enemy_blt[em][eb].active == 0)//無効な弾
							{
								enemy_blt[em][eb].active = 1;//弾の表示
								//敵の中央に表示させる
								enemy_blt[em][eb].gPos.x = enemy[em].gPos_te.x + 30;
								enemy_blt[em][eb].gPos.y = enemy[em].gPos_te.y + 20;
								//敵の弾の発射を抑制
								enemy[em].shot_wait = 20;//発射を抑制するフレーム数
								break;
							}
						}
					}
				}
			}

		//////////////////////////
		//ステージ２
		if(Stage == 2)
		{
			 for(int em = 0;em < ENEMY_MAX; em++)
			{
				if(enemy[em].active_te == 1 || enemy[em + 1].active_te == 1)
				{
					//  弾の発射待ち？
					if( enemy[em].shot_wait > 0 ) 
					{
						enemy[em].shot_wait--;//発射しない
					}
					else
					{
						for (int eb = 0; eb < ENEMY_BLT_MAX; eb++)
						{
							if(enemy_blt[em][eb].active == 0)//無効な弾
							{
								enemy_blt[em][eb].active = 1;//弾の表示
								enemy_blt[em][eb + 1].active = 1;//弾の表示
								//敵の中央に表示させる
								enemy_blt[em][eb].gPos.x = enemy[em].gPos_te.x + 15;
								enemy_blt[em][eb].gPos.y = enemy[em].gPos_te.y + 20;

								enemy_blt[em][eb + 1].gPos.x = enemy[em].gPos_te.x + 45;
								enemy_blt[em][eb + 1].gPos.y = enemy[em].gPos_te.y + 20;
								//敵の弾の発射を抑制
								enemy[em].shot_wait = 20;//発射を抑制するフレーム数
								break;
							}
						}
					}
				}
			}
		}

		//////////////////////////
		//ステージ３以降
		if(Stage >= 3)
		{
			 for(int em = 0;em < ENEMY_MAX; em++)
			{
				if(enemy[em].active_te == 1 || enemy[em + 1].active_te == 1 || enemy[em + 2].active_te == 1)
				{
					//  弾の発射待ち？
					if( enemy[em].shot_wait > 0 ) 
					{
						enemy[em].shot_wait--;//発射しない
					}
					else
					{
						for (int eb = 0; eb < ENEMY_BLT_MAX; eb++)
						{
							if(enemy_blt[em][eb].active == 0)//無効な弾
							{
								enemy_blt[em][eb].active = 1;//弾の表示
								enemy_blt[em][eb + 1].active = 1;//弾の表示
								enemy_blt[em][eb + 2].active = 1;//弾の表示
								//敵の中央に表示させる
								enemy_blt[em][eb].gPos.x = enemy[em].gPos_te.x + 10;
								enemy_blt[em][eb].gPos.y = enemy[em].gPos_te.y + 20;

								enemy_blt[em][eb + 1].gPos.x = enemy[em].gPos_te.x + 40;
								enemy_blt[em][eb + 1].gPos.y = enemy[em].gPos_te.y + 20;

								enemy_blt[em][eb + 2].gPos.x = enemy[em].gPos_te.x + 70;
								enemy_blt[em][eb + 2].gPos.y = enemy[em].gPos_te.y + 20;
								//敵の弾の発射を抑制
								enemy[em].shot_wait = 20;//発射を抑制するフレーム数
								break;
							}
						}
					}
				}
			}
		}


			//--------------------------------------------------------------------------------------
			//敵用弾の移動
			//-----------------------------------------

			// for文で弾の数だけやる
			for(int em = 0;em < ENEMY_MAX; em++)
			{
				if(enemy[em].active_te == 1)
				{
					for (int eb = 0; eb < ENEMY_BLT_MAX; eb++)
					{
						if(enemy_blt[em][eb].active == 1)
						{
							switch(enemy_blt[em][eb].type)
							{
							case 0://
								// 弾の座標はbullet構造体の中に入れる
								enemy_blt[em][eb].gPos.y += ENEMY_BLT_SPEED;//弾の座標を増やす
								if(enemy_blt[em][eb].gPos.y > 640)
								{
									enemy_blt[em][eb].gPos.y = enemy[em].gPos_te.y;
									enemy_blt[em][eb].active = 0;
								}
								break;
							case 1://
								break;
							}
						}
					}
				}
			}

			//--------------------------------------------------------------------------------------
			//敵用の弾と自機の当たり判定
			//-----------------------------------------
			for(int eb = 0;eb < ENEMY_BLT_MAX;eb++)
			{
				for(int em = 0;em < ENEMY_MAX; em++)
				{
					if( enemy_blt[em][eb].active == 1)//有効な弾だけ
					{
						for(int j = 0;j < MYSHIP;j++)
						{
							if(myship[0].active == 1)//有効な自機
							{
								//自機に当たったら、敵用の弾と自機を消す
								if(enemy_blt[em][eb].gPos.x > myship[0].gPos.x + 5)
								{
									if(enemy_blt[em][eb].gPos.x < myship[0].gPos.x + 55)
									{
										if(enemy_blt[em][eb].gPos.y >  myship[0].gPos.y + 15)
										{
											if(enemy_blt[em][eb].gPos.y <  myship[0].gPos.y + 50)
											{
												enemy_blt[em][eb].active = 0;//敵用の弾を非表示
												Life -= 2;//自機の体力から一定の数値を引く
												if(Life <= 0)
												{
													gamemode = 3;
												}
											}
										}
									}
								}
							}
						}
					}
				}
			}

			//敵の弾が自機に当たって自機が消えたら今までの弾も非表示
			for(int eb = 0; eb < ENEMY_BLT_MAX;eb++)
			{
				for(int em = 0;em < ENEMY_MAX; em++)
				{
					if(myship[0].active == 0 && enemy_blt[em][eb].active == 0)
					{
						for(int b = 0;b < BULLET_MAX;b++)
						{
							bullets[b].active = 0;//弾を非表示
						}
					}
				}
			}

		//--------------------------------------------------------------------------------------
		//ボスの出現
		//---------------------------------------
			if(count_e >= Stage * 4)
			{
				 for(int em = 0;em< ENEMY_MAX;em++)
				 {
					 enemy[em].active_te = 0;
					 for(int eb = 0;eb < ENEMY_BLT_MAX;eb++)
					 {
						 enemy_blt[em][eb].active = 0;
					 }
				 }
				for(int bb = 0;bb < BOSS_BLT_MAX; bb++)
				{
					for(int bm = 0;bm < BOSS_MAX;bm++)
					{
						enemy_boss[bm].active = 1;
						enemy_boss[bm].type = 0;
					}
				}
			}

			//ボスの移動処理
			for(int bm = 0;bm < BOSS_MAX;bm++)
			{
				if(enemy_boss[bm].active == 1)
				{
					//一定値をマイナスし、座標を移動させる。
					enemy_boss[bm].gPos.x -= BOSS_SPEED;
					if(enemy_boss[bm].gPos.x <= -100)
					{
						//画面外に出たら、右の位置に戻してあげる（画像の大きさに合わせて少し多め）
						enemy_boss[bm].gPos.x = 700;
					}
				}
			}

			//--------------------------------------------------------------------------------------
			//ボス用弾の発射
			//-----------------------------------------
	 
			for(int bm = 0;bm < BOSS_MAX; bm++)
			{
				if(enemy_boss[bm].active == 1)
				{
					 //  弾の発射待ち？
					if( enemy_boss[bm].shot_wait > 0 )
					{
						enemy_boss[bm].shot_wait--;//発射しない
					}
					else
					{
						for (int bb = 0; bb < BOSS_BLT_MAX; bb++)
						{
							if(boss_blt[bb][bm].active == 0)//無効な弾
							{
								boss_blt[bb][bm].active = 1;//弾の表示
								//敵の中央に表示させる
								boss_blt[bb][bm].gPos.x = enemy_boss[bm].gPos.x + 45;
								boss_blt[bb][bm].gPos.y = enemy_boss[bm].gPos.y + 130;
								//敵の弾の発射を抑制
								enemy_boss[bm].shot_wait = 20;//発射を抑制するフレーム数
								break;
							}
							if(boss_blt2[bb][bm].active == 0)//無効な弾
							{
								boss_blt2[bb][bm].active = 1;//弾の表示
								//敵の中央に表示させる
								boss_blt2[bb][bm].gPos.x = enemy_boss[bm].gPos.x + 15;
								boss_blt2[bb][bm].gPos.y = enemy_boss[bm].gPos.y + 110;
								//敵の弾の発射を抑制
								enemy_boss[bm].shot_wait = 20;//発射を抑制するフレーム数
								break;
							}
							if(boss_blt3[bb][bm].active == 0)//無効な弾
							{
								boss_blt3[bb][bm].active = 1;//弾の表示
								//敵の中央に表示させる
								boss_blt3[bb][bm].gPos.x = enemy_boss[bm].gPos.x + 75;
								boss_blt3[bb][bm].gPos.y = enemy_boss[bm].gPos.y + 110;
								//敵の弾の発射を抑制
								enemy_boss[bm].shot_wait = 20;//発射を抑制するフレーム数
								break;
							}
						}
					}
				}
			}
			//--------------------------------------------------------------------------------------
			//ボス用弾の移動
			//-----------------------------------------

			// for文で弾の数だけやる
			for(int bm = 0;bm < BOSS_MAX; bm++)
			{
				if(enemy_boss[bm].active == 1)
				{
					for (int bb = 0; bb < BOSS_BLT_MAX; bb++)
					{
						if(boss_blt[bb][bm].active == 1)
						{
							switch(boss_blt[bb][bm].type)
							{
							case 0://
								// 弾の座標はbullet構造体の中に入れる
								boss_blt[bb][bm].gPos.y += BOSS_BLT_SPEED + Stage;//弾の座標を増やす
								if(boss_blt[bb][bm].gPos.y > 640)
								{
									boss_blt[bb][bm].gPos.y = enemy_boss[bm].gPos.y;
									boss_blt[bb][bm].active = 0;
								}
								// 弾の座標はbullet構造体の中に入れる
								boss_blt2[bb][bm].gPos.y += BOSS_BLT_B_SPEED;//弾の座標を増やす
								if(boss_blt2[bb][bm].gPos.y > 640)
								{
									boss_blt2[bb][bm].gPos.y = enemy_boss[bm].gPos.y;
									boss_blt2[bb][bm].active = 0;
								}
								// 弾の座標はbullet構造体の中に入れる
								boss_blt3[bb][bm].gPos.y += BOSS_BLT_C_SPEED;//弾の座標を増やす
								if(boss_blt3[bb][bm].gPos.y > 640)
								{
									boss_blt3[bb][bm].gPos.y = enemy_boss[bm].gPos.y;
									boss_blt3[bb][bm].active = 0;
								}
								break;
							case 1://
								break;
							}
						}
					}
				}
			}
			//--------------------------------------------------------------------------------------
			//ボス用の弾と自機の当たり判定
			//-----------------------------------------
			for(int bb = 0;bb < BOSS_BLT_MAX;bb++)
			{
				for(int bm = 0;bm < BOSS_MAX; bm++)
				{
					if( boss_blt[bb][bm].active == 1)//有効な弾だけ
					{
						for(int j = 0;j < MYSHIP;j++)
						{
							if(myship[0].active == 1)//有効な自機
							{
								//自機に当たったら、ボス用の弾と自機を消す
								if(boss_blt[bb][bm].gPos.x > myship[0].gPos.x + 5)
								{
									if(boss_blt[bb][bm].gPos.x < myship[0].gPos.x + 55)
									{
										if(boss_blt[bb][bm].gPos.y >  myship[0].gPos.y + 15)
										{
											if(boss_blt[bb][bm].gPos.y <  myship[0].gPos.y + 50)
											{
												boss_blt[bb][bm].active = 0;//ボス用の弾を非表示
												Life -= 4;//自機の体力から一定の数値を引く
												if(Life <= 0)
												{
													gamemode = 3;//体力が無くなったらゲームオーバー画面に移動させる
												}
											}
										}
									}
								}
							}
						}
					}
				}
			}
			//--------------------------------------------------------------------------------------
			//ボス用の弾と自機の当たり判定
			//-----------------------------------------
			for(int bb = 0;bb < BOSS_BLT_MAX;bb++)
			{
				for(int bm = 0;bm < BOSS_MAX; bm++)
				{
					if( boss_blt2[bb][bm].active == 1)//有効な弾だけ
					{
						for(int j = 0;j < MYSHIP;j++)
						{
							if(myship[0].active == 1)//有効な自機
							{
								//自機に当たったら、ボス用の弾と自機を消す
								if(boss_blt2[bb][bm].gPos.x > myship[0].gPos.x + 5)
								{
									if(boss_blt2[bb][bm].gPos.x < myship[0].gPos.x + 55)
									{
										if(boss_blt2[bb][bm].gPos.y >  myship[0].gPos.y + 15)
										{
											if(boss_blt2[bb][bm].gPos.y <  myship[0].gPos.y + 50)
											{
												boss_blt2[bb][bm].active = 0;//ボス用の弾を非表示
												Life -= 2;//自機の体力から一定の数値を引く
												if(Life <= 0)
												{
													gamemode = 3;//体力が無くなったらゲームオーバー画面に移動させる
												}
											}
										}
									}
								}
							}
						}
					}
				}
			}
			//--------------------------------------------------------------------------------------
			//ボス用の弾と自機の当たり判定
			//-----------------------------------------
			for(int bb = 0;bb < BOSS_BLT_MAX;bb++)
			{
				for(int bm = 0;bm < BOSS_MAX; bm++)
				{
					if( boss_blt3[bb][bm].active == 1)//有効な弾だけ
					{
						for(int j = 0;j < MYSHIP;j++)
						{
							if(myship[0].active == 1)//有効な自機
							{
								//自機に当たったら、ボス用の弾と自機を消す
								if(boss_blt3[bb][bm].gPos.x > myship[0].gPos.x + 5)
								{
									if(boss_blt3[bb][bm].gPos.x < myship[0].gPos.x + 55)
									{
										if(boss_blt3[bb][bm].gPos.y >  myship[0].gPos.y + 15)
										{
											if(boss_blt3[bb][bm].gPos.y <  myship[0].gPos.y + 50)
											{
												boss_blt3[bb][bm].active = 0;//ボス用の弾を非表示
												Life -= 1;//自機の体力から一定の数値を引く
												if(Life <= 0)
												{
													gamemode = 3;//体力が無くなったらゲームオーバー画面に移動させる
												}
											}
										}
									}
								}
							}
						}
					}
				}
			}







		//--------------------------------------------------------------------------------------
		//お宝、出現条件処理
		//--------------------------------------
			//--------------------------------------------------------------------------------------
			//敵用弾の発射
			//-----------------------------------------
  
			for(int tm = 0;tm < TAKARA_MAX; tm++)
			{
				for(int tb = 0;tb < TKR_BLT_MAX;tb++)
				{
					for(int em = 0;em < ENEMY_MAX;em++)
					{
						if(takara2[tm][tb].active == 1)//無効な弾
						{
							//takara2[tm][tb].active = 1;//弾の表示
							//敵の中央に表示させる
							takara2[tm][tb].gPos.x = enemy[em].gPos_te.x + 25;
							//takara2[tm][tb].gPos.y = enemy[em].gPos_te.y + 20;
							//takara2[tm][tb].active = 0;
						}
					}
				}
			}
			//--------------------------------------------------------------------------------------
			//お宝落下移動
			//----------------------------------

				// for文で弾の数だけやる
				for(int tm = 0;tm < TAKARA_MAX; tm++)
				{
					for(int tb = 0;tb < TKR_BLT_MAX;tb++)
					{
						if(takara2[tm][tb].active == 1)//弾が有効
						{
							switch(takara2[tm][tb].type)
							{
							case 0://
								// 弾の座標はbullet構造体の中に入れる
								takara2[tm][tb].gPos.y += TKR_SPEED;//弾の座標を減らす
								takara2[tm][tb].gPos.x;//弾の座標を減らす
								if(takara2[tm][tb].gPos.y > 640)
								{
									takara2[tm][tb].active = 0;
								}
								break;
							case 1://
								break;
							}
						}
					}
				}
			//--------------------------------------------------------------------------------------
			//宝と自機の当たり判定
			//-----------------------------------------
			for(int tm = 0;tm < TAKARA_MAX; tm++)
			{
				for(int tb = 0;tb < TKR_BLT_MAX;tb++)
				{
					if( takara2[tm][tb].active == 1)//有効な弾だけ
					{
						for(int j = 0;j < MYSHIP;j++)
						{
							if(myship[0].active == 1)//有効な自機
							{
								//自機に当たったら、敵用の弾と自機を消す
								if(takara2[tm][tb].gPos.x > myship[0].gPos.x + 5)
								{
									if(takara2[tm][tb].gPos.x < myship[0].gPos.x + 55)
									{
										if(takara2[tm][tb].gPos.y >  myship[0].gPos.y + 15)
										{
											if(takara2[tm][tb].gPos.y <  myship[0].gPos.y + 50)
											{
												takara2[tm][tb].active = 0;//敵用の弾を非表示
												count_T += 1;//お宝の数をカウント＋１
											}
										}
									}
								}
							}
						}
					}
				}
			}
			/*if(gamemode == 4)
			{
				for(int tm = 0;tm < TAKARA_MAX;tm++)
				{
					if(Life >= 40)
					{
						switch(takara[tm].type)
						{
						case 0://
							takara[tm].active = 1;
							takara2[tm].active = 1;
							break;
						}
					}
					if(Life < 40 && Life > 30)
					{
						switch(takara[tm].type)
						{
						case 0://
							takara[tm].active = 1;
							break;
						}
					}
					if(Life <= 29)
					{
						switch(takara[tm].type)
						{
						case 0://
							takara[tm].active = 1;
							break;
						}
					}
				}
			}*/





			//--------------------------------------------------------------------------------------
			//背景のスクロール
			//---------------------------------------
			//（これが無いとシューティングっぽくは見えないので、追加させる）
			gPos_map.y++;
			if(gPos_map.y >= 480)
			{
				gPos_map.y = -480;
			}
			gPos_map_a.y++;
			if(gPos_map_a.y >= 480)
			{
				gPos_map_a.y = -480;
			}

			//--------------------------------------------------------------------------------------
			//得点
			//---------------------------------------
			if(score > Hi_score)
			{
				Hi_score = score;
			}


			//--------------------------------------------------------------------------------------
			//得点
			//---------------------------------------
			/*if(score >= 2000)//ある一定の得点を超えたらクリア画面にする
			{
				gamemode = 2;
			}*/
			//--------------------------------------------------------------------------------------
			//ゲームクリア判定
			//---------------------------------------
			if(Stage >= 4 && gamemode == 4)
			{
				gamemode = 2;
			}



			//--------------------------------------------------------------------------------------
			//マトリクスを作成
			//---------------------------------------

			 //背景画像も動かないようにMatrix関数で固定させる。
			//＜matrix_te用＝背景画像＞
			//移動行列を作成
			D3DXMatrixTranslation( &matrix_back,0,0,0);
			//背景画像も動かないようにMatrix関数で固定させる。
			//＜matrix_te用＝背景画像＞
			//移動行列を作成
			D3DXMatrixTranslation( &matrix_back_a,0,0,0);

			//宝
			for(int tm = 0;tm < TAKARA_MAX;tm++)
			{
				for(int tb = 0;tb < TKR_BLT_MAX; tb++)
				{
					if(takara2[tm][tb].active == 1)
					{
						//移動行列を作成
						D3DXMatrixTranslation( &takara2[tm][tb].matrix,takara2[tm][tb].gPos.x,takara2[tm][tb].gPos.y,0);
					}
				}
			}


			// for文で弾の数だけまとめてMatrix計算する
			for(int b = 0;b < BULLET_MAX; b++)
			{
				//＜matrix用＝弾＞
				//移動行列を作成
				D3DXMatrixTranslation( &bullets[b].matrix,bullets[b].gPos_tm.x,bullets[b].gPos_tm.y,0);
			}

			for(int i = 0;i < MYSHIP;i++)
			{
				//＜matrix_ji用＝自機＞
				//移動行列を作成
				D3DXMatrixTranslation( &myship[i].matrix,myship[i].gPos.x,myship[i].gPos.y,0);
			}

			for(int em = 0;em < ENEMY_MAX; em++)
			{
				//＜matrix_te用＝敵＞
				//移動行列を作成
				D3DXMatrixTranslation( &enemy[em].matrix_te,enemy[em].gPos_te.x,enemy[em].gPos_te.y,0);
			}


			//敵の弾を敵弾の数だけ
			for(int eb = 0;eb < ENEMY_BLT_MAX; eb++)
			{
				for(int em = 0;em < ENEMY_MAX; em++)
				{
					//＜matrix_te用＝敵＞
					//移動行列を作成
					D3DXMatrixTranslation( &enemy_blt[em][eb].matrix,enemy_blt[em][eb].gPos.x,enemy_blt[em][eb].gPos.y,0);
				}
			}

			//ボス的な存在
			for(int bm = 0;bm < BOSS_MAX; bm++)
			{
				//＜matrix_te用＝敵＞
				//移動行列を作成
				D3DXMatrixTranslation( &enemy_boss[bm].matrix,enemy_boss[bm].gPos.x,enemy_boss[bm].gPos.y,0);
			}

			//ボス用の弾
			for(int bb = 0;bb < BOSS_BLT_MAX; bb++)
			{
				for(int bm = 0;bm < BOSS_MAX; bm++)
				{
					//＜matrix_te用＝敵＞
					//移動行列を作成
					D3DXMatrixTranslation( &boss_blt[bb][bm].matrix,boss_blt[bb][bm].gPos.x,boss_blt[bb][bm].gPos.y,0);
				}
			}
			//ボス用の弾
			for(int bb = 0;bb < BOSS_BLT_MAX; bb++)
			{
				for(int bm = 0;bm < BOSS_MAX; bm++)
				{
					//＜matrix_te用＝敵＞
					//移動行列を作成
					D3DXMatrixTranslation( &boss_blt2[bb][bm].matrix,boss_blt2[bb][bm].gPos.x,boss_blt2[bb][bm].gPos.y,0);
				}
			}
			//ボス用の弾
			for(int bb = 0;bb < BOSS_BLT_MAX; bb++)
			{
				for(int bm = 0;bm < BOSS_MAX; bm++)
				{
					//＜matrix_te用＝敵＞
					//移動行列を作成
					D3DXMatrixTranslation( &boss_blt3[bb][bm].matrix,boss_blt3[bb][bm].gPos.x,boss_blt3[bb][bm].gPos.y,0);
				}
			}
		}


		break;
    case 2://【ゲームクリア画面】

        if(gamemode == 2)
        {
            score = 0;
            for(int em = 0;em < ENEMY_MAX;em++)
            {
                if(KEY_RETURN == PUSH)
                {
                    //タイトル画面に戻す
                    gamemode = 0;
                    for(int eb = 0;eb < ENEMY_BLT_MAX;eb++)
					{
						for(int em = 0;em < ENEMY_MAX; em++)
						{
							//初期設定に戻す
							//敵１
							enemy[em].gPos_te.x = -80;
							enemy[em].gPos_te.y = 50;
							//敵用の弾
							enemy_blt[em][eb].gPos.x = 280;
							enemy_blt[em][eb].gPos.y = 430;
							//自機
							myship[em].gPos.x = 280;
							myship[em].gPos.y = 420;
							for(int b = 0;b < BULLET_MAX;b++)
							{
								bullets[em].active = 0;
							}
						}
					}
					for(int bb = 0;bb < BOSS_BLT_MAX;bb++)
					{
						for(int bm = 0;bm < BOSS_MAX;bm++)
						{
							boss_blt[bb][bm].active = 0;
							boss_blt2[bb][bm].active = 0;
							boss_blt3[bb][bm].active = 0;
						}
					}
					for(int bm = 0;bm < BOSS_MAX;bm++)
					{
						enemy_boss[bm].active = 0;
					}
                    //体力（ライフ）
                    Life = 50;
					Boss_L = 20;
					gPos_map.x = 0;
					gPos_map.y = 0;
					gPos_map_a.x = 0;
					gPos_map_a.y = -480;
					count_e = 0;
					score = 0;
                }
            }
        }
        break;
    case 3://【ゲームオーバー画面】
        if(gamemode == 3)
        {
            score = 0;
            for(int em = 0;em < ENEMY_MAX;em++)
            {
                if(KEY_RETURN == PUSH)
                {
                    //タイトル画面に戻す
                    gamemode = 0;
                    for(int eb = 0;eb < ENEMY_BLT_MAX;eb++)
					{
						for(int em = 0;em < ENEMY_MAX; em++)
						{
							//初期設定に戻す
							//敵１
							enemy[em].gPos_te.x = -80;
							enemy[em].gPos_te.y = 50;
							//敵用の弾
							enemy_blt[em][eb].gPos.x = 280;
							enemy_blt[em][eb].gPos.y = 430;
							//自機
							myship[em].gPos.x = 280;
							myship[em].gPos.y = 420;
							for(int b = 0;b < BULLET_MAX;b++)
							{
								bullets[em].active = 0;
							}
						}
					}
					for(int bb = 0;bb < BOSS_BLT_MAX;bb++)
					{
						for(int bm = 0;bm < BOSS_MAX;bm++)
						{
							boss_blt[bb][bm].active = 0;
							boss_blt2[bb][bm].active = 0;
							boss_blt3[bb][bm].active = 0;
						}
					}
					for(int bm = 0;bm < BOSS_MAX;bm++)
					{
						enemy_boss[bm].active = 0;
					}
                    //体力（ライフ）
                    Life = 50;
					Boss_L = 20;
					gPos_map.x = 0;
					gPos_map.y = 0;
					gPos_map_a.x = 0;
					gPos_map_a.y = -480;
					count_e = 0;
					score = 0;
                }
            }
        }
        break;
    case 4://【ステージクリア画面】
		if(gamemode == 4)
		{
			//宝
			/*for(int tm = 0;tm < TAKARA_MAX; tm++)
			{
				switch(takara[tm].type)
				{
				case 0://
					//移動行列を作成
					D3DXMatrixTranslation( &takara[tm].matrix,430,380,0);
					//移動行列を作成
					D3DXMatrixTranslation( &takara2[tm].matrix,470,380,0);
					break;
				case 1://
					//移動行列を作成
					D3DXMatrixTranslation( &takara[tm].matrix,450,380,0);
					break;
				case 2://
					//移動行列を作成
					D3DXMatrixTranslation( &takara[tm].matrix,takara[tm].gPos.x,takara[tm].gPos.y,0);
					break;
				}
			}*/
			if(KEY_RETURN == PUSH)
            {
                //ネクスト画面に移動
                gamemode = 5;
                for(int eb = 0;eb < ENEMY_BLT_MAX;eb++)
				{
					for(int em = 0;em < ENEMY_MAX; em++)
					{
						//初期設定に戻す
						//敵１
						enemy[em].gPos_te.x = -80;
						enemy[em].gPos_te.y = 50;
						//敵用の弾
						enemy_blt[em][eb].gPos.x = 280;
						enemy_blt[em][eb].gPos.y = 430;
						//自機
						myship[em].gPos.x = 280;
						myship[em].gPos.y = 420;
						for(int b = 0;b < BULLET_MAX;b++)
						{
							bullets[em].active = 0;
						}
					}
				}
				for(int bb = 0;bb < BOSS_BLT_MAX;bb++)
				{
					for(int bm = 0;bm < BOSS_MAX;bm++)
					{
						boss_blt[bb][bm].active = 0;
						boss_blt2[bb][bm].active = 0;
						boss_blt3[bb][bm].active = 0;
					}
				}
				for(int bm = 0;bm < BOSS_MAX;bm++)
				{
					enemy_boss[bm].active = 0;
				}
            }
		}
        break;
	case 5://
		if(KEY_RETURN == PUSH)
        {
			//ゲーム画面に移動
            gamemode = 1;
			//ステージクリアのため初期化設定ではスコアは除く。
            Life = 50 + (Stage * 10);//ライフを回復＋ステージクリアボーナスとして一定数値増加
			Boss_L = 20;//ボスの体力
			gPos_map.x = 0;
			gPos_map.y = 0;
			gPos_map_a.x = 0;
			gPos_map_a.y = -480;
			Stage += 1;//ステージ数増加
		}
		break;
	case 6://
		break;
	case 7://
		break;
	}
}



//--------------------------------------------------------------------------------------
// Render the scene
//--------------------------------------------------------------------------------------
void CALLBACK OnFrameRender( IDirect3DDevice9* pd3dDevice, double fTime, float fElapsedTime, void* pUserContext )
{
    HRESULT hr;

    // Clear the render target and the zbuffer 
    V( pd3dDevice->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_ARGB(0, 0, 128, 255), 1.0f, 0) );

    // Render the scene
    if( SUCCEEDED( pd3dDevice->BeginScene() ) )
    {
        //ここから描画処理を行う

        //スプライトの開始
        pSprite->Begin(D3DXSPRITE_ALPHABLEND);

        switch(gamemode)
        {
        case 0://【タイトル画面】

			//タイトル画像
			//テクスチャの表示領域
			RECT	rect_title_back;
			SetRect(&rect_title_back,0,0,512,256);
			//テクスチャの描画前に行列をセットする
			pSprite->SetTransform(&matrix_title_back);
			//スプライトで２Ｄ描画＝背景
			pSprite->Draw( pText_title_back,&rect_title_back,NULL,NULL,D3DCOLOR_ARGB(255,255,255,255));

			//タイトル画像
			//テクスチャの表示領域
			RECT	rect_title;
			SetRect(&rect_title,0,0,355,215);
			//テクスチャの描画前に行列をセットする
			pSprite->SetTransform(&matrix_title);
			//スプライトで２Ｄ描画＝背景
			pSprite->Draw( pText_title,&rect_title,NULL,&gPos_title,D3DCOLOR_ARGB(255,255,255,255));



            /*//ロゴ００１
            //テクスチャの表示領域
            RECT    rect_logo_a;
            SetRect(&rect_logo_a,0,0,640,480);
            //テクスチャの描画前に行列をセットする
            pSprite->SetTransform(&matrix_logo_a);
            //スプライトで２Ｄ描画＝自機
            pSprite->Draw( pText_logo_a,&rect_logo_a,NULL,&gPos_logo_a,D3DCOLOR_ARGB(255,255,255,255));*/

			//ハイスコア背面画像（１枚しかないので、if文で指定しない）
			//テクスチャの表示領域
			RECT	rect_back_sc;
			SetRect(&rect_back_sc,0,0,270,100);
			//テクスチャの描画前に行列をセットする
			pSprite->SetTransform(&matrix_back_sc);
			//スプライトで２Ｄ描画＝背景
			pSprite->Draw( pText_back_sc,&rect_back_sc,NULL,&gPos_sc,D3DCOLOR_ARGB(255,255,255,255));


            break;
        case 1://【ゲーム画面】

            //背景画像（１枚しかないので、if文で指定しない）
            //テクスチャの表示領域
            RECT    rect_back;
            SetRect(&rect_back,0,0,640,480);
            //テクスチャの描画前に行列をセットする
            pSprite->SetTransform(&matrix_back);
            //スプライトで２Ｄ描画＝背景
            pSprite->Draw( pText_back,&rect_back,NULL,&gPos_map,D3DCOLOR_ARGB(255,255,255,255));

			//背景画像（１枚しかないので、if文で指定しない）
            //テクスチャの表示領域
            RECT    rect_back_a;
            SetRect(&rect_back_a,0,0,640,480);
            //テクスチャの描画前に行列をセットする
            pSprite->SetTransform(&matrix_back_a);
            //スプライトで２Ｄ描画＝背景
            pSprite->Draw( pText_back_a,&rect_back_a,NULL,&gPos_map_a,D3DCOLOR_ARGB(255,255,255,255));

			////////////////////////////////////////////
			//自機用
            for(int i = 0;i < MYSHIP;i++)
            {
                if(myship[i].active == 1)
                {
                    //自機
                    //テクスチャの表示領域
                    RECT    rect_tex;
                    SetRect(&rect_tex,0,0,60,60);
                    //テクスチャの描画前に行列をセットする
                    pSprite->SetTransform(&myship[i].matrix);
                    //スプライトで２Ｄ描画＝自機
                    pSprite->Draw( pTexture,&rect_tex,NULL,NULL,D3DCOLOR_ARGB(255,255,255,255));
                }
            }
			////////////////////////////////////////////
			//自機用の弾
            for(int b = 0;b < BULLET_MAX; b++)
            {
                if(bullets[b].active == 1)
                {
                    //弾
                    //テクスチャの表示領域
                    RECT    rect_tex_ta;
                    SetRect(&rect_tex_ta,0,0,10,10);
                    //テクスチャの描画前に行列にセットする
                    pSprite->SetTransform(&bullets[b].matrix);
                    //中心をセット
                    D3DXVECTOR3 center_ta = D3DXVECTOR3(10.f / 2.f,10.f / 2.f,0.f);
                    //スプライトで２Ｄ描画＝弾
                    pSprite->Draw( pText_tama,&rect_tex_ta,&center_ta,NULL,D3DCOLOR_ARGB(255,255,255,255));
                }
            }
			////////////////////////////////////////////
			//敵用
            for(int em = 0;em < ENEMY_MAX; em++)
            {
                if( enemy[em].active_te == 1)
                {
                    //敵
                    //テクスチャの表示領域
                    RECT    rect_tex_te;
                    SetRect(&rect_tex_te,0,0,70,35);
                    //テクスチャの描画前に行列にセットする
                    pSprite->SetTransform(&enemy[em].matrix_te);
                    //スプライトで２Ｄ描画＝敵
                    pSprite->Draw( pText_teki,&rect_tex_te,NULL,NULL,D3DCOLOR_ARGB(255,255,255,255));
                }
            }
			////////////////////////////////////////////
			//敵用の弾　３
            for(int eb = 0;eb < ENEMY_BLT_MAX; eb++)
            {
                for(int em = 0;em < ENEMY_MAX; em++)
                {
                    if( enemy_blt[em][eb].active == 1)
                    {
                        //敵用の弾
                        //テクスチャの表示領域
                        RECT    rect_tex_teta;
                        SetRect(&rect_tex_teta,0,0,12,12);
                        //テクスチャの描画前に行列にセットする
                        pSprite->SetTransform(&enemy_blt[em][eb].matrix);
                        //スプライトで２Ｄ描画＝敵の弾
                        pSprite->Draw( pText_teta,&rect_tex_teta,NULL,NULL,D3DCOLOR_ARGB(255,255,255,255));
                    }
                }
            }
			////////////////////////////////////////////
			//ボス用
			for(int bm = 0;bm < BOSS_MAX; bm++)
			{
				if( enemy_boss[bm].active == 1)
				{
					//ボス用
					//テクスチャの表示領域
					RECT	rect_tex_boss;
					SetRect(&rect_tex_boss,0,0,100,150);
					//テクスチャの描画前に行列にセットする
					pSprite->SetTransform(&enemy_boss[bm].matrix);
					//スプライトで２Ｄ描画＝ボス
					pSprite->Draw( pText_boss,&rect_tex_boss,NULL,NULL,D3DCOLOR_ARGB(255,255,255,255));
				}
			}
			////////////////////////////////////////////
			//ボス用の弾　１
			for(int bb = 0;bb < BOSS_BLT_MAX; bb++)
			{
				for(int bm = 0;bm < BOSS_MAX; bm++)
				{
					if( boss_blt[bb][bm].active == 1)
					{
						//ボス用の弾
						//テクスチャの表示領域
						RECT	rect_boss_ta;
						SetRect(&rect_boss_ta,0,0,12,22);/*(14,14)*/
						//テクスチャの描画前に行列にセットする
						pSprite->SetTransform(&boss_blt[bb][bm].matrix);
						//スプライトで２Ｄ描画＝ボス弾
						pSprite->Draw( pText_boss_ta,&rect_boss_ta,NULL,NULL,D3DCOLOR_ARGB(255,255,255,255));
					}
				}
			}
			////////////////////////////////////////////
			//ボス用の弾　２
			for(int bb = 0;bb < BOSS_BLT_MAX; bb++)
			{
				for(int bm = 0;bm < BOSS_MAX; bm++)
				{
					if( boss_blt2[bb][bm].active == 1)
					{
						//ボス用の弾
						//テクスチャの表示領域
						RECT	rect_boss_ta2;
						SetRect(&rect_boss_ta2,0,0,12,22);
						//テクスチャの描画前に行列にセットする
						pSprite->SetTransform(&boss_blt2[bb][bm].matrix);
						//スプライトで２Ｄ描画＝ボス弾２
						pSprite->Draw( pText_boss_ta2,&rect_boss_ta2,NULL,NULL,D3DCOLOR_ARGB(255,255,255,255));
					}
				}
			}
			////////////////////////////////////////////
			//ボス用の弾　３
			for(int bb = 0;bb < BOSS_BLT_MAX; bb++)
			{
				for(int bm = 0;bm < BOSS_MAX; bm++)
				{
					if( boss_blt3[bb][bm].active == 1)
					{
						//ボス用の弾
						//テクスチャの表示領域
						RECT	rect_boss_ta2;
						SetRect(&rect_boss_ta2,0,0,12,22);
						//テクスチャの描画前に行列にセットする
						pSprite->SetTransform(&boss_blt3[bb][bm].matrix);
						//スプライトで２Ｄ描画＝ボス弾３
						pSprite->Draw( pText_boss_ta2,&rect_boss_ta2,NULL,NULL,D3DCOLOR_ARGB(255,255,255,255));
					}
				}
			}


			//アイテム
			for(int tm = 0;tm < TAKARA_MAX; tm++)
			{
				for(int tb = 0;tb < TKR_BLT_MAX; tb++)
				{
					//ボス用の弾
					//テクスチャの表示領域
					RECT	rect_takara1;
					SetRect(&rect_takara1,0,0,36,27);
					//テクスチャの描画前に行列にセットする
					pSprite->SetTransform(&takara2[tm][tb].matrix);
					//スプライトで２Ｄ描画＝宝
					pSprite->Draw( pText_takara1,&rect_takara1,NULL,NULL,D3DCOLOR_ARGB(255,255,255,255));
				}
			}



            break;
        case 2://【ゲームクリア画面】
            break;
        case 3://【ゲームオーバー画面】
            break;
        case 4://【ステージクリア画面】
			//アイテム
			/*for(int tm = 0;tm < TAKARA_MAX; tm++)
			{
				switch(takara[tm].type)
				{
				case 0://
					if( takara[tm].active == 1)
					{
						//ボス用の弾
						//テクスチャの表示領域
						RECT	rect_takara1;
						SetRect(&rect_takara1,0,0,36,27);
						//テクスチャの描画前に行列にセットする
						pSprite->SetTransform(&takara[tm].matrix);
						//スプライトで２Ｄ描画＝宝
						pSprite->Draw( pText_takara1,&rect_takara1,NULL,NULL,D3DCOLOR_ARGB(255,255,255,255));
						//ボス用の弾
						//テクスチャの表示領域
						//RECT	rect_takara1;
						SetRect(&rect_takara1,0,0,36,27);
						//テクスチャの描画前に行列にセットする
						pSprite->SetTransform(&takara2[tm][tb].matrix);
						//スプライトで２Ｄ描画＝宝
						pSprite->Draw( pText_takara1,&rect_takara1,NULL,NULL,D3DCOLOR_ARGB(255,255,255,255));
					}
					break;
				case 1://
					if( takara[tm].active == 1)
					{
						//ボス用の弾
						//テクスチャの表示領域
						RECT	rect_takara1;
						SetRect(&rect_takara1,0,0,19,19);
						//テクスチャの描画前に行列にセットする
						pSprite->SetTransform(&takara[tm].matrix);
						//スプライトで２Ｄ描画＝宝
						pSprite->Draw( pText_takara2,&rect_takara1,NULL,NULL,D3DCOLOR_ARGB(255,255,255,255));
					}
					break;
				case 2://
					if( takara[tm].active == 1)
					{
						//テクスチャの表示領域
						RECT	rect_takara1;
						SetRect(&rect_takara1,0,0,18,13);
						//テクスチャの描画前に行列にセットする
						pSprite->SetTransform(&takara[tm].matrix);
						//スプライトで２Ｄ描画＝宝
						pSprite->Draw( pText_takara3,&rect_takara1,NULL,NULL,D3DCOLOR_ARGB(255,255,255,255));
					}
					break;
				}
			}*/
            break;
		case 5://【ネクストステージ画面】
            break;
        }

        //スプライトの終了
        pSprite->End();


        switch(gamemode)
        {
        case 0://【タイトル画面】
            //========================================
            //各フォント
            //========================================

            /*//フォント１
            RECT rectf;                             //フォント位置を保持する構造体変数
            SetRect ( &rectf,10,100,640,480);       //変数への位置セット
            //フォントの描画
            pFont -> DrawText(NULL,                 //標準機能で描画
                _T("ここにタイトル画面が入ります！！"),//表示文字列
                -1,                                     //表示文字数
                &rectf,                                 //表示位置
                NULL,                                   //表示スタイル
                D3DCOLOR_ARGB(255,255,255,255));        //表示色*/


            //フォント１
            RECT rectq;                             //フォント位置を保持する構造体変数
            SetRect ( &rectq,120,380,640,480);		//変数への位置セット
            //フォントの描画
            pFont -> DrawText(NULL,                 //標準機能で描画
                _T("〔Ｓ〕キーで　ＧＡＭＥ　ＳＴＡＲＴ！！"), //表示文字列
                -1,                                   //表示文字数
                &rectq,                               //表示位置
                NULL,                                 //表示スタイル
                D3DCOLOR_ARGB(255,255,0,0));          //表示色

			//フォント１
            RECT recti;                             //フォント位置を保持する構造体変数
            SetRect ( &recti,10,250,640,480);       //変数への位置セット
            //フォントの描画
            pFont -> DrawText(NULL,                 //標準機能で描画
                _T("操作方法\n〔↑↓→←〕キーで自機の移動\n〔SPACE〕キーで弾が発射出来ます。\nあとは、敵の弾を交わしながら、ステージを進むだけ(^^♪"), //表示文字列
                -1,                                     //表示文字数
                &recti,                                 //表示位置
                NULL,                                   //表示スタイル
                D3DCOLOR_ARGB(255,0,0,0));          //表示色
 
 
            /*//フォント１
            RECT rectcp;                            //フォント位置を保持する構造体変数
            SetRect ( &rectcp,0,420,640,480);       //変数への位置セット
            //フォントの描画
            pFontg -> DrawText(NULL,                //標準機能で描画
            _T("Copyright(C)"),                     //表示文字列
            -1,                                     //表示文字数
            &rectcp,                                //表示位置
            NULL,                                   //表示スタイル
            D3DCOLOR_ARGB(255,255,50,50));          //表示色*/




            //----------------------
            //得点（最高得点）
            //---------------

            //フォント３
            RECT recth;                             //フォント位置を保持する構造体変数
            SetRect ( &recth,400,10,640,480);       //変数への位置セット
            //フォントの描画
            pFontf -> DrawText(NULL,                //標準機能で描画
                _T("HI-SCORE"),                     //表示文字列
                -1,                                 //表示文字数
                &recth,                             //表示位置
                NULL,                               //表示スタイル
                D3DCOLOR_ARGB(255,0,0,0));          //表示色

            //変数内容の表示
            TCHAR str_hi[255];
            _stprintf(str_hi,_T("%08d"),Hi_score);
            RECT rect_hi;
            SetRect(&rect_hi,420,30,640,480);
            pFontc->DrawText(NULL,str_hi,-1,&rect_hi,NULL,D3DCOLOR_ARGB(255,0,180,0));
            break;

        case 1://【ゲーム画面】


			if(enemy_boss[0].active == 0)
			{
				//フォント
				RECT rect_ef;								//フォント位置を保持する構造体変数
				SetRect ( &rect_ef,480,30,640,480);         //変数への位置セット
				//フォントの描画
				pFont -> DrawText(NULL,						//標準機能で描画
					_T("BREAK"),                            //表示文字列
					-1,                                     //表示文字数
					&rect_ef,                               //表示位置
					NULL,                                   //表示スタイル
					D3DCOLOR_ARGB(255,255,255,255));        //表示色


				//変数内容の表示
				TCHAR str_e[255];
				_stprintf(str_e,_T("%02d"),count_e);
				RECT rect_e;
				SetRect(&rect_e,590,27,640,480);
				pFontc->DrawText(NULL,str_e,-1,&rect_e,NULL,D3DCOLOR_ARGB(255,0,180,0));
			}
 
            //----------------------
            //得点（スコア）
            //---------------
 
            //フォント３
            RECT rectfc;								//フォント位置を保持する構造体変数
            SetRect ( &rectfc,370,0,640,480);			//変数への位置セット
            //フォントの描画
            pFontb -> DrawText(NULL,					//標準機能で描画
                _T("SCORE"),                            //表示文字列
                -1,                                     //表示文字数
                &rectfc,                                //表示位置
                NULL,                                   //表示スタイル
                D3DCOLOR_ARGB(255,0,255,255));          //表示色
 
            //変数内容の表示
            TCHAR str[255];
            _stprintf(str,_T("%08d"),score);
            RECT rect_ti;
            SetRect(&rect_ti,460,0,640,480);
            pFontd->DrawText(NULL,str,-1,&rect_ti,NULL,D3DCOLOR_RGBA(255,255,255,255));

	/*==========現在のＳｔａｇｅ数==========*/
			//フォント１
            RECT rect_st;							//フォント位置を保持する構造体変数
            SetRect ( &rect_st,10,2,640,480);		//変数への位置セット
            //フォントの描画
            pFontb -> DrawText(NULL,				 //標準機能で描画
                _T("STAGE"),                         //表示文字列
                -1,                                  //表示文字数
                &rect_st,                            //表示位置
                NULL,                                //表示スタイル
                D3DCOLOR_ARGB(255,255,255,0));       //表示
            //フォント１
            //変数内容の表示
            TCHAR str_st[255];
            _stprintf(str_st,_T("%02d"),Stage);
            RECT rect_st1;
            SetRect(&rect_st1,100,0,640,480);
            pFontd->DrawText(NULL,str_st,-1,&rect_st1,NULL,D3DCOLOR_ARGB(255,0,255,100));

	/*==========自機用のライフ==========*/
            //フォント１
            RECT rect;									//フォント位置を保持する構造体変数
            SetRect ( &rect,10,28,640,480);				//変数への位置セット
            //フォントの描画
            pFont -> DrawText(NULL,						//標準機能で描画
                _T("HP"),                             //表示文字列
                -1,                                     //表示文字数
                &rect,                                  //表示位置
                NULL,                                   //表示スタイル
                D3DCOLOR_ARGB(255,255,255,255));        //表示
            //フォント１
            //変数内容の表示
            TCHAR str_la[255];
            _stprintf(str_la,_T("%04d"),Life);
            RECT rect_la;
            SetRect(&rect_la,60,28,640,480);
            pFont->DrawText(NULL,str_la,-1,&rect_la,NULL,D3DCOLOR_ARGB(255,0,255,255));

			
	/*==========ボス用のライフ==========*/
			if(enemy_boss[0].active == 1)
			{
				//フォント１
				RECT rect_b;								//フォント位置を保持する構造体変数
				SetRect ( &rect_b,510,30,640,480);			//変数への位置セット
				//フォントの描画
				pFont -> DrawText(NULL,						//標準機能で描画
					_T("LIFE"),                             //表示文字列
					-1,                                     //表示文字数
					&rect_b,                                //表示位置
					NULL,                                   //表示スタイル
					D3DCOLOR_ARGB(255,255,255,255));        //表示
				//フォント１
				//変数内容の表示
				TCHAR str_b[255];
				_stprintf(str_b,_T("%02d"),Boss_L);
				RECT rect_bf;
				SetRect(&rect_bf,590,26,640,480);
				pFonta->DrawText(NULL,str_b,-1,&rect_bf,NULL,D3DCOLOR_ARGB(255,255,100,0));
			}

            break;
        case 2://【ゲームクリア】

            //フォント２
            RECT rectb;									//フォント位置を保持する構造体変数
            SetRect ( &rectb,10,30,640,480);			//変数への位置セット
            //フォントの描画
            pFont -> DrawText(NULL,						//標準機能で描画
                _T("ゲームクリア画面です！"),            //表示文字列
                -1,                                     //表示文字数
                &rectb,                                 //表示位置
                NULL,                                   //表示スタイル
                D3DCOLOR_ARGB(255,255,255,255));        //表示色

            //フォント
            RECT recten;								//フォント位置を保持する構造体変数
            SetRect ( &recten,10,80,640,480);			//変数への位置セット
            //フォントの描画
            pFont -> DrawText(NULL,						//標準機能で描画
                _T("〔Enter←〕でタイトル画面に！"),    //表示文字列
                -1,                                     //表示文字数
                &recten,                                //表示位置
                NULL,                                   //表示スタイル
                D3DCOLOR_ARGB(255,255,255,255));        //表示色

            break;
        case 3://【ゲームオーバー】

            //フォント２
            RECT rectc;									//フォント位置を保持する構造体変数
            SetRect ( &rectc,10,30,640,480);			//変数への位置セット
            //フォントの描画
            pFont -> DrawText(NULL,						//標準機能で描画
                _T("ゲームオーバー画面です！"),         //表示文字列
                -1,                                     //表示文字数
                &rectc,                                 //表示位置
                NULL,                                   //表示スタイル
                D3DCOLOR_ARGB(255,255,255,255));        //表示色

            //フォント
            RECT recten2;								//フォント位置を保持する構造体変数
            SetRect ( &recten2,10,80,640,480);			//変数への位置セット
            //フォントの描画
            pFont -> DrawText(NULL,						//標準機能で描画
                _T("〔Enter←〕でタイトル画面に！"),    //表示文字列
                -1,                                     //表示文字数
                &recten2,                               //表示位置
                NULL,                                   //表示スタイル
                D3DCOLOR_ARGB(255,255,255,255));        //表示色

            break;
        case 4://【ステージクリア画面】
			 //フォント１
				//変数内容の表示
				TCHAR str_sta[255];
				_stprintf(str_sta,_T("STAGE %d　CLEAR"),Stage);
				RECT rect_sta;
				SetRect(&rect_sta,190,215,640,480);
				pFonta->DrawText(NULL,str_sta,-1,&rect_sta,NULL,D3DCOLOR_ARGB(255,255,255,0));

			//フォント
            //RECT recten;								//フォント位置を保持する構造体変数
            SetRect ( &recten,10,80,640,480);			//変数への位置セット
            //フォントの描画
            pFont -> DrawText(NULL,						//標準機能で描画
                _T("〔Enter←〕でタイトル画面に！"),    //表示文字列
                -1,                                     //表示文字数
                &recten,                                //表示位置
                NULL,                                   //表示スタイル
                D3DCOLOR_ARGB(255,255,255,255));        //表示色
            break;
		case 5://【ネクストステージ画面】
				//フォント１
				//変数内容の表示
				TCHAR str_nex[255];
				_stprintf(str_nex,_T("NEXT…　STAGE %d"),Stage);
				RECT rect_nex;
				SetRect(&rect_nex,100,80,640,480);
				pFonta->DrawText(NULL,str_nex,-1,&rect_nex,NULL,D3DCOLOR_ARGB(255,0,0,255));

				//フォント
				RECT rectlc;								//フォント位置を保持する構造体変数
				SetRect ( &rectlc,150,180,640,480);			//変数への位置セット
				//フォントの描画
				pFont -> DrawText(NULL,						//標準機能で描画
					_T("ライフ全回復♪\nCLEAR BONUS  　ライフ最大値UP！！"),    //表示文字列
					-1,                                     //表示文字数
					&rectlc,                                //表示位置
					NULL,                                   //表示スタイル
					D3DCOLOR_ARGB(255,255,0,0));        //表示色

				//フォント
				//RECT recten;								//フォント位置を保持する構造体変数
				SetRect ( &recten,150,230,640,480);			//変数への位置セット
				//フォントの描画
				pFont -> DrawText(NULL,						//標準機能で描画
					_T("〔Enter←〕PUSH GO!!"),    //表示文字列
					-1,                                     //表示文字数
					&recten,                                //表示位置
					NULL,                                   //表示スタイル
					D3DCOLOR_ARGB(255,255,0,0));        //表示色
			break;
		case 6://
			break;
		case 7://
			break;
        }

        V( pd3dDevice->EndScene() );
    }
}


//--------------------------------------------------------------------------------------
// Handle messages to the application
//--------------------------------------------------------------------------------------
LRESULT CALLBACK MsgProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, 
                         bool* pbNoFurtherProcessing, void* pUserContext )
{
    return 0;
}


//--------------------------------------------------------------------------------------
// Release resources created in the OnResetDevice callback here
//--------------------------------------------------------------------------------------
void CALLBACK OnLostDevice( void* pUserContext )
{
}


//--------------------------------------------------------------------------------------
// Release resources created in the OnCreateDevice callback here
//--------------------------------------------------------------------------------------
void CALLBACK OnDestroyDevice( void* pUserContext )
{
    //----------------------------------------------------------
    //ロードした後は、解放しましょう♪
    //-------------------------------------


    //テクスチャの解放
    SAFE_RELEASE(pTexture);//自機
    SAFE_RELEASE(pText_tama);//自機用の弾
    SAFE_RELEASE(pText_teki);//敵
    SAFE_RELEASE(pText_teta);//敵用の弾
    SAFE_RELEASE(pText_back);//背景
	SAFE_RELEASE(pText_back_a);//背景
	SAFE_RELEASE(pText_back_sc);//得点背景
	SAFE_RELEASE(pText_boss);//中ボス
	SAFE_RELEASE(pText_boss_ta);//中ボス用弾
	SAFE_RELEASE(pText_boss_ta2);//中ボス用弾
	SAFE_RELEASE(pText_takara1);//宝
	SAFE_RELEASE(pText_takara2);//宝
	SAFE_RELEASE(pText_takara3);//宝
	SAFE_RELEASE(pText_title);//タイトル
	SAFE_RELEASE(pText_title_back);//タイトル背景画像
	//SAFE_RELEASE(pText_boss_tam);//中ボス用弾２
    //SAFE_RELEASE(pText_logo_a);//ロゴ００１
    //SAFE_RELEASE(pText_life);//自機ライフ用

    //スプライトの解放
    SAFE_RELEASE(pSprite);

    //  フォントの解放
    SAFE_RELEASE( pFont );
    SAFE_RELEASE( pFonta );
    SAFE_RELEASE( pFontb );
    SAFE_RELEASE( pFontc );
    SAFE_RELEASE( pFontd );
    SAFE_RELEASE( pFonte );
    SAFE_RELEASE( pFontf );
    SAFE_RELEASE( pFontg );
    SAFE_RELEASE( pFonth );
}



//--------------------------------------------------------------------------------------
// Initialize everything and go into a render loop
//--------------------------------------------------------------------------------------
INT WINAPI WinMain( HINSTANCE, HINSTANCE, LPSTR, int )
{
    // Enable run-time memory check for debug builds.
#if defined(DEBUG) | defined(_DEBUG)
    _CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
#endif

    // Set the callback functions
    DXUTSetCallbackDeviceCreated( OnCreateDevice );
    DXUTSetCallbackDeviceReset( OnResetDevice );
    DXUTSetCallbackDeviceLost( OnLostDevice );
    DXUTSetCallbackDeviceDestroyed( OnDestroyDevice );
    DXUTSetCallbackMsgProc( MsgProc );
    DXUTSetCallbackFrameRender( OnFrameRender );
    DXUTSetCallbackFrameMove( OnFrameMove );

    // TODO: Perform any application-level initialization here

#ifdef DXUTD3D9 /*新しいＤＸＵＴ対応のため*/
    // Initialize DXUT and create the desired Win32 window and Direct3D device for the application
    DXUTInit( true, true ); // Parse the command line and show msgboxes
    DXUTSetHotkeyHandling( true, true, true );  // handle the default hotkeys
    DXUTSetCursorSettings( true, true ); // Show the cursor and clip it when in full screen
    DXUTCreateWindow( L"EmptyProject" );
    DXUTCreateDevice( true, 640, 480 );
#else
    // Initialize DXUT and create the desired Win32 window and Direct3D device for the application
    DXUTInit( true, true, true ); // Parse the command line, handle the default hotkeys, and show msgboxes
    DXUTSetCursorSettings( true, true ); // Show the cursor and clip it when in full screen
    DXUTCreateWindow( L"TREASURE HUNTER　ADVENTUR" );
    DXUTCreateDevice( D3DADAPTER_DEFAULT, true, 640, 480);
#endif

    //スプライトの作成
    D3DXCreateSprite( DXUTGetD3DDevice(), &pSprite);


    //--------------------------------------------------------------------------------------
    //テクスチャのロード
    //------------------------------------------------------------------
    D3DXCreateTextureFromFile( DXUTGetD3DDevice(), _T("image\\jiki02.png"),&pTexture );//自機（画像）
    D3DXCreateTextureFromFile( DXUTGetD3DDevice(), _T("image\\tama01.png"),&pText_tama);//自機用の弾（画像）
    D3DXCreateTextureFromFile( DXUTGetD3DDevice(), _T("image\\teki001.png"),&pText_teki);//敵（画像）
    D3DXCreateTextureFromFile( DXUTGetD3DDevice(), _T("image\\tama04.png"),&pText_teta);//敵用の弾（画像）
    D3DXCreateTextureFromFile( DXUTGetD3DDevice(), _T("image\\back2.png"),&pText_back);//背景（画像）
	D3DXCreateTextureFromFile( DXUTGetD3DDevice(), _T("image\\back2.png"),&pText_back_a);//背景をスクロールのため（画像）
	D3DXCreateTextureFromFile( DXUTGetD3DDevice(), _T("image\\shiro.png"),&pText_back_sc);//得点背景（画像）
	D3DXCreateTextureFromFile( DXUTGetD3DDevice(), _T("image\\teki01.png"),&pText_boss);//中ボス（画像）
	D3DXCreateTextureFromFile( DXUTGetD3DDevice(), _T("image\\tama008.png"),&pText_boss_ta);//中ボス用弾（画像）
	D3DXCreateTextureFromFile( DXUTGetD3DDevice(), _T("image\\tama004.png"),&pText_boss_ta2);//中ボス用弾（画像）
	D3DXCreateTextureFromFile( DXUTGetD3DDevice(), _T("image\\dia01.png"),&pText_takara1);//宝箱（画像）
	D3DXCreateTextureFromFile( DXUTGetD3DDevice(), _T("image\\icon01.png"),&pText_takara2);//宝箱（画像）
	//D3DXCreateTextureFromFile( DXUTGetD3DDevice(), _T("image\\"),&pText_takara3);//宝箱（画像）
	D3DXCreateTextureFromFile( DXUTGetD3DDevice(), _T("image\\title0-4-1.png"),&pText_title);//タイトル（画像）
	D3DXCreateTextureFromFile( DXUTGetD3DDevice(), _T("image\\title-back.png"),&pText_title_back);//タイトル（画像）
	//D3DXCreateTextureFromFile( DXUTGetD3DDevice(), _T("image\\tama011.png"),&pText_boss_tam);//中ボス用弾２（画像）
    
    //D3DXCreateTextureFromFile( DXUTGetD3DDevice(), _T("image\\logo001.png"),&pText_logo_a);//ロゴ００１（画像）
    //D3DXCreateTextureFromFile( DXUTGetD3DDevice(), _T("image\\heart01.png"),&pText_life);//自機ライフ（画像）



    //--------------------------------------------------------------------------------------
    //フォントの作成　　各パターン
    //----------------------------------------------------

    ////フォントの作成０パターン）
    D3DXCreateFont(
        DXUTGetD3DDevice(),         //direct3Dデバイス
        22,                         //フォントサイズ
        0,                          //平均文字幅
        FW_NORMAL,                  //太さ
        1,                          //ミップマップレベル
        false,                      //斜体フラグ
        DEFAULT_CHARSET,            //文字セット
        OUT_DEFAULT_PRECIS,         //精度
        DEFAULT_QUALITY,            //品質
        DEFAULT_PITCH,              //ピッチ
        _T("ＡＲＰ浪漫明朝体Ｕ"),	//フォント名
        &pFont);                    //作成されたフォントが格納される変数

    //フォントの作成（Ａパターン）
    D3DXCreateFont(
        DXUTGetD3DDevice(),         //direct3Dデバイス
        30,                         //フォントサイズ
        0,                          //平均文字幅
        FW_NORMAL,                  //太さ
        1,                          //ミップマップレベル
        false,                      //斜体フラグ
        DEFAULT_CHARSET,            //文字セット
        OUT_DEFAULT_PRECIS,         //精度
        DEFAULT_QUALITY,            //品質
        DEFAULT_PITCH,              //ピッチ
        _T("Broadway BT"),          //フォント名
        &pFonta);                   //作成されたフォントが格納される変数

    //フォントの作成（Ｂパターン）
    D3DXCreateFont( 
        DXUTGetD3DDevice(),         //direct3Dデバイス
        23,                         //フォントサイズ
        0,                          //平均文字幅
        FW_NORMAL,                  //太さ
        1,                          //ミップマップレベル
        false,                      //斜体フラグ
        DEFAULT_CHARSET,            //文字セット
        OUT_DEFAULT_PRECIS,         //精度
        DEFAULT_QUALITY,            //品質
        DEFAULT_PITCH,              //ピッチ
        _T("HGep022"),              //フォント名
        &pFontb);                   //作成されたフォントが格納される変数

    //フォントの作成（Ｃパターン）
    D3DXCreateFont(
        DXUTGetD3DDevice(),         //direct3Dデバイス  
        30,                         //フォントサイズ
        0,                          //平均文字幅
        FW_NORMAL,                  //太さ
        1,                          //ミップマップレベル
        false,                      //斜体フラグ
        DEFAULT_CHARSET,            //文字セット
        OUT_DEFAULT_PRECIS,         //精度
        DEFAULT_QUALITY,            //品質
        DEFAULT_PITCH,              //ピッチ
        _T("FancyBalloonsAlphabet"),//フォント名
        &pFontc);                   //作成されたフォントが格納される変数

    //フォントの作成（Ｄパターン）
    D3DXCreateFont(
        DXUTGetD3DDevice(),         //direct3Dデバイス
        30,                         //フォントサイズ
        0,                          //平均文字幅
        FW_NORMAL,                  //太さ
        1,                          //ミップマップレベル
        false,                      //斜体フラグ
        DEFAULT_CHARSET,            //文字セット
        OUT_DEFAULT_PRECIS,         //精度
        DEFAULT_QUALITY,            //品質
        DEFAULT_PITCH,              //ピッチ
        _T("BackSeatAlphabetWidth"),//フォント名
        &pFontd);                   //作成されたフォントが格納される変数


    //フォントの作成（Ｅパターン）
    D3DXCreateFont(
        DXUTGetD3DDevice(),         //direct3Dデバイス
        30,                         //フォントサイズ
        0,                          //平均文字幅
        FW_NORMAL,                  //太さ
        1,                          //ミップマップレベル
        false,                      //斜体フラグ
        DEFAULT_CHARSET,            //文字セット
        OUT_DEFAULT_PRECIS,         //精度
        DEFAULT_QUALITY,            //品質
        DEFAULT_PITCH,              //ピッチ
        _T("D3 Cosmism"),           //フォント名
        &pFonte);                   //作成されたフォントが格納される変数

    //フォントの作成（Ｆパターン）
    D3DXCreateFont(
        DXUTGetD3DDevice(),         //direct3Dデバイス
        23,                         //フォントサイズ
        0,                          //平均文字幅
        FW_NORMAL,                  //太さ
        1,                          //ミップマップレベル
        false,                      //斜体フラグ
        DEFAULT_CHARSET,            //文字セット
        OUT_DEFAULT_PRECIS,         //精度
        DEFAULT_QUALITY,            //品質
        DEFAULT_PITCH,              //ピッチ
        _T("SHOWA73ARegular"),      //フォント名
        &pFontf);                   //作成されたフォントが格納される変数

    //フォントの作成（Ｇパターン）
    D3DXCreateFont(
        DXUTGetD3DDevice(),         //direct3Dデバイス
        20,                         //フォントサイズ
        0,                          //平均文字幅
        FW_NORMAL,                  //太さ
        1,                          //ミップマップレベル
        false,                      //斜体フラグ
        DEFAULT_CHARSET,            //文字セット
        OUT_DEFAULT_PRECIS,         //精度
        DEFAULT_QUALITY,            //品質
        DEFAULT_PITCH,              //ピッチ
        _T("富士ポップＰ"),         //フォント名
        &pFontg);                   //作成されたフォントが格納される変数


    //フォントの作成（Ｈパターン）
    D3DXCreateFont(
        DXUTGetD3DDevice(),         //direct3Dデバイス
        23,                         //フォントサイズ
        0,                          //平均文字幅
        FW_NORMAL,                  //太さ
        1,                          //ミップマップレベル
        false,                      //斜体フラグ
        DEFAULT_CHARSET,            //文字セット
        OUT_DEFAULT_PRECIS,         //精度
        DEFAULT_QUALITY,            //品質
        DEFAULT_PITCH,              //ピッチ
        _T("TAPEMAN"),				//フォント名
        &pFonth);                   //作成されたフォントが格納される変数

    //次のフォント


    //--------------------------------------------------------------------------------------
    //１度しか実行しないもの
    //--------------------------------------------------

    //------------------------------------------------
    //自機の構造体に関する処理
    //-------------------------------
    for(i = 0;i < MYSHIP;i++)
    {
        myship[i].gPos.x = 280;
        myship[i].gPos.y = 420;
        myship[i].active = 1;
    }
    //------------------------------------------------
    //弾の構造体に関する処理
    //-------------------------------
    for(int b = 0;b < BULLET_MAX;b++)
    {
        bullets[b].gPos_tm.x = 280;
        bullets[b].gPos_tm.y = 430;
        bullets[b].active = 0;
        bullets[b].type = 0;
    }
    //------------------------------------------------
    //敵の構造体に関する処理
    //-------------------------------
    enemy[0].gPos_te.x = -80;
    enemy[0].gPos_te.y = 50;
    enemy[0].active_te = 1;
    enemy[1].shot_wait = 0;
    enemy[0].type = 0;
 
    enemy[1].gPos_te.x = 690;
    enemy[1].gPos_te.y = 90;
    enemy[1].active_te = 1;
    enemy[1].shot_wait = 0;
    enemy[1].type = 1;

    //------------------------------------------------
    //敵の弾に関する処理
    //-------------------------------
    for(int eb = 0;eb < ENEMY_BLT_MAX;eb++)
    {
        for(int em = 0;em < ENEMY_MAX; em++)
        {
            enemy_blt[em][eb].gPos.x = 280;
            enemy_blt[em][eb].gPos.y = 430;
            enemy_blt[em][eb].active = 0;
            enemy_blt[em][eb].type = 0;
        }
    }

	//------------------------------------------------
	//ボスに関する処理
	//-------------------------------
	for(int bm = 0;bm < BOSS_MAX;bm++)
	{
		enemy_boss[bm].gPos.x = 260;
		enemy_boss[bm].gPos.y = 5;
		enemy_boss[bm].shot_wait = 0;
		enemy_boss[bm].active = 0;
		enemy_boss[bm].type = 0;
	}

	//------------------------------------------------
	//ボスの弾に関する処理
	//-------------------------------
	for(int bb = 0;bb < BOSS_BLT_MAX;bb++)
    {
		for(int bm = 0;bm < BOSS_MAX;bm++)
		{
			boss_blt[bb][bm].gPos.x = 0;
			boss_blt[bb][bm].gPos.y = 0;
			boss_blt[bb][bm].active = 0;
			boss_blt[bb][bm].type = 0;
		}
	}

	for(int bb = 0;bb < BOSS_BLT_MAX;bb++)
    {
		for(int bm = 0;bm < BOSS_MAX;bm++)
		{
			boss_blt2[bb][bm].gPos.x = 0;
			boss_blt2[bb][bm].gPos.y = 0;
			boss_blt2[bb][bm].active = 0;
			boss_blt2[bb][bm].type = 0;
		}
	}
	for(int bb = 0;bb < BOSS_BLT_MAX;bb++)
    {
		for(int bm = 0;bm < BOSS_MAX;bm++)
		{
			boss_blt3[bb][bm].gPos.x = 0;
			boss_blt3[bb][bm].gPos.y = 0;
			boss_blt3[bb][bm].active = 0;
			boss_blt3[bb][bm].type = 0;
		}
	}
	//------------------------------------------------
    //お宝の構造体による初期化
    //-------------------------------
    /*for(int tm = 0;tm < TAKARA_MAX;tm++)
    {
        takara[tm].gPos.x = 0;
        takara[tm].gPos.y = 0;
        takara[tm].active = 0;
		takara[tm].type = 0;
    }*/
	//------------------------------------------------
    //お宝の構造体による初期化
    //-------------------------------
    for(int tm = 0;tm < TAKARA_MAX;tm++)
	{
		for(int tb = 0;tb < TKR_BLT_MAX;tb++)
		{
			takara2[tm][tb].gPos.x = 0;
			takara2[tm][tb].gPos.y = 0;
			takara2[tm][tb].active = 0;
			takara2[tm][tb].type = 0;
		}
    }


    //--------------------------------------------------------------------------------------
    //初期化
    //-----------------------------
    bullets[i].gPos_tm = D3DXVECTOR3(280,430,0);
    score = 0;
    Hi_score = 12500;
	count_e = 0;
	Boss_L = 1;



    // Start the render loop
    DXUTMainLoop();

    // TODO: Perform any application-level cleanup here

    return DXUTGetExitCode();
}