易码技术论坛

 找回密码
 加入易码
搜索
查看: 108602|回复: 4

一个计算移动范围的代码(LAVA)

[复制链接]
发表于 2005-5-14 11:12:00 | 显示全部楼层
错误:=左边操作数必须是变量发生在124行
 楼主| 发表于 2005-5-14 12:42:00 | 显示全部楼层
出错是因为发帖时md[j][ i]被变成md[j],所以把md[j]全部替换成md[j][ i]就好了

怎样能取消UBB标签呢?
发表于 2005-5-14 12:59:00 | 显示全部楼层
在LAVA中就不要想着计算范围了
使用写好的数组代替他是最现实的
 楼主| 发表于 2005-5-14 14:49:00 | 显示全部楼层
我也怀疑计算范围的效果,所以才发上来请大家测试
 楼主| 发表于 2005-3-2 15:43:52 | 显示全部楼层 |阅读模式
一个用于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编辑过]

您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

Archiver|手机版|小黑屋|EMAX Studio

GMT+8, 2024-5-6 09:44 , Processed in 0.010146 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表