⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 myddraw.cpp

📁 坦克大战游戏.很值得学习的东东.希望对大家有帮助
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	}

}

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 + -