一个用于SLG的计算移动范围的演示代码(LAVA),希望大家帮忙实机测试一下速度,告诉我闪烁一次的时间是多少,移动时的流畅度等等,谢谢!
#define MapWidth 12
#define MapHeight 6
#define scrMapWidth 9
#define scrMapHeight 5
#define HeroX 4
#define HeroY 2
char mdata[MapHeight][MapWidth]={
1,0,0,0,0,0,0,0,1,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,
1,0,1,0,1,0,1,0,1,0,1,0,
0,0,0,0,0,0,0,0,0,0,0,0,
1,1,0,1,0,0,0,0,0,0,0,0
};
char md[MapHeight][MapWidth];
char Pic[]={
//grass
20,82,21,10,89,93,82,72,42,138,169,160,64,138,82,168,
90,169,17,113,85,181,53,21,53,86,18,82,42,2,32,66,
//water
127,127,240,240,15,15,254,254,253,253,227,195,60,60,251,251,
247,247,15,15,240,240,239,239,223,223,60,60,195,195,191,191,
//black
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255
};
char chkm(int x,int y)
{
if(y<0||x<0||y>MapHeight-1||x>MapWidth-1||mdata[y][x]==1)return 0;
return 1;
}
void FindDist(int x,int y,char steps)
{
if(md[y][x]<steps)md[y][x]=steps;
if(steps==1)
{
return;
}
else
{
if(chkm(x,y-1))
FindDist(x,y-1,steps-1);
if(chkm(x,y+1))
FindDist(x,y+1,steps-1);
if(chkm(x-1,y))
FindDist(x-1,y,steps-1);
if(chkm(x+1,y))
FindDist(x+1,y,steps-1);
}
}
void RFMAP(int x,int y)
{
int i,j,pi,pj;
pj=y-HeroY;
pi=x-HeroX;
for(j=0;j<scrMapHeight;j++)
{
for(i=0;i<scrMapWidth;i++)
{
if(pi+i<0||pi+i>=MapWidth||pj+j>=MapHeight||pj+j<0)
WriteBlock(i*16,j*16,16,16,1,Pic+64);
else
WriteBlock(i*16,j*16,16,16,1,Pic+32*mdata[pj+j][pi+i]);
}
}
Refresh();
}
void FlashMap(int x,int y)
{
int i,j,pi,pj;
pj=y-HeroY;
pi=x-HeroX;
for(j=0;j<scrMapHeight;j++)
{
for(i=0;i<scrMapWidth;i++)
if(!(pi+i<0||pi+i>=MapWidth||pj+j>=MapHeight||pj+j<0)&&md[pj+j][pi+i])
WriteBlock(i*16,j*16,16,16,5,Pic+64);
}
Refresh();
}
void main()
{
int i,j,x,y;
x=5;
y=2;
RFMAP(x,y);
FindDist(x,y,3);
while(1)
{
FlashMap(x,y);
Delay(80);
if(CheckKey(23))
{
if(x>0)x--;
for(j=0;j<MapHeight;j++)
for(i=0;i<MapWidth;i++)
md[j][ i]=0;
FindDist(x,y,3);
RFMAP(x,y);
}
if(CheckKey(22))
{
if(x<MapWidth-1)x++;
for(j=0;j<MapHeight;j++)
for(i=0;i<MapWidth;i++)
md[j][ i]=0;
FindDist(x,y,3);
RFMAP(x,y);
}
if(CheckKey(21))
{
if(y<MapHeight-1)y++;
for(j=0;j<MapHeight;j++)
for(i=0;i<MapWidth;i++)
md[j][ i]=0;
FindDist(x,y,3);
RFMAP(x,y);
}
if(CheckKey(20))
{
if(y>0)y--;
for(j=0;j<MapHeight;j++)
for(i=0;i<MapWidth;i++)
md[j][ i]=0;
FindDist(x,y,3);
RFMAP(x,y);
}
if(CheckKey(27))
{
break;
}
}
getchar();
}
[此贴子已经被作者于2005-8-15 18:35:07编辑过]
|