OperatorPlace.cpp
资源名称:LwGame2.0.rar [点击查看]
上传用户:semy2100
上传日期:2013-01-22
资源大小:3633k
文件大小:6k
源码类别:
射击游戏
开发平台:
Visual C++
- /********************************************************************
- * 空运爆发 *
- * Version 2.0 *
- * 本游戏全部代码由: *
- * 冲天实验室 梁锋 编写 *
- * 邮箱:lenwine@126.com *
- * bbs: http://free2.e-168.cn/lenwind (正在开发中...) *
- **********************************************************************/
- #include "stdafx.h"
- //////////////////////////////////////////////////////////////////////
- // Construction/Destruction
- //////////////////////////////////////////////////////////////////////
- int OperatorPlace::i=0;
- //我方控制区
- OperatorPlace::OperatorPlace(Manager *mgr,int xv,int yv,int xyi):ShootPlane(mgr,xv,yv)
- {
- i=xyi;//判断是那架战机
- switch(i)
- {
- case 0:
- bx=0;//切割位图从x坐标为0
- by=0;//切割位图从y坐标为0
- Bitlong=29;//我机的宽
- Bittall=33;//我机的高
- rx=6;//切割位图从x坐标为6
- ry=11;//切割位图从y坐标为11
- rlong=17;//我机的发出时的子弹宽
- rtall=19;//我机的发出时的子弹高
- alive=3;//初始化时活率为3
- decedent=0;//初始化时击中敌机数目
- result=0;//初始化时得分为0
- break;
- case 1:
- bx=43;//切割位图从x坐标为0
- by=2;//切割位图从y坐标为0
- Bitlong=33;//我机的宽
- Bittall=33;//我机的高
- rx=8;//切割位图从x坐标为6
- ry=11;//切割位图从y坐标为11
- rlong=19;//我机的发出时的子弹宽
- rtall=19;//我机的发出时的子弹高
- alive2=3;//初始化时活率为3
- decedent2=0;//初始化时击中敌机数目
- result2=0;//初始化时得分为0
- break;
- }
- sp=3;
- spx=0;
- spy=0;
- Shooting=false;//我们没按空格键,我们战机不发弹!!
- ShootPlane::bombStyle=Bomb::OPERATOR_SHOOT;
- ChangePlace();
- }
- void OperatorPlace::Update2()
- {
- if(!Work)//如果不发射,则清屏
- {
- mManager->RefreshScreen2();
- return;
- }
- if((alive2>0))//还活着吗?是则继续可以操作
- {
- if(x+spx<80)//是否达到超出客户区,是!则保持X在横坐标内边界(左)
- {
- x=80;
- spx=0;
- }
- else if(y+spy<0)//是否达到超出客户区,是!则保持Y在纵坐标内边界(上)
- {
- y=0;
- spy=0;
- }else if(x+Bitlong+spx>Manager::Imglong-80)//是否达到超出客户区,是!则保持X在横坐标内边界(右)
- {
- x=Manager::Imglong-Bitlong-80;
- spx=0;
- }else if(y+Bittall+spy>Manager::Imgtall-1)//是否达到超出客户区,是!则保持Y在纵坐标内边界(下)
- {
- y=Manager::Imgtall-Bittall-1;
- spy=0;
- }
- }
- ShootPlane::Update2();
- }
- void OperatorPlace::Update()
- {
- if(!Work)//如果不发射,则清屏
- {
- mManager->RefreshScreen();
- return;
- }
- if((alive>0))//还活着吗?是则继续可以操作
- {
- if(x+spx<80)//是否达到超出客户区,是!则保持X在横坐标内边界(左)
- {
- x=80;
- spx=0;
- }
- else if(y+spy<0)//是否达到超出客户区,是!则保持Y在纵坐标内边界(上)
- {
- y=0;
- spy=0;
- }else if(x+Bitlong+spx>Manager::Imglong-80)//是否达到超出客户区,是!则保持X在横坐标内边界(右)
- {
- x=Manager::Imglong-Bitlong-80;
- spx=0;
- }else if(y+Bittall+spy>Manager::Imgtall-1)//是否达到超出客户区,是!则保持Y在纵坐标内边界(下)
- {
- y=Manager::Imgtall-Bittall-1;
- spy=0;
- }
- }
- ShootPlane::Update();
- }
- void OperatorPlace::HoldWea()
- {
- bombStyle=(Bomb::BOMBSTYLE)((bombStyle+2)%3);//这里设置下种不同发弹方式
- }
- void OperatorPlace::HoldWea2()
- {
- bombStyle=(Bomb::BOMBSTYLE)((bombStyle+2)%3);//这里设置下种不同发弹方式
- }
- void OperatorPlace::Start(START moving)//控制上、下、左、右方向键
- {
- if(alive<=0)return;
- switch(moving)
- {
- case MOVL:
- spx=-sp-1;//左移时的速度x
- spy=0;//左移时的速度y
- break;
- case MOVR:
- spx=sp+1;//右移时的速度x
- spy=0; //右移时的速度y
- break;
- case MOVU:
- spx=0;//上、移时的速度x
- spy=-sp-1;//上移时的速度y
- break;
- case MOVD:
- spx=0;//下、移时的速度x
- spy=sp+1;//下、移时的速度y
- break;
- case MOVLU:
- spx=-0.7*sp-1;//上、左移时的速度x
- spy=-0.7*sp-1;//上、左、移时的速度y
- break;
- case MOVLD:
- spx=-0.75*sp-1;//下、左、移时的速度x
- spy=0.75*sp+1;//下、左、移时的速度y
- break;
- case MOVRU:
- spx=0.75*sp+1;//上、右移时的速度x
- spy=-0.75*sp-1;//上、右移时的速度y
- break;
- case MOVRD:
- spx=0.75*sp+1;//下、右移时的速度x
- spy=0.75*sp+1;//下、右移时的速度y
- break;
- case STOPMOV:
- spx=0;//上、下、左、右移时的速度x
- spy=0;//上、下、左、右移时的速度y
- break;
- case BEGINSHOOT:
- beginShoot();
- break;
- case STOPSHOOT:
- stopShoot();
- mManager->cs_play->ActionStop();//声音的播放
- mManager->co_play->ActionStop();
- mManager->ms_play->ActionStop();
- break;
- case HOLDWEA:
- HoldWea();//我机的换弹
- break;
- }
- }
- void OperatorPlace::Start2(START moving)
- {
- if(alive2<=0)return;
- switch(moving)
- {
- case MOVL:
- spx=-sp-1;//左移时的速度x
- spy=0;//左移时的速度y
- break;
- case MOVR:
- spx=sp+1;//右移时的速度x
- spy=0; //右移时的速度y
- break;
- case MOVU:
- spx=0;//上移时的速度x
- spy=-sp-1;//上移时的速度y
- break;
- case MOVD:
- spx=0;//下移时的速度x
- spy=sp+1;//下移时的速度y
- break;
- case MOVLU:
- spx=-0.7*sp-1;//上、左、移时的速度x
- spy=-0.7*sp-1;//上、左、移时的速度y
- break;
- case MOVLD:
- spx=-0.75*sp-1;//下、左、移时的速度x
- spy=0.75*sp+1;//下、左、移时的速度y
- break;
- case MOVRU:
- spx=0.75*sp+1;//上、右移时的速度x
- spy=-0.75*sp-1;//上、右移时的速度y
- break;
- case MOVRD:
- spx=0.75*sp+1;//下、右移时的速度x
- spy=0.75*sp+1;//下、右移时的速度y
- break;
- case STOPMOV:
- spx=0;//上、下、左、右移时的速度x
- spy=0;//上、下、左、右移时的速度y
- break;
- case BEGINSHOOT:
- beginShoot();
- break;
- case STOPSHOOT:
- stopShoot();
- mManager->cs_play->ActionStop();
- mManager->co_play->ActionStop();
- mManager->ms_play->ActionStop();
- break;
- case HOLDWEA:
- HoldWea2();//我机换弹
- break;
- }
- }
- void OperatorPlace::Shoot()//我方发射
- {
- if(mManager->Time-EndShoot<Bomb::GetShoot(bombStyle))
- return;
- mManager->OperatorShoot(this,0);
- mManager->OperatorShoot(this,1);
- EndShoot=mManager->Time;
- }