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

📄 dxlib.cpp

📁 一个VC游戏源码,带运行程序,供大家学习之用
💻 CPP
📖 第 1 页 / 共 2 页
字号:
}

int SetAnimate(ANIMATE* lpanimate,double x,double y,int step,int surcount,COLORREF keycolor,UINT type)
{
	lpanimate->x=x;
	lpanimate->y=y;
	lpanimate->play=1;
	lpanimate->step=step;
	lpanimate->surcount=surcount;
	lpanimate->keycolor=keycolor;
	lpanimate->visible=1;
	lpanimate->type=type;
	return 1;
}

int SetAnimatePos(ANIMATE* lpanimate,double x,double y)
{
	lpanimate->x=x;
	lpanimate->y=y;
	
	return 1;
}

int PlayAnimate(ANIMATE* lpanimate)
{
	if(lpanimate->step==0||lpanimate->surcount==0)return 0; //意外错误返回
	lpanimate->play=1;
	lpanimate->frame+=1;
	if(lpanimate->frame>(lpanimate->surcount*lpanimate->step))lpanimate->frame=0;
	lpanimate->cur=(lpanimate->frame/lpanimate->step)%lpanimate->surcount;
	return 1;
}

int StopAnimate(ANIMATE* lpanimate)
{
	lpanimate->play=0;
	lpanimate->frame=0;
	lpanimate->cur=0;
	return 1;
}

int SetCharacterPos(CHARACTER* lpcharacter,double x,double y)
{
	switch(lpcharacter->relation)
	{
	case CHARACTER_ANIMATE:
		int i;
		for(i=0;i<lpcharacter->lpanimate->surcount;i++)
		{
			SetGraphPos(&lpcharacter->lpanimate->graph[i],
			lpcharacter->x-lpcharacter->lpanimate->graph[i].xctrl,
			lpcharacter->y-lpcharacter->lpanimate->graph[i].yctrl+lpcharacter->doublevalue[Z]);
		}
		break;
	case CHARACTER_GRAPH:
		SetGraphPos(lpcharacter->lpgraph,
		lpcharacter->x-lpcharacter->lpgraph->xctrl,
		lpcharacter->y-lpcharacter->lpgraph->yctrl+lpcharacter->doublevalue[Z]);
		break;
	}
	SetRectPos(lpcharacter->colliderect,(int)lpcharacter->x,(int)lpcharacter->y,lpcharacter->width,lpcharacter->height);
	return 1;
}


BOOL Act(RECT RA, RECT RB, double Per)
{
	BOOL a = FALSE, b = FALSE, c = FALSE, d = FALSE;
	double Aadd_Top = (1 - Per / 100) * ((double)RA.bottom - (double)RA.top) / 2;
	double Aadd_Left = (1 - Per / 100) * ((double)RA.right - (double)RA.left) / 2;
	double Badd_Top = (1 - Per / 100) * ((double)RB.bottom - (double)RB.top) / 2;
	double Badd_Left = (1 - Per / 100) * ((double)RB.right - (double)RB.left) / 2;
	RECT rect;
	if(RA.right-RA.left>RB.right-RB.left)
	{
		rect=RA;
		RA=RB;
		RB=rect;
	}
	if(RA.left + (int)Aadd_Left < RB.right - (int)Badd_Left && RA.left + (int)Aadd_Left >= RB.left + (int)Badd_Left) a = TRUE;
	if(RA.right - (int)Aadd_Left < RB.right - (int)Badd_Left && RA.right - (int)Aadd_Left >= RB.left + (int)Badd_Left) b = TRUE;
	if(RA.bottom-RA.top>RB.bottom-RB.top)
	{
		rect=RA;
		RA=RB;
		RB=rect;
	}
	if(RA.top + (int)Aadd_Top < RB.bottom - (int)Badd_Top && RA.top + (int)Aadd_Top >= RB.top + (int)Badd_Top) c = TRUE;
	if(RA.bottom - (int)Aadd_Top < RB.bottom - (int)Badd_Top && RA.bottom - (int)Aadd_Top >= RB.top + (int)Badd_Top) d = TRUE;
	if ((a && c) || (a && d) || (b && c) || (b && d))
	{return TRUE;}
	else
	{return FALSE;}
}

HRESULT DrawLine(INT x1,INT y1,INT x2,INT y2,LPDIRECTDRAWSURFACE7* lplpsur,COLORREF color)
{
	DDSURFACEDESC2 ddsd;
	INT curx=x1;
	INT lx,ly,x_inc,y_inc,i,err=0,lx2,ly2;
	memset(&ddsd,0,sizeof(DDSURFACEDESC2));
	ddsd.dwSize=sizeof(DDSURFACEDESC2);
	DD_Call((*lplpsur)->Lock(NULL,&ddsd,DDLOCK_WAIT|DDLOCK_SURFACEMEMORYPTR,NULL));
	BYTE* surbuf=(BYTE*)ddsd.lpSurface;
	LONG lpitch=ddsd.lPitch;
	INT surwid=ddsd.dwWidth;
	INT surhgt=ddsd.dwHeight;
	BYTE* startbuf=surbuf;
	INT endbuf=surhgt*lpitch;
	BYTE r,g,b;
	WORD pix16;
	switch(bitcount)
	{
	case 15:
		surbuf=surbuf+(x1<<1)+y1*lpitch;
		break;
	case 16:
		surbuf=surbuf+(x1<<1)+y1*lpitch;
		break;
	case 24:
		surbuf=surbuf+(x1*3)+y1*lpitch;
		break;
	case 32:
		surbuf=surbuf+(x1<<2)+y1*lpitch;
		break;
	default:break;
	}
	lx=x2-x1;
	ly=y2-y1;
	if(lx>=0)
	{
		x_inc=1;
	}
	else
	{
		x_inc=-1;
		lx=-lx;
	}
	if(ly>=0)
	{
		y_inc=lpitch;
	}
	else
	{
		y_inc=-lpitch;
		ly=-ly;
	}
	lx2=lx<<1;
	ly2=ly<<1;
	if(lx>=ly)
	{
		err=ly2-lx;
		for(i=0;i<=lx;i++)
		{
			INT cur=(INT)(surbuf-startbuf);
			if(cur>=0&&curx<surwid&&curx>=0&&cur<=endbuf)
			{
				switch(bitcount)
				{
				case 15:
					r=RGB_GETBLUE(color)>>3;
					g=RGB_GETGREEN(color)>>3;
					b=RGB_GETRED(color)>>3;
					pix16=(r<<10)|(g<<5)|(b);
					*surbuf=(BYTE)(pix16&0xFF);
					*(surbuf+1)=(BYTE)(pix16>>8);
					break;
				case 16:
					r=RGB_GETBLUE(color)>>3;
					g=RGB_GETGREEN(color)>>2;
					b=RGB_GETRED(color)>>3;
					pix16=(r<<11)|(g<<5)|(b);
					*surbuf=(BYTE)(pix16&0xFF);
					*(surbuf+1)=(BYTE)(pix16>>8);
					break;
				case 24:
					*surbuf=RGB_GETBLUE(color);
					*(surbuf+1)=RGB_GETGREEN(color);
					*(surbuf+2)=RGB_GETRED(color);
					break;
				case 32:
					*surbuf=RGB_GETBLUE(color);
					*(surbuf+1)=RGB_GETGREEN(color);
					*(surbuf+2)=RGB_GETRED(color);
					break;
				default:break;
				}
			}
			if(err>=0)
			{
				err-=lx2;
				surbuf+=y_inc;
			}
			err+=ly2;
			switch(bitcount)
			{
			case 15:
				surbuf+=x_inc<<1;
				break;
			case 16:
				surbuf+=x_inc<<1;
				break;
			case 24:
				surbuf+=x_inc*3;
				break;
			case 32:
				surbuf+=x_inc<<2;
				break;
			default:break;
			}
			curx+=x_inc;
		}
	}
	else
	{
		err=lx2-ly;
		for(i=0;i<=ly;i++)
		{
			INT cur=(INT)(surbuf-startbuf);
			if(cur>=0&&curx<=surwid&&curx>=0&&cur<=endbuf)
			{
				switch(bitcount)
				{
				case 15:
					r=RGB_GETBLUE(color)>>3;
					g=RGB_GETGREEN(color)>>3;
					b=RGB_GETRED(color)>>3;
					pix16=(r<<10)|(g<<5)|(b);
					*surbuf=(BYTE)(pix16&0xFF);
					*(surbuf+1)=(BYTE)(pix16>>8);
					break;
				case 16:
					r=RGB_GETBLUE(color)>>3;
					g=RGB_GETGREEN(color)>>2;
					b=RGB_GETRED(color)>>3;
					pix16=(r<<11)|(g<<5)|(b);
					*surbuf=(BYTE)(pix16&0xFF);
					*(surbuf+1)=(BYTE)(pix16>>8);
					break;
				case 24:
					*surbuf=RGB_GETBLUE(color);
					*(surbuf+1)=RGB_GETGREEN(color);
					*(surbuf+2)=RGB_GETRED(color);
					break;
				case 32:
					*surbuf=RGB_GETBLUE(color);
					*(surbuf+1)=RGB_GETGREEN(color);
					*(surbuf+2)=RGB_GETRED(color);
					break;
				default:break;
				}
			}
			if(err>=0)
			{
				err-=ly2;
				switch(bitcount)
				{
				case 15:
					surbuf+=x_inc<<1;
					break;
				case 16:
					surbuf+=x_inc<<1;
					break;
				case 24:
					surbuf+=x_inc*3;
					break;
				case 32:
					surbuf+=x_inc<<2;
					break;
				default:break;
				}
				curx+=x_inc;
			}
			err+=lx2;
			surbuf+=y_inc;
		}
	}

	DD_Call((*lplpsur)->Unlock(NULL));
	return DD_OK;
}

int DrawRect(RECT rect,LPDIRECTDRAWSURFACE7* lplpsur,COLORREF color)
{
	DrawLine(rect.right,rect.top,rect.right,rect.bottom,lplpsur,color);
	DrawLine(rect.right,rect.bottom,rect.left,rect.bottom,lplpsur,color);
	DrawLine(rect.left,rect.bottom,rect.left,rect.top,lplpsur,color);
	DrawLine(rect.left,rect.top,rect.right,rect.top,lplpsur,color);
	return 1;
}

int ReleaseGraphs(GRAPH* graphs)
{
	int i;
	for(i=0;i<sizeof(graphs)/sizeof(GRAPH);i++)
	{
		SafeRelease(graphs[i].lpsur);
	}
	return 1;
}

int ReleaseAnimate(ANIMATE animate)
{
	int i;
	for(i=0;i<sizeof(animate.graph)/sizeof(GRAPH);i++)
		SafeRelease(animate.graph[i].lpsur);
	return 1;
}

int ReleaseAnimates(ANIMATE* animates)
{
	int i,j;
	for(i=0;i<sizeof(animates)/sizeof(ANIMATE);i++)
	{
		for(j=0;j<sizeof(animates[i].graph)/sizeof(GRAPH);j++)
		SafeRelease(animates[i].graph[j].lpsur);
	}
	return 1;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -