我也不知到是不是迷宫问题也!!!!

cache333 2003-12-24 02:28:16
"将5个及5个以上同样颜色的彩球横、斜连在一起就可以消去,每当我去用一个颜色球去连(位子点到哪是哪)另一个相同颜色球时,这时就要判断通路,当前选中的球与选择的空格间有通路时则可以。每走一步随机产生3个球去填record[i][j]

但前可以得到点下的坐标PEN1[i][j] ,PEN2[i][j](i,j<9)我用record[9][9]记录9×9的方阵上已经有球的点record[i][j]=1,即从PEN1[i][j] 到PEN2[i][j]之间要找路即record[i][j]==0时
不知道如何实现啦
...全文
18 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
woaic 2003-12-29
  • 打赏
  • 举报
回复
呵呵!给我留言吧!
ckacka 2003-12-24
  • 打赏
  • 举报
回复
这个你就可以直接判断两点之间是否有其他的球,如果有,则不行;如果没有,则可以
cache333 2003-12-24
  • 打赏
  • 举报
回复
就是要找通路呀
doer_ljy 2003-12-24
  • 打赏
  • 举报
回复
UINT8 record[9][9]
写成
UINT8 record[M][M]好点吧!
另外就是找路的函数我们看懂,这个函数要实现什么功能啊!
cache333 2003-12-24
  • 打赏
  • 举报
回复
void SearchRoad()
应该改成BOOL性较为合理,只需要判断可以到达否? 画的工作另外完成!
cache333 2003-12-24
  • 打赏
  • 举报
回复
大家看看是否可行,是否需要改进


/* direc表示上一步运动方向 */
/* 并表示下一步运动方向 */
/* 0~3分别表示 左、上、右、下 */
#define M 9
#define N 9
UINT8 record[9][9]
struct square{
int x;
int y;
int direc;
}p[200];
int step=20;
int len=10;
int size=20;
int x=0,y=0,x0=0,y0=0;
int i=0,j=0,k=0,count=0;

void SearchRoad()
{
UINT8 direc=2;
UINT8 i=j=0;
UINT8 k=0;
while(i<M-1||j<N-1)
{
switch(direc){
case 0:
//以3,0,1,2(顺时针方向)的次序尝试
if(i<M-1&&record[i+1][j]==0)
{
y+=step;i++;
direc=3;
}
else if(j>0&&record[i][j-1]==0)
{
x-=step;j--;
direc=0;
}
else if(i>0&&record[i-1][j]==0)
{
y-=step;i--;
direc=1;
}
else
{
x+=step;j++;
direc=2;
}
p[k].x=x;
p[k].y=y;
p[k].direc=direc;
if(k>0)
{
count=k-1;
while(count>=0
&&(p[count].x!=p[k].x||p[count].y!=p[k].y))
count--;
if(count>=0){
k=count;
p[k].direc=direc;
i=(p[k].y-len)/step;
j=(p[k].x-len)/step;
}
}
k++;
break;
case 1:
if(j>0&&record[i][j-1]==0)
{
x-=step;j--;
direc=0;
}
else if(i>0&&record[i-1][j]==0)
{
y-=step;i--;
direc=1;
}
else if(j<N-1&&record[i][j+1]==0)
{
x+=step;j++;
direc=2;
}
else
{
y+=step;i++;
direc=3;
}
p[k].x=x;
p[k].y=y;
p[k].direc=direc;
if(k>0)
{
count=k-1;
while(count>=0
&&(p[count].x!=p[k].x||p[count].y!=p[k].y))
count--;
if(count>=0)
{
k=count;
p[k].direc=direc;
i=(p[k].y-len)/step;
j=(p[k].x-len)/step;
}
}
k++;
break;
case 2:
if(i>0&&record[i-1][j]==0)
{
y-=step;i--;
direc=1;
}
else if(j<N-1&&record[i][j+1]==0)
{
x+=step;j++;
direc=2;
}
else if(i<M-1&&record[i+1][j]==0)
{
y+=step;i++;
direc=3;
}
else
{
x-=step;j--;
direc=0;
}
p[k].x=x;
p[k].y=y;
p[k].direc=direc;
if(k>0)
{
count=k-1;
while(count>=0
&&(p[count].x!=p[k].x||p[count].y!=p[k].y))
count--;
if(count>=0)
{
k=count;
p[k].direc=direc;
i=(p[k].y-len)/step;
j=(p[k].x-len)/step;
}
}
k++;
break;
case 3:

if(j<N-1&&record[i][j+1]==0)
{
x+=step;j++;
direc=2;
}
else if(i<M-1&&record[i+1][j]==0)
{
y+=step;i++;
direc=3;
}
else if(j>0&&record[i][j-1]==0)
{
x-=step;j--;
direc=0;
}
else {
y-=step;i--;
direc=1;
}
p[k].x=x;
p[k].y=y;
p[k].direc=direc;
if(k>0)
{
count=k-1;
while(count>=0
&&(p[count].x!=p[k].x||p[count].y!=p[k].y))
count--;
if(count>=0)
{
k=count;
p[k].direc=direc;
i=(p[k].y-len)/step;
j=(p[k].x-len)/step;
}
}
k++;
break;
default :break;
}

}

有路可以走就去画球了,PEN2[i][j]是已知的

得到了PEN2[][]
/* drawman(x0,y0,len);
for(i=0;i<k-1;i++)
{

drawman(p[i].x,p[i].y,len);
delay(80000);
drawman(p[i].x,p[i].y,len);
}
drawman(p[i].x,p[i].y,len);
*/
}

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧