关于这个射击程序!

ekin7913046 2003-08-20 05:51:39
#include <vcl.h>
#pragma hdrstop

#include "shootplane.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;

//程序的初始化阶段以及最后退出阶段的处理
__fastcall TForm1::TForm1(TComponent* Owner): TForm(Owner)
{
//得到当前可执行文件所在目录的路径
strCuPath=ExtracFilePath(Application->ExeName);
}

void __fastcall TForm1::FormCreate(TObject*Sender)
{
pBmpBg=new Graphics::TBitmap;
pBmpShow=new Graphics::TBitmap;
pBmpMyPlane=new Graphics::TBitmap;
pBmpBullet=new Graphics::TBitmap;
pBmpBullet1=new Graphics::TBitmap;
pBmpBoss=new Graphics::TBitmap;
pBmpBg->LoadFromFile(strCurPath+"RES\\bg.bmp");
pBmpMyPlane->LoadFromFile(strCurPath+"RES\\bg.bmp");
pBmpBullet->LoadFromFile(strCurPath+"RES\\bg.bmp");
pBmpBullet1->LoadFromFile(strCurPath+"RES\\bg.bmp");
pBmpBoss->LoadFromFile(strCurPath+"RES\\bg.bmp");
//将相应的资源文件读入相应的位图对象中
FirstNode=new BulletNode;
FirstNode->Next=NULL; //产生第0颗子弹
pBmpShow->Assign(pBmpBg);
Timer1->Enabled=false;
Timer2->Enabled=false;
Timer3->Enabled=false;
Image1->Canvas->Draw(0,0,pBmpShow); //初始化并实现背景图象
bInit=false;
}

void __fastcall TForm1::FormDestroy(TObject*Sender)
{
delete pBmpBg;
delete pBmpShow;
delete pBmpMyPlane;
BulletNode*CurNode=FirstNode;
while(CurNode->Next)
{
BulletNode*TmpNode=CurNode->Next;
CurNode->Next=CurNode->Next->Next;
delete TmpNode;
}
delete FirstNode; //删除产生的所有子弹,释放资源
}
//---------------------------------------------------------------------------




void Init()
{
nEney MoveDir=1; //初始化敌机移动方向向右
nMyLife=3; //初始化我机生命数为3
Caption="小蜜蜂 剩余生命力 : " +IntTostr(nMyLife); //初始化Caption
BulletNode *CurNode=FirstNode;
while (CurNode->Next)
{
BulletNode *TmpNode=CurNode->Next;
CurNode->Next=CurNode->Next->Next;
delete TmpNode;
} //从第一个节点开始把已经产生的节点都删除,等待再分配
FirstNode->Next=NULL;
LastNode=FirstNode;
MyPlane.recPlane=TRect(180,288,180+pBmpMyPlane->Width,288+pBmpMyPlane->Height);
MyPlne.nFlag=1; //初始化我方飞机
for(int cx=0;cx<4;cx++)
{
EnemyPlaneGroup1[cx].rectPlane=TRect(90+cx*60,45,150+cx*60,90);
EnemyPlaneGroup1[cx].nFlag=1;
}
for(int i=0;i<5;i++)
{
EnemyPlaneGroup2[i].rectPlane=TRect(60+i*60,0,120+i*60,45);
EnemyPlaneGroup2[i].nFlag=1;
} //初始化两队敌机
bInit=true; //初始化完成
}

void CreatBG()
{
pBmpShow->Assign(pBmpBg);
pBmpShow->Canvas->Brush->Style=bsClear;
BulletNode*CurNode=FirstNode;
while (CurNode->Next) {
//如果是敌人的子弹,则把敌人子弹的图象拷贝到背景图上
if(CurNode->Next->nNodeKind==1)
pBmpShow->Canvas->BrushCopy)CurNode->Next->rectCur,
pBmpBullet,TRect(0,0,7,15),TColor(0x7f00ff));
//如果是我方的子弹,则把我方子弹的图象拷贝到背景图上
else if(CurNode->Next->nNodeKind==0)
pBmpShow->Canas->BrushCopy(CueNode->Next->rectCur,
pBmpBullet,TRect(0,0,9,9),TColor(0x7f00ff));
CurNode=CurNode->Next;
}
//把我飞机图象拷贝到背景上
pBmpShow->Canvas->BrushCopy(MyPlane.rectPlane,pBmpMyPlane,
TRect(0,0,80,60),TColor(0xf00ff));
//如果敌机的标记为1(正常),则将其图象拷贝到背景图上
for(int cx=0;cx<5;cx++)
if (EnemyPlaneGroup2[cx].nFlag)
pBmpShow->Canvas->BrushCopy->(EnemyPlaneGroup2[cx].recPlane,
pbmpBoss.TRect(0,0,60,45),TColor(0x7f00ff));
for(int cx=0;cx<4;cx++)
if (EnemyPlaneGroup1[cx].nFlag)
pBmpShow->Canvas->BrushCopy->(EnemyPlaneGroup1[cx].recPlane,
pbmpBoss.TRect(0,0,60,45),TColor(0x7f00ff));
}

void TForm1::CreateNewBullet(TRrect rectTmp,int nFlag
{
BulletNode*CurNode=LastNode; //从最后一个指针继续向后产生
CurNode->Next=new BulletNode;
CurNode->Next->rectCur=rectTmp;
CurNode->Next->nNodeKind=nFlag;
CurNode->Next->Next=NULL;
LastNode=CurNode->Next; //把最后一个指针向后移动
}

void TForm1::MoveBullet()
{
BulletNode*CurNode=FirstNode; //从头节点(第1颗子弹开始遍历所有的子弹
while(CurNode->Next)
{
if (CurNode->Next->nNodeKind==0)
{
CurNode->Next->rectCur.Top-=5; //如果是我方子弹则向上移5个像素
if(CurNode->Next->rect.Top<0)
{
BulletNode*TmpNode=CurNode->Next; //如果移动以后出界则子弹被删除
CurNode->Next=CurNode->Next->Next; //调节链表的指针
delete TmpNode;
continue;
}
CurNode->Next->rectCur.Bottom-=5;
CurNode=CurNode->Next;
}
else if (CurNode->Next->nNodeKind==1)
{
CurNode->Next->rectCur.Top+=10; //如果是敌方子弹则向下移10上像素
if (CurNode->Next->rectCur.Top>347)
{
BulletNode*TmpNode=CurNode->Next;
CurNode->Next=CurNode->Next->Next; //调整链表的指针以保证其正确性
delete tmpNode;
continue;
}
CurNode->Next->rectCur.Bottom+=10;
CurNode=CurNode->Next;
}
}
LastNode=CurNode;

}

void TForm1::MoveEmeny()
{
if(EnemyPlaneGroup2[0].rectPlane.Life<0)
nEnemyMoveDir=1; //如果飞机向左移出界,则变更移动的方向
else if (EnemyPlaneGroup2[4].rectPlane.Right>433)
nEnemyMoveDir=-1; //如果飞机向右移出界,则变更移动方向
for(int i=1;i<5;i++)
{
EnemyPlaneGroup2[i].rectPlane.Left+=nEnemyMoveDir*10;
EnemyPlaneGroup2[i].rectPlane.Right+=nEnemyMoveDir*10;
}
for (int i=0;i<4;i++)
{
EnemyPlaneGroup1[i].rectPlane.Left+=nEnemyMoveDir*10;
EnemyPlaneGroup1[i].rectPlane.Right+=nEnemyMoveDir*10;
}
}


...全文
54 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
netsys2 2003-08-20
  • 打赏
  • 举报
回复
直接说吧,什么地方出问题了?

1,221

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧