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

📄 role.cpp

📁 仙剑奇侠传游戏演示源代码,vc++6.0 win32环境下的图形图象编程,动画演示
💻 CPP
字号:
// Role.cpp: implementation of the CRole class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "Role.h"
UINT CRole::RoleNum ;
CRole::CRole(HWND _hWnd,HDC mDC)
{
	RoleNum+=1;
    RoleID=RoleNum;
	hWnd=_hWnd;
    SetTimer(hWnd,RoleID,50,NULL);
	HDC hDC=GetDC(hWnd);
	RoleDC=CreateCompatibleDC(hDC);
	cRoleDC=CreateCompatibleDC(hDC);
	ReleaseDC(hWnd,hDC);
}

CRole::~CRole()
{
    ReleaseDC(hWnd,RoleDC);
    ReleaseDC(hWnd,cRoleDC);
	DeleteObject(RoleBitmap);
	DeleteObject(cRoleBitmap);
}
void CRole::DoRole(HDC mDC)//开始角色扮演
{
	if(!(i<0||i>500||j<0||j>400))//方向控制
	{
		int dz=10;
		if(Direction==1)
		{
		   i+=dz/3;
		   j+=0;
		}
		if(Direction==2)
		{
		   i+=dz/3;
		   j-=dz/3;
		}
		if(Direction==3)
		{
		   i-=0;
		   j-=dz/3;
		}
		if(Direction==4)
		{
		   i-=dz;
		   j-=dz;
		}
		if(Direction==5)
		{
		   i-=dz/3;
		   j+=0;
		}
		if(Direction==6)
		{
		   i-=dz/3;
		   j+=dz/3;
		}
		if(Direction==7)
		{
		   i+=0;
		   j+=dz/3;
		}
		if(Direction==8)
		{
		   i+=dz/3;
		   j+=dz/3;
		}
	}
}
void CRole::ReDraw(HDC mDC)//重画角色
{
	if(RoleID==1)
	{
		BitBlt(mDC,i,j,RoleBm.bmWidth/5 ,RoleBm.bmHeight/10 ,cRoleDC,100*PicIndex,100*Direction,SRCPAINT);
		BitBlt(mDC,i,j,RoleBm.bmWidth/5 ,RoleBm.bmHeight/10 ,RoleDC,100*PicIndex,100*Direction,SRCAND);
	}
	else
	{
		BitBlt(mDC,i,j,RoleBm.bmWidth ,RoleBm.bmHeight ,cRoleDC,0,0,SRCPAINT);
		BitBlt(mDC,i,j,RoleBm.bmWidth ,RoleBm.bmHeight ,RoleDC,0,0,SRCAND);
	}
	char st[11]="";
	DToStr(st,RoleID);
    SetBkMode(mDC,0);                             //文字背景透明
	SetTextColor(mDC,RGB(250,10,20));
	TextOut(mDC,i+130,j+30,st,1);
}
void CRole::SetRolePic(char *_RolePic)//设置角色使用的角色图片
{
	RolePic=_RolePic;

    RoleBitmap=(HBITMAP )::LoadImage(NULL,
		                          (LPCTSTR)RolePic,
								  IMAGE_BITMAP,
								  0,0,
								  LR_CREATEDIBSECTION|LR_DEFAULTSIZE|LR_LOADFROMFILE); 
	cRoleBitmap=(HBITMAP )::LoadImage(NULL,
		                          RolePic,
								  IMAGE_BITMAP,
								  0,0,
								  LR_CREATEDIBSECTION|LR_DEFAULTSIZE|LR_LOADFROMFILE);
	GetObject(RoleBitmap,sizeof(BITMAP),(LPVOID)&RoleBm);
	SelectObject(RoleDC,RoleBitmap);
	SelectObject(cRoleDC,cRoleBitmap);	BYTE *px1=(BYTE *)GlobalAlloc(GPTR,3*RoleBm.bmWidth *RoleBm.bmHeight);
	BYTE *px2=(BYTE *)GlobalAlloc(GPTR,3*RoleBm.bmWidth *RoleBm.bmHeight);
	GetBitmapBits(RoleBitmap,3*RoleBm.bmWidth *RoleBm.bmHeight,px1);
	GetBitmapBits(cRoleBitmap,3*RoleBm.bmWidth *RoleBm.bmHeight,px2);
	for(int z=0;z<3*RoleBm.bmWidth *RoleBm.bmHeight;z+=3)
		{
			if(((px1[z]==255)&& (px1[z+1]==255)&&(px1[z+2]==255)))
			{
				px2[z]=0;
				px2[z+1]=0;
				px2[z+2]=0;
			}
			else
			{
				px2[z]=255;
				px2[z+1]=255;
				px2[z+2]=255;
			}
		}
	SetBitmapBits(cRoleBitmap,3*RoleBm.bmWidth *RoleBm.bmHeight,px2);
	GlobalFree((HGLOBAL)px1);
	GlobalFree((HGLOBAL)px2);
}

char * CRole::DToStr(char * st,DWORD X)//双字转换成字符串 
{ 
    DWORD x=X;
	char st1[11]="",st2[2]="";
	int len=0;
	DWORD chu=1;
	st2[1]=char(0);
    while(chu!=0)
	{	
		chu=x/10;
		st2[0]=char(x%10+48);
		strcat(st1,st2);
		x=chu;
		len+=1;
	}
	for(int i=0;i<len;i++)
		st[i]=st1[len-i-1];
	st[len+1]=0;
	return st;
}
void CRole::ChangePic()//更换角色图象
{
   PicIndex++;
   if(PicIndex>4)PicIndex=0;
}

⌨️ 快捷键说明

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