📄 stage1st.cpp
字号:
#include "stdafx.h"
#include "Stage1st.h"
//////////////////////////////////////////////////////////////////////////////////////
//CStage1st
//////////////////////////////////////////////////////////////////////////////////////
CStage1st::CStage1st(CDD* pdd,LPCSTR szBitmap,CDI* pdi,CDS* pds,LPCSTR szWaves[DSOUND_MAX_NUM],int nSoundNum)
:CGameStatus(pdd,szBitmap,pdi,pds,szWaves,nSoundNum)
{
RECT rect;
//记分系统初始化:
m_nScorePlayer1=0;
m_nScorePlayer2=0;
rect.top=START_Y+SCREEN_HEIGHT+SPIRIT_HEIGHT_2*9;
rect.bottom=rect.top+SPIRIT_HEIGHT_4-1;
rect.left=START_X;
rect.right=rect.left+SPIRIT_WIDTH_8-1;
m_ScorePlayer1.Initialize(10,5,10,1,rect);
//m_ScorePlayer1.SetShowPosition(10,5);
//
//冰河的初始化:
m_CosmosBingHe.Activate(0,START_Y+SCREEN_HEIGHT+SPIRIT_HEIGHT*4,28);
//石头的初始化:
//沙加的初始化:
rect.top =START_Y+SCREEN_HEIGHT+SPIRIT_HEIGHT*2+SPIRIT_HEIGHT_4;
rect.bottom=rect.top+SPIRIT_HEIGHT_4-1;
rect.left =START_X+SPIRIT_WIDTH_4;
rect.right =rect.left+SPIRIT_WIDTH_4-1;
for(int i=0;i<7;i++)
m_ShaJiaFire7[i].Initialize(30,7,rect);
//小敌人3子弹初始化:
rect.top =START_Y+SCREEN_HEIGHT+SPIRIT_HEIGHT*5;
rect.bottom=rect.top+SPIRIT_HEIGHT_2-1;
rect.left =START_X+SPIRIT_WIDTH_2*2;
rect.right =rect.left+SPIRIT_WIDTH_4-1;
for(i=0;i<MAX_STONE_COLUMN;i++)
m_SSaint3Fire[i].Initialize(0,0,rect,7777);
//small saint4's fire:
for(i=0;i<3;i++)
m_SSaint4Fire3[i].Initialize(25,3,rect,7777);
}
//////////////////////////////////////////////////////////////////////////////////////
bool CStage1st::Run()
{
//Direct input取得输入状态;
//m_pDI->UpDateInputState();
//声音处理:
if(m_BingHe.m_bFiring)m_pDS->Play(1,0,0,15000);
else m_pDS->Stop(1);
int i,j;//循环变量;
////背景处理;
if(m_BK.m_bActive)m_BK.Trace(m_luTime,m_PalaceGate);
if(m_BK.m_bAtPalace)
{
m_PalaceGate.m_bActive=true;
m_PalaceGate.Trace(m_luTime,m_BK);
//if(m_PalaceGate.m_nX==0)m_BK.m_bActive=false;
}
////分数处理:
//m_nScorePlayer1++;
m_ScorePlayer1.ArrangeRect(m_nScorePlayer1);
//m_ScorePlayer1.ArrangeRect("SHERWOOD");
////石头处理:
if(m_luTime==350)//&&m_luTime<=2000)
for(i=0;i<MAX_STONE_COLUMN;i++)
m_Stone[i].Activate();//m_bActive=true;
for(i=0;i<MAX_STONE_COLUMN;i++)
if(m_Stone[i].m_bActive)
{
if(m_Stone[i].m_bAlive)m_Stone[i].Trace(i);
else
{
m_Stone[i].DyingTrace(1);
//m_pDS->Play(2,0,0,15000);
}
}
////小敌人处理:
////1
for(i=0;i<MAX_STONE_COLUMN;i++)
if(m_luTime==(UINT)(800+i*10))//&&m_luTime<=2000)
m_SSaint1[i].Activate();//m_bActive=true;
for(i=0;i<MAX_STONE_COLUMN;i++)
if(m_SSaint1[i].m_bActive)
{
if(m_SSaint1[i].m_bAlive)m_SSaint1[i].Trace(i);
else
{
m_SSaint1[i].DyingTrace(1);
}
}
////2
for(i=0;i<MAX_STONE_COLUMN;i++)
if(m_luTime==(UINT)(1050+i*10))//&&m_luTime<=2000)
m_SSaint2[i].Activate();//m_bActive=true;
for(i=0;i<MAX_STONE_COLUMN;i++)
if(m_SSaint2[i].m_bActive)
{
if(m_SSaint2[i].m_bAlive)m_SSaint2[i].Trace(i);
else
{
m_SSaint2[i].DyingTrace(1);
}
}
////3
for(i=0;i<MAX_STONE_COLUMN;i++)
if(m_luTime==(UINT)(1250+i*10))//&&m_luTime<=2000)
m_SSaint3[i].Activate();//m_bActive=true;
for(i=0;i<MAX_STONE_COLUMN;i++)
if(m_SSaint3[i].m_bActive)
{
if(m_SSaint3[i].m_bAlive)m_SSaint3[i].Trace(i,m_luTime);
else
{
m_SSaint3[i].DyingTrace(1);
}
}
////小敌人3的子弹:
for(i=0;i<MAX_STONE_COLUMN;i++)
if(m_SSaint3[i].m_bFiring&&m_SSaint3[i].m_bAlive)
{
if(!m_SSaint3Fire[i].m_bActive)
m_SSaint3Fire[i].Activate(m_SSaint3[i]);//激活一个子弹;
}
for(i=0;i<MAX_STONE_COLUMN;i++)
if(m_SSaint3Fire[i].m_bActive)m_SSaint3Fire[i].Trace(0);
else m_SSaint3Fire[i].m_bActive=false;
////4
if(m_luTime==(UINT)(1400+i*10))//&&m_luTime<=2000)
m_SSaint4.Activate();//m_bActive=true;
//for(i=0;i<MAX_STONE_COLUMN;i++)
if(m_SSaint4.m_bActive)
{
if(m_SSaint4.m_bAlive)m_SSaint4.Trace(i,m_luTime);
else
{
m_SSaint4.DyingTrace(1);
}
}
//4的子弹:
if(m_SSaint4.m_bFiring)
{
for(i=0;i<m_SSaint4Fire3[0].m_nFireNum;i++)
{
if(!m_SSaint4Fire3[i].m_bActive)
m_SSaint4Fire3[i].Activate(m_SSaint4);//激活一个子弹;
}
}
for(i=0;i<m_SSaint4Fire3[0].m_nFireNum;i++)
//if(m_SSaint4.m_bAlive)
{
if(m_SSaint4Fire3[i].m_bActive)m_SSaint4Fire3[i].Trace(i);
else m_SSaint4Fire3[i].DyingTrace(1);
}/*
else
{
m_SSaint4Fire3[i].m_bActive=false;
m_SSaint4Fire3[i].m_bAlive=false;
}*/
////沙加处理:
////(1)沙加:
if(m_luTime==1800)
{
m_ShaJia.Activate();
m_CosmosShaJia.Activate(0,START_Y+SCREEN_HEIGHT+SPIRIT_HEIGHT*4+SPIRIT_HEIGHT_4,28+SPIRIT_HEIGHT_4);
for(i=0;i<LOTUS_NUM;i++)
m_Lotus[i].InitAngle(i);
}
if(m_ShaJia.m_bActive)
{
if(m_ShaJia.m_bAlive)
{
m_ShaJia.Trace(m_luTime,m_BingHe);
}
else
{
m_ShaJia.DyingTrace(1);
}
m_CosmosShaJia.Trace(m_ShaJia);
}
////(2)沙加的5向子弹:
if(m_ShaJia.m_bFiring)
{
for(i=0;i<m_ShaJiaFire7[0].m_nFireNum;i++)
{
if(!m_ShaJiaFire7[i].m_bActive)
m_ShaJiaFire7[i].Activate(m_ShaJia);//激活一个子弹;
}
}
for(i=0;i<m_ShaJiaFire7[0].m_nFireNum;i++)
if(m_ShaJia.m_bAlive)
{
if(m_ShaJiaFire7[i].m_bActive)m_ShaJiaFire7[i].Trace(i);
}
else
{
m_ShaJiaFire7[i].m_bActive=false;
m_ShaJiaFire7[i].m_bAlive=false;
}
////(3)沙加的莲花:
for(i=0;i<LOTUS_NUM;i++)
if(m_Lotus[i].m_bActive)
{
if(m_Lotus[i].m_bAlive&&m_ShaJia.m_bAlive)m_Lotus[i].Trace(m_ShaJia,i);
else
{
m_Lotus[i].DyingTrace(1);
}
}
////冰河处理:
if(m_BingHe.m_bAlive)
m_BingHe.Trace(m_pDI->m_dwMouse,m_pDI->m_MousePoint,m_pDI->m_bKeyDown,m_luTime);
else
{
m_BingHe.DyingTrace(1);
m_BingHe.m_bFiring=false;
}
m_CosmosBingHe.Trace(m_BingHe);
static int nFBHNum=0; //记录冰河的子弹编号;
if(m_BingHe.m_bFiring)
{
if(nFBHNum==MAX_FIRE_NUM)nFBHNum=0;
m_FireBingHe[nFBHNum].Activate(m_BingHe);//激活一个子弹;
nFBHNum++;
if(m_BingHe.m_nCosmos>20&&nFBHNum==MAX_FIRE_NUM)m_BingHe.m_nCosmos--;
}
for(i=0;i<MAX_FIRE_NUM;i++)
if(m_BingHe.m_bAlive)
{
if(m_FireBingHe[i].m_bActive)
m_FireBingHe[i].Trace();
}
else m_FireBingHe[i].m_bActive=false;
////游戏结束语处理:"Game Over"/"Bye Athena"
if(!m_BingHe.m_bAlive)
{
m_GameOverShow.m_bActive=true;
m_GameOverShow.Trace();
if(m_GameOverShow.m_bActive==false)return false;
}
////////////////////////////////////////////////////////////////////
//撞击检测:(可以再另添一个函数单独处理)
////////////////////////////////////////////////////////////////////
int nOldCosmos;//记录Spirit在撞击前的Cosmos;
////石头与冰河的子弹:
for(j=0;j<MAX_STONE_COLUMN;j++)
{
if(m_BingHe.Collison(m_Stone[j]))
{
nOldCosmos=m_Stone[j].m_nCosmos;
m_Stone[j].BeCollided(m_BingHe.m_nCosmos);
m_BingHe.BeCollided(nOldCosmos);
}
for(i=0;i<MAX_FIRE_NUM;i++)
if(m_FireBingHe[i].Collison(m_Stone[j]))
{
m_Stone[j].BeCollided(m_FireBingHe[i].m_nCosmos);
m_FireBingHe[i].BeCollided();
m_BingHe.m_nCosmos++;
m_nScorePlayer1++;
//m_pDS->Play(2,0,0,15000);
}
//m_pDS->Stop(2);
}
////小敌人和冰河的子弹:
for(j=0;j<MAX_STONE_COLUMN;j++)
{
////1
if(m_BingHe.Collison(m_SSaint1[j]))
{
nOldCosmos=m_SSaint1[j].m_nCosmos;
m_SSaint1[j].BeCollided(m_BingHe.m_nCosmos);
m_BingHe.BeCollided(nOldCosmos);
}
for(i=0;i<MAX_FIRE_NUM;i++)
if(m_FireBingHe[i].Collison(m_SSaint1[j]))
{
m_SSaint1[j].BeCollided(m_FireBingHe[i].m_nCosmos);
m_FireBingHe[i].BeCollided();
m_BingHe.m_nCosmos++;
m_nScorePlayer1++;
}
////2
if(m_BingHe.Collison(m_SSaint2[j]))
{
nOldCosmos=m_SSaint2[j].m_nCosmos;
m_SSaint2[j].BeCollided(m_BingHe.m_nCosmos);
m_BingHe.BeCollided(nOldCosmos);
}
for(i=0;i<MAX_FIRE_NUM;i++)
if(m_FireBingHe[i].Collison(m_SSaint2[j]))
{
m_SSaint2[j].BeCollided(m_FireBingHe[i].m_nCosmos);
m_FireBingHe[i].BeCollided();
m_BingHe.m_nCosmos++;
m_nScorePlayer1++;
}
////3
if(m_BingHe.Collison(m_SSaint3[j]))
{
nOldCosmos=m_SSaint3[j].m_nCosmos;
m_SSaint3[j].BeCollided(m_BingHe.m_nCosmos);
m_BingHe.BeCollided(nOldCosmos);
}
for(i=0;i<MAX_FIRE_NUM;i++)
if(m_FireBingHe[i].Collison(m_SSaint3[j]))
{
m_SSaint3[j].BeCollided(m_FireBingHe[i].m_nCosmos);
m_FireBingHe[i].BeCollided();
m_BingHe.m_nCosmos++;
m_nScorePlayer1++;
}
////3的子弹:
if(m_BingHe.Collison(m_SSaint3Fire[j]))
{
nOldCosmos=m_SSaint3Fire[j].m_nCosmos;
m_SSaint3Fire[j].BeCollided(m_BingHe.m_nCosmos);
m_BingHe.BeCollided(nOldCosmos);
}
for(i=0;i<MAX_FIRE_NUM;i++)
if(m_FireBingHe[i].Collison(m_SSaint3Fire[j]))
{
m_SSaint3Fire[j].BeCollided(m_FireBingHe[i].m_nCosmos);
m_FireBingHe[i].BeCollided();
m_BingHe.m_nCosmos++;
}
}
////4:
if(m_BingHe.Collison(m_SSaint4))
{
nOldCosmos=m_SSaint4.m_nCosmos;
m_SSaint4.BeCollided(m_BingHe.m_nCosmos);
m_BingHe.BeCollided(nOldCosmos);
}
for(i=0;i<MAX_FIRE_NUM;i++)
if(m_FireBingHe[i].Collison(m_SSaint4))
{
m_SSaint4.BeCollided(m_FireBingHe[i].m_nCosmos);
m_FireBingHe[i].BeCollided();
m_BingHe.m_nCosmos++;
m_nScorePlayer1++;
}
////4的子弹:
for(j=0;j<m_SSaint4Fire3[0].m_nFireNum;j++)
{
if(m_BingHe.Collison(m_SSaint4Fire3[j]))
{
nOldCosmos=m_SSaint4Fire3[j].m_nCosmos;
m_SSaint4Fire3[j].BeCollided(m_BingHe.m_nCosmos);
m_BingHe.BeCollided(nOldCosmos);
}
for(i=0;i<MAX_FIRE_NUM;i++)
if(m_FireBingHe[i].Collison(m_SSaint4Fire3[j]))
{
m_SSaint4Fire3[j].BeCollided(m_FireBingHe[i].m_nCosmos);
m_FireBingHe[i].BeCollided();
m_BingHe.m_nCosmos++;
}
}
////沙加与冰河的子弹:
if(m_BingHe.Collison(m_ShaJia))
{
nOldCosmos=m_ShaJia.m_nCosmos;
m_ShaJia.BeCollided(m_BingHe.m_nCosmos);
m_BingHe.BeCollided(nOldCosmos);
}
for(i=0;i<MAX_FIRE_NUM;i++)
if(m_FireBingHe[i].Collison(m_ShaJia))
{
m_ShaJia.BeCollided(m_FireBingHe[i].m_nCosmos);
m_FireBingHe[i].BeCollided();
m_BingHe.m_nCosmos++;
m_nScorePlayer1++;
}
////沙加的5向子弹与冰河:
for(j=0;j<m_ShaJiaFire7[0].m_nFireNum;j++)
{
if(m_BingHe.Collison(m_ShaJiaFire7[j]))
{
nOldCosmos=m_ShaJiaFire7[j].m_nCosmos;
m_ShaJiaFire7[j].BeCollided(m_BingHe.m_nCosmos);
m_BingHe.BeCollided(nOldCosmos);
}
}
////沙加的莲花与冰河的子弹:
for(j=0;j<LOTUS_NUM;j++)
{
if(m_BingHe.Collison(m_Lotus[j]))
{
nOldCosmos=m_Lotus[j].m_nCosmos;
m_Lotus[j].BeCollided(m_BingHe.m_nCosmos);
m_BingHe.BeCollided(nOldCosmos);
}
for(i=0;i<MAX_FIRE_NUM;i++)
if(m_FireBingHe[i].Collison(m_Lotus[j]))
{
m_Lotus[j].BeCollided(m_FireBingHe[i].m_nCosmos);
m_FireBingHe[i].BeCollided();
m_BingHe.m_nCosmos++;
m_nScorePlayer1++;
}
}
return true;
}
//////////////////////////////////////////////////////////////////////////////////////
void CStage1st::Show()
{
int i;//循环变量;
//画背景:
if(!m_BK.Show(m_pDD))return;
/*
//if(m_BK.m_bActive)
if(!m_pDD->BlitSourceToBack(m_BK.m_nX,
m_BK.m_nY,
m_BK.m_rcSource,
DDBLTFAST_NOCOLORKEY))return;
*/
if(!m_PalaceGate.Show(m_pDD))return;
/*
if(m_PalaceGate.m_bActive)
if(!m_pDD->StretchBlitSourceToBack(m_PalaceGate.m_rcDestination,
m_PalaceGate.m_rcSource,
//DDBLT_NOCOLORKEY
NULL))return;
*/
//画分数:
if(m_ScorePlayer1.m_bActive)
if(!m_ScorePlayer1.Show(m_pDD))return;
//画石头:
for(i=0;i<MAX_STONE_COLUMN;i++)
if(m_Stone[i].m_bActive)
if(!m_pDD->BlitSourceToBack(m_Stone[i].m_nX,
m_Stone[i].m_nY,
m_Stone[i].m_rcSource,
DDBLTFAST_SRCCOLORKEY))return;
//画小敌人1,2,3,4:
for(i=0;i<MAX_STONE_COLUMN;i++)
if(m_SSaint1[i].m_bActive)
if(!m_pDD->BlitSourceToBack(m_SSaint1[i].m_nX,
m_SSaint1[i].m_nY,
m_SSaint1[i].m_rcSource,
DDBLTFAST_SRCCOLORKEY))return;
for(i=0;i<MAX_STONE_COLUMN;i++)
if(m_SSaint2[i].m_bActive)
if(!m_pDD->BlitSourceToBack(m_SSaint2[i].m_nX,
m_SSaint2[i].m_nY,
m_SSaint2[i].m_rcSource,
DDBLTFAST_SRCCOLORKEY))return;
for(i=0;i<MAX_STONE_COLUMN;i++)
if(m_SSaint3[i].m_bActive)
if(!m_pDD->BlitSourceToBack(m_SSaint3[i].m_nX,
m_SSaint3[i].m_nY,
m_SSaint3[i].m_rcSource,
DDBLTFAST_SRCCOLORKEY))return;
//小敌人3的子弹:
for(i=0;i<MAX_STONE_COLUMN;i++)
if(m_SSaint3Fire[i].m_bActive)
if(!m_pDD->BlitSourceToBack(m_SSaint3Fire[i].m_nX,
m_SSaint3Fire[i].m_nY,
m_SSaint3Fire[i].m_rcSource,
DDBLTFAST_SRCCOLORKEY))return;
if(m_SSaint4.m_bActive)
if(!m_pDD->BlitSourceToBack(m_SSaint4.m_nX,
m_SSaint4.m_nY,
m_SSaint4.m_rcSource,
DDBLTFAST_SRCCOLORKEY))return;
for(i=0;i<m_SSaint4Fire3[i].m_nFireNum;i++)
if(m_SSaint4Fire3[i].m_bActive)
if(!m_pDD->BlitSourceToBack(m_SSaint4Fire3[i].m_nX,
m_SSaint4Fire3[i].m_nY,
m_SSaint4Fire3[i].m_rcSource,
DDBLTFAST_SRCCOLORKEY))return;
//画沙加及其子弹,莲花:
if(m_CosmosShaJia.m_bActive)
if(!m_pDD->BlitSourceToBack(m_CosmosShaJia.m_nX,
m_CosmosShaJia.m_nY,
m_CosmosShaJia.m_rcSource,
DDBLTFAST_SRCCOLORKEY))return;
for(i=0;i<LOTUS_NUM;i++)
if(m_Lotus[i].m_bActive)
if(!m_pDD->BlitSourceToBack(m_Lotus[i].m_nX,
m_Lotus[i].m_nY,
m_Lotus[i].m_rcSource,
DDBLTFAST_SRCCOLORKEY))return;
for(i=0;i<m_ShaJiaFire7[i].m_nFireNum;i++)
if(m_ShaJiaFire7[i].m_bActive)
if(!m_pDD->BlitSourceToBack(m_ShaJiaFire7[i].m_nX,
m_ShaJiaFire7[i].m_nY,
m_ShaJiaFire7[i].m_rcSource,
DDBLTFAST_SRCCOLORKEY))return;
if(m_ShaJia.m_bActive)
if(!m_pDD->BlitSourceToBack(m_ShaJia.m_nX,
m_ShaJia.m_nY,
m_ShaJia.m_rcSource,
DDBLTFAST_SRCCOLORKEY))return;
//画冰河及其子弹:
if(m_CosmosBingHe.m_bActive)
if(!m_pDD->BlitSourceToBack(m_CosmosBingHe.m_nX,
m_CosmosBingHe.m_nY,
m_CosmosBingHe.m_rcSource,
DDBLTFAST_SRCCOLORKEY))return;
for(i=0;i<MAX_FIRE_NUM;i++)
if(m_FireBingHe[i].m_bActive)
if(!m_pDD->BlitSourceToBack(m_FireBingHe[i].m_nX,
m_FireBingHe[i].m_nY,
m_FireBingHe[i].m_rcSource,
DDBLTFAST_SRCCOLORKEY))return;
if(m_BingHe.m_bActive)
if(!m_pDD->BlitSourceToBack(m_BingHe.m_nX,
m_BingHe.m_nY,
m_BingHe.m_rcSource,
DDBLTFAST_SRCCOLORKEY))return;
if(m_GameOverShow.m_bActive)
if(!m_GameOverShow.Show(m_pDD))return;
//*/
//*/
//最后,切换图面:
m_pDD->FlipSurface();
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -