📄 myddraw.cpp
字号:
}
}
void MyDDraw::DrawEnemy(POINT p ,bool flash, int n)
{
// if(tank[n].m_dead){return ;}
POINT T;
if(!tank[n].MoveStop)
{
T=tank[n].Move(tank[n].ScreenXY,n,tank[n].MoveSpeed); //取得移动后坐标
}
else
{
int a=0;
T=tank[n].Move(tank[n].ScreenXY,n,a);
}
short py;
if(flash && !tank[n].MoveStop){py=32;}
else{py=0;}
pBBuf->BltFast(T.x , T.y , pOPlatemp[2] ,
&Rect(64+py,tank[n].BmpY,64+32+py,32+tank[n].BmpY),
DDBLTFAST_WAIT | DDBLTFAST_SRCCOLORKEY ); //把幕后暂存区中的位图贴到后缓冲区
}
RECT MyDDraw::Rect(int left, int top, int right, int bottom)
{
RECT tr;
tr.left = left;
tr.top = top;
tr.right = right;
tr.bottom = bottom;
return tr;
}
//DEL void MyDDraw::FreeDDraw()
//DEL {
//DEL
//DEL }
void MyDDraw::DrawText(char string[10] , POINT p , COLORREF crTransColor)
{
pPSur->GetSurfaceDesc(&desc); //取得幕后暂存区的信息
result=pPSur->GetDC( &hdc1 ); //取得幕后暂存区的DC
SetBkMode(hdc1,TRANSPARENT);
::SetTextColor(hdc1,crTransColor); //设置字体颜色
::TextOut(hdc1,p.x,p.y,string,10);
pPSur->ReleaseDC( hdc1 );
}
void MyDDraw::DrawWall()
{
int x=TILEW;
int y=WALLH-TILEH;
pBBuf->BltFast(((320+x)+x/2)+x/2,(3*TILEH+TILEH/2- WALLH)+ TILEH-TILEH/2, pOPlatemp[6], &Rect(0,0,WALLW,WALLH) , DDBLTFAST_WAIT | DDBLTFAST_SRCCOLORKEY );
pBBuf->BltFast(((320+x)+x/2)+x,(3*TILEH+TILEH/2- WALLH)-TILEH/6, pOPlatemp[8], &Rect(0,0,WALLW2,WALLH) , DDBLTFAST_WAIT | DDBLTFAST_SRCCOLORKEY );
pBBuf->BltFast((320+x)-10,(3*TILEH+TILEH/2- WALLH)-6, pOPlatemp[5], &Rect(0,0,WALLW2,WALLH) , DDBLTFAST_WAIT | DDBLTFAST_SRCCOLORKEY );
pBBuf->BltFast((320+x)+x/2,(3*TILEH+TILEH/2- WALLH)+TILEH/2, pOPlatemp[3], &Rect(0,0,WALLW,WALLH) , DDBLTFAST_WAIT | DDBLTFAST_SRCCOLORKEY );
pBBuf->BltFast((320+x)+x,(3*TILEH+TILEH/2- WALLH)+TILEH, pOPlatemp[4], &Rect(0,0,WALLW2,WALLH) , DDBLTFAST_WAIT | DDBLTFAST_SRCCOLORKEY );
//===================================
pBBuf->BltFast((320+x)+x/2,(3*TILEH+TILEH/2- WALLH)+ TILEH, pOPlatemp[6], &Rect(0,0,WALLW,WALLH) , DDBLTFAST_WAIT | DDBLTFAST_SRCCOLORKEY );
pBBuf->BltFast((320+x),(3*TILEH+TILEH/2- WALLH+TILEH)+TILEH/2, pOPlatemp[6], &Rect(0,0,WALLW,WALLH) , DDBLTFAST_WAIT | DDBLTFAST_SRCCOLORKEY );
pBBuf->BltFast((320+x)-x/2,(3*TILEH+TILEH/2- WALLH+TILEH)+TILEH/2+TILEH/4, pOPlatemp[7], &Rect(0,0,WALLW,WALLH) , DDBLTFAST_WAIT | DDBLTFAST_SRCCOLORKEY );
}
void MyDDraw::DrawRect(int &n)
{
static int tt;
if(OneSecond){tt++;}
if(tt>=20)
{
tt=0;
tank[n].showrect=false;
return;
}
pBBuf->BltFast(tank[n].ScreenXY.x+1,tank[n].ScreenXY.y+1,
pOPlatemp[3], &Rect(0,0,30,30) , DDBLTFAST_WAIT | DDBLTFAST_SRCCOLORKEY );
}
void MyDDraw::DrawPlayer(POINT p, bool flash)
{
player.MoveStop=tank[0].MoveStop;
if(!player.MoveStop)
{
player.Move(player.ScreenXY,0); //取得移动后坐标
}
else
{
int a=0;
static int tsp;
if(OneSecond){tsp++;}
if(tsp>=10){tsp=0;tank[0].MoveStop=false;}
}
tank[0].ScreenXY.x=player.ScreenXY.x;
tank[0].ScreenXY.y=player.ScreenXY.y;
short py;
if(flash && g_move){py=32;}
else{py=0;}
pBBuf->BltFast(p.x , p.y ,
pOPlatemp[2] , &Rect(py+player.BmpX,player.BmpY,
32+py+player.BmpX,32+player.BmpY),
DDBLTFAST_WAIT | DDBLTFAST_SRCCOLORKEY ); //把幕后暂存区中的位图贴到后缓冲区
}
void MyDDraw::DrawEnemyBullet(short way, int n)
{
static POINT p[11];
static short w[11];
if(!bullete[n].BulleteHit)
{
bullete[n].BulleteHit=bullete[n].Move(p[n],w[n],bullete[n].Speed,false);
if(bullete[n].BulleteHit)
{
bullete[n].ShowBomb=true;
HitBomb[n].x=bullete[n].ScreenXY.x;
HitBomb[n].y=bullete[n].ScreenXY.y;
}
pBBuf->BltFast(p[n].x , p[n].y , pOPlatemp[4] , &Rect(0,0,8,8),
DDBLTFAST_WAIT | DDBLTFAST_SRCCOLORKEY );
}
else
{
tank[n].GetBulleteStartPoint=true;
p[n].x=tank[n].ScreenXY.x+12;
p[n].y=tank[n].ScreenXY.y+12;
bullete[n].BulleteHit=false;
w[n]=way;
playsound[4]=true;
}
}
void MyDDraw::DrawPlayerBullet(short way)
{
static POINT p;
static short w;
if(!bullete[0].BulleteHit)
{
bullete[0].BulleteHit=bullete[0].Move(p,w,bullete[0].Speed,true);
if(bullete[0].BulleteHit)
{
bullete[0].ShowBomb=true;
HitBomb[0].x=bullete[0].ScreenXY.x;
HitBomb[0].y=bullete[0].ScreenXY.y;
}
pBBuf->BltFast(p.x , p.y , pOPlatemp[4] , &Rect(8,0,16,8),
DDBLTFAST_WAIT | DDBLTFAST_SRCCOLORKEY );
}
else
{
if(player.fire)
{
playsound[3]=true;
tank[0].GetBulleteStartPoint=true;
p.x=tank[0].ScreenXY.x+12;
p.y=tank[0].ScreenXY.y+12;
bullete[0].BulleteHit=false;
w=way;
}
}
}
void MyDDraw::DrawBlood(POINT p,short &blood, short &way)
{
player.blood=tank[0].blood;
short b=32;
if(way==1){b=0;}
//取得绘制位置
short x=p.x+4;
short y=p.y+b;
short bd,t,k;
if(blood==32){t=0,bd=24,k=2;}
if(blood==24){t=2,bd=18,k=4;}
if(blood==16){t=4,bd=12,k=6;}
if(blood==8){t=6,bd=6,k=8;}
if(blood==0){t=0,bd=0,k=0;}
pBBuf->BltFast(x , y , pOPlatemp[5] , &Rect(0,t,bd,k),
DDBLTFAST_WAIT | DDBLTFAST_SRCCOLORKEY );
}
void MyDDraw::DrawHitBomb(POINT &p,int n)
{
static short a;
if(flash){a+=32;}
if(a>=224){a=0;bullete[n].ShowBomb=false;}
pBBuf->BltFast(p.x-16 , p.y-16 , pOPlatemp[6] ,
&Rect(a,0,a+32,32),
DDBLTFAST_WAIT | DDBLTFAST_SRCCOLORKEY ); //把幕后暂存区中的位图贴到后缓冲区
int X1,Y1;
X1 =( p.x+4 -GAMET_X)/ 16;
Y1 =( p.y+4)/ 16;
if(Map[X1][Y1]==2){Map[X1][Y1]=0;}
}
void MyDDraw::DrawGress()
{
short x=0;
short y=0;
for(j=0;j<34;j++)
{
for(i=0;i<42;i++)
{
if(Map[i][j]==3) //在这里画草地
{
pBBuf->BltFast(i*16+GAMET_X ,j*16 , pOPlatemp[1],
&Rect(0,16,16,32) , DDBLTFAST_WAIT | DDBLTFAST_SRCCOLORKEY );
}
}
}
}
void MyDDraw::DrawThings(POINT ScreenXY,short kind)
{
short a=(kind-1)*23;
pBBuf->BltFast(ScreenXY.x ,ScreenXY.y , pOPlatemp[7],
&Rect(a,0,a+23,23) , DDBLTFAST_WAIT | DDBLTFAST_SRCCOLORKEY );
}
void MyDDraw::DrawBomb(POINT start,int n)
{
/* //清空结构体变量
memset(&desc,0,sizeof(desc));
desc.dwSize = sizeof(desc);
if(FAILED(pBBuf->Lock(NULL, &desc,
DDLOCK_SURFACEMEMORYPTR | DDLOCK_WAIT,
NULL)))
{return ;} //error
int mempitch = (int)desc.lPitch;
UCHAR *video_buffer = (UCHAR *)desc.lpSurface;
for(int index=0; index < 5000; index++) //点的密度
{
UCHAR color = rand()%256; //颜色
int x = rand()%200+GAMET_X; //位置
int y = rand()%50+start.y;
// plot the pixel
video_buffer[x+y*mempitch] = color;
}
if(FAILED(pBBuf->Unlock(NULL))){return;} */
//short a=(kind-1)*23;
short a=0;
short b=0;
POINT p;
p.x=start.x+16;
p.y=start.y+16;
tank[n].BoomNow=bomb.Boom(p);
if(tank[n].BoomNow)
{
playsound[6]=true;
for(i=0;i<100;i++)
{
if(bomb.kind[i]==0)
{
a=rand()% 3*8;
b=rand()% 3*8;
pBBuf->BltFast(bomb.bxy[i].x ,bomb.bxy[i].y , pOPlatemp[8],
&Rect(a,b,a+8,b+8) , DDBLTFAST_WAIT | DDBLTFAST_SRCCOLORKEY );
}
else
{
//在图片上的贴图位置索引
static short tx=0;
short ty=0;
if(bomb.COLOR[i]==6){ty=0;}
if(bomb.COLOR[i]==7){ty=16;}
if(bomb.COLOR[i]==8){ty=32;}
if(bomb.COLOR[i]==9){ty=48;}
pBBuf->BltFast(bomb.pxy[i].x ,bomb.pxy[i].y , pOPlatemp[9],
&Rect(tx*16,ty,tx*16+16,ty+16) , DDBLTFAST_WAIT | DDBLTFAST_SRCCOLORKEY );
if(OneFps){tx++;} //OneSecond halfsecond flash OneFps
if(tx>3){tx=0;}
/*
if(bomb.COLOR==0){ty=0;}
if(bomb.COLOR==1){ty=1;}
if(bomb.COLOR==2){ty=2;}
if(bomb.COLOR==3){ty=3;}
if(bomb.COLOR==4){ty=4;}*/
}
}
}
}
void MyDDraw::DrawDoop()
{
playsound[8]=true;
if(setdoop)
{
for(i=0;i<20;i++)
{
doops[i].x=rand () % (705-(GAMET_X+32)) + (GAMET_X+32);
doops[i].y=rand () % (513-32) + 32;
}
setdoop=false;
}
static int k;
static short a;
pBBuf->BltFast(doops[k].x , doops[k].y, pOPlatemp[10],
&Rect(a*48,0,a*48+48,48) , DDBLTFAST_WAIT | DDBLTFAST_SRCCOLORKEY );
if(flash)
{
a++;
if(a>7)
{
doops[k].x=doops[k].y=-1;
a=0;
k++;
if(k==20)
{
k=0;showdoop=false;
setdoop=true;PutDoop=0;
}
}
}
}
void MyDDraw::DrawMainMenu()
{
pBBuf->BltFast(3*GAMET_X ,2*GAMET_X , pOPlatemp[11],
&Rect(0,0,376,255) , DDBLTFAST_WAIT | DDBLTFAST_SRCCOLORKEY);
pBBuf->BltFast(260 ,295+MainMenuSelect, pOPlatemp[2],
&Rect(0,96,32,128) , DDBLTFAST_WAIT | DDBLTFAST_SRCCOLORKEY);
}
void MyDDraw::DrawGameOver()
{
static int y;
y++;
if(y>=2*GAMET_X){y=2*GAMET_X;}
pBBuf->BltFast(3*GAMET_X ,y, pOPlatemp[12],
&Rect(0,0,403,64) , DDBLTFAST_WAIT | DDBLTFAST_SRCCOLORKEY);
}
void MyDDraw::DrawPauseBmp()
{
pBBuf->BltFast(5*GAMET_X+32 ,3*GAMET_X, pOPlatemp[13] , &Rect(0,0,90,28),
DDBLTFAST_WAIT | DDBLTFAST_SRCCOLORKEY );
}
void MyDDraw::DrawStageBmp()
{
// for(i=0;i<10;i++){playsound[i]=false;}
short Y=0;
if(MainMenuSelect==0){Y=0;}
if(MainMenuSelect==32){Y=22;}
pBBuf->BltFast(5*GAMET_X ,3*GAMET_X, pOPlatemp[14],
&Rect(0,Y,95,22+Y) , DDBLTFAST_WAIT | DDBLTFAST_SRCCOLORKEY);
if(MainMenuSelect==0)
{
int a=file.MapIndex/100; //百位
int b=(file.MapIndex%100)/10; //十位
int c=(file.MapIndex%100)%10; //个位
pBBuf->BltFast(5*GAMET_X+115,3*GAMET_X, pOPlatemp[15],
&Rect(b*24,0,b*24+24,24) , DDBLTFAST_WAIT | DDBLTFAST_SRCCOLORKEY);
pBBuf->BltFast(5*GAMET_X+140,3*GAMET_X, pOPlatemp[15],
&Rect(c*24,0,c*24+24,24) , DDBLTFAST_WAIT | DDBLTFAST_SRCCOLORKEY);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -