📄 patternrose.cpp
字号:
if(++iArrayIndex >= 10000)
return 0;
yy+= nInterval;
}
else
yy+= nInterval;
}
X+= nInterval;
yy=0;
}
n+=2;
X += 10;
yy=0;
}
}
*(nArray+ iArrayIndex * 2) = 0;
*(nArray + iArrayIndex * 2 +1) = 0;
return TRUE;
}
BOOL PatternRose::Create(int iWorldX,int iWorldY,int nColor,char * szChar)
{
Destroy();
int i;
if(nColor <= 3)
{
for(i=0;i<MAX_PatternRoseANI;i++)
{
char szTitle[100];
if(i <2)
sprintf(szTitle,"rose%d_ani%d" ,nColor,i);
if(i == 2)
strcpy(szTitle,"paint");
if(i == 3)
strcpy(szTitle,"grass");
strcpy(m_szFileName[i],szTitle);
}
strcpy(m_szFileName[MAX_PatternRoseANI] ,"");
strcpy(m_szFileName[MAX_PatternRoseANI + 1] ,"");
strcpy(m_szFileName[MAX_PatternRoseANI + 2] ,"");
strcpy(m_szFileName[MAX_PatternRoseANI + 3] ,"");
}
else
{
int icolor = 1;
if(nColor >4)
icolor = 4;
for(i=0;i<3;i++)
sprintf(m_szFileName[i],"rose%d_ani%d" ,icolor++,0);
icolor = 1;
if(nColor >4)
icolor = 4;
for(i=3;i<6 ;i++)//载入飘的动画
sprintf(m_szFileName[i],"rose%d_ani%d" ,icolor++,1);
for(i = 0;i<2;i++)
{
char szTitle[100];
if(i ==0)
strcpy(szTitle,"paint");
else
strcpy(szTitle,"grass");
if(nColor>4)
strcat(szTitle,"1");
strcpy(m_szFileName[6+i],szTitle);
}
}
m_nStatus =PATTERNROSE_CREATE;
int *ArrayRose = (int *)malloc(sizeof(int)*10000);
GetPoint(ArrayRose,szChar,iWorldX, iWorldY);
for(i = 1;i<= 10000;i++)
{
if(ArrayRose[i*2] == 0 && ArrayRose[i*2+1] == 0)// the end of array
break;
int nOrigWorldPointX = ArrayRose[i* 2] + rand()%6;
int nOrigWorldPointY = ArrayRose[i * 2 + 1] + rand()%6;
CPatternRose * pObjPatternRose = new CPatternRose;
if(nColor <= 3)
{
pObjPatternRose->SetPicture(m_szFileName,0,1,2,3,nColor);
}
else
{
int nflower = rand()%3;
pObjPatternRose->SetPicture(m_szFileName,nflower, nflower + 3,6,7,nflower);
}
pObjPatternRose->Create (nOrigWorldPointX ,nOrigWorldPointY);
m_dequePatternRose.push_back(pObjPatternRose);
}
free(ArrayRose);
return 1;
}
int * PatternRose::GetBmpPoint(int index,char * szpFileName)
{
FILE * P=NULL;
P=fopen(szpFileName,"rb");
if(!P)
return 0;
fseek(P,index * 700*2*sizeof(int),SEEK_SET);
memset(&m_nPoint[0],0,700*2*4);
if(!feof(P))
fread(&m_nPoint[0],4,700*2,P);
else
{
fclose(P);
return 0;
}
fclose(P);
return &m_nPoint[0];
}
BOOL PatternRose::Create(int iWorldX,int iWorldY,int nType,int nColor)
{
Destroy();
int i;
if(nColor <= 3)
{
for(i=0;i<MAX_PatternRoseANI;i++)
{
char szTitle[100];
if(i <2)
sprintf(szTitle,"rose%d_ani%d" ,nColor,i);
if(i == 2)
strcpy(szTitle,"paint");
if(i == 3)
strcpy(szTitle,"grass");
strcpy(m_szFileName[i],szTitle);
}
strcpy(m_szFileName[MAX_PatternRoseANI] , "");
strcpy(m_szFileName[MAX_PatternRoseANI + 1] , "");
strcpy(m_szFileName[MAX_PatternRoseANI + 2] , "");
strcpy(m_szFileName[MAX_PatternRoseANI + 3] , "");
}
else
{
int icolor = 1;
if(nColor >4)
icolor = 4;
for(i=0;i<3;i++)
sprintf(m_szFileName[i],"rose%d_ani%d" ,icolor++,0);
icolor = 1;
if(nColor >4)
icolor = 4;
for(i=3;i<6 ;i++)//载入飘的动画
sprintf(m_szFileName[i],"rose%d_ani%d" ,icolor++,1);
for(i = 0;i<2;i++)
{
char szTitle[100];
if(i ==0)
strcpy(szTitle,"paint");
else
strcpy(szTitle,"grass");
if(nColor>4)
strcat(szTitle,"1");
strcpy(m_szFileName[6+i],szTitle);
}
}
m_nStatus =PATTERNROSE_CREATE;
int * ArrayRose;
switch(nType)
{
case 0:
case 1:
ArrayRose = &ArrayRose1[0];
break;
case 2:
ArrayRose = &ArrayRose2[0];
break;
case 3:
ArrayRose = &ArrayRose3[0];
break;
case 4:
ArrayRose = &ArrayRose4[0];
break;
case 5:
ArrayRose = &ArrayRose5[0];
break;
default:
ArrayRose = GetBmpPoint(nType-6,"./data/weather/Rose/patternRose.dat");
if(!ArrayRose)
ArrayRose = &ArrayRose1[0];
break;
}
for(i = 0;i<= 700;i++)
{
if(ArrayRose[i*2] == 0 && ArrayRose[i*2+1] == 0)// the end of array
break;
int nOffsetX,nOffsetY;
if(nType <=5)
{
nOffsetX= rand()%6;
nOffsetY = rand()%6;
}
else
{
nOffsetX =0;
nOffsetY =0;
}
int nOrigWorldPointX = iWorldX + ArrayRose[i* 2] * 8 + nOffsetX;
int nOrigWorldPointY = iWorldY + ArrayRose[i * 2 + 1] * 12 + nOffsetY;
CPatternRose * pObjPatternRose = new CPatternRose;
if(nColor <= 3)
{
pObjPatternRose->SetPicture(m_szFileName,0,1,2,3,nColor);
}
else
{
int nflower = rand()%3;
pObjPatternRose->SetPicture(m_szFileName,nflower, nflower + 3,6,7,nflower);
}
pObjPatternRose->Create (nOrigWorldPointX ,nOrigWorldPointY);
m_dequePatternRose.push_back(pObjPatternRose);
}
return 1;
}
void PatternRose::Destroy()
{
if(m_nStatus == PATTERNROSE_NONE || m_nStatus == PATTERNROSE_DESTROY)
return;
int i;
for(i =0 ;i<m_dequePatternRose.size();i++)
SAFE_DELETE(m_dequePatternRose[i]);
m_dequePatternRose.clear();
m_nStatus = PATTERNROSE_DESTROY;
}
void PatternRose::Process()
{
int i;
int iFlag = 1;
for(i=0;i<m_dequePatternRose.size();i++)
{
m_dequePatternRose[i]->Process();
if(m_dequePatternRose[i]->m_iStatus != ROSE_DESTROY)//PATTERNROSE_DESTROY
iFlag = 0;
}
if(iFlag)
Destroy();
}
//==========================================================================
//
// PatternRose INTERFACE
//==========================================================================
BOOL CPatternRoseSys::Create(int iWorldX,int iWorldY,int nColor,char * szChar)
{
int nsl = strlen(szChar);
nsl = nsl * 24*8 + (nsl-2)/2*15;
iWorldX -= nsl/4;
iWorldY -= 48* 2;
CMyPos pos ;
g_objGameMap.GetViewPos(pos);
if( abs( pos.x + 300 - iWorldX) < 1500 && abs( pos.y + 200 - iWorldY) < 800)
{
PatternRose * pObjPatternRose = new PatternRose;
if(pObjPatternRose)
{
pObjPatternRose->Create(iWorldX,iWorldY,nColor,szChar);
m_DequePatternRose.push_back(pObjPatternRose);
return 1;
}
}
return 0;
}
BOOL CPatternRoseSys::Create(int iWorldX,int iWorldY,int nType,int nColor)
{
switch(nType)
{
case 1:
case 2:
case 3:
iWorldX -=30;
iWorldY -= 20;
break;
case 4:
case 5:
iWorldX -= 80;
iWorldY -= 30;
break;
default:
iWorldX -= 20;
iWorldY -= 20;
break;
}
CMyPos pos ;
g_objGameMap.GetViewPos(pos);
if( abs( pos.x + 600 - iWorldX) < 2000 && abs( pos.y + 300 - iWorldY) < 1200)
{
PatternRose * pObjPatternRose = new PatternRose;
if(pObjPatternRose)
{
pObjPatternRose->Create(iWorldX,iWorldY,nType,nColor);
m_DequePatternRose.push_back(pObjPatternRose);
return 1;
}
}
return 0;
}
void CPatternRoseSys::Destroy()
{
int i;
for(i =0;i<m_DequePatternRose.size();i++)
{
SAFE_DELETE(m_DequePatternRose[i]);
}
m_DequePatternRose.clear();
}
void CPatternRoseSys::Show()
{
int i,iDestroyFlag = 1;
for(i =0;i<m_DequePatternRose.size();i++)
{
m_DequePatternRose[i]->Process();
if(m_DequePatternRose[i]->m_nStatus != PATTERNROSE_DESTROY)
iDestroyFlag =0;
}
if(iDestroyFlag)
{
for(i =0;i<m_DequePatternRose.size();i++)
SAFE_DELETE( m_DequePatternRose[i]);
m_DequePatternRose.clear();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -