我寫了一個~但是他跑不到終點~可以請大家一起來看看嗎~謝謝嚕~
11/30要交作業了 QQ
語法:
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <conio.h>
#include <sys/types.h>
#include <sys/timeb.h>
// 0:未走過的路 1:牆 2:走過的路 5:起點 6:終點
#define xi 25
#define yj 25
int visit(int, int);
int maze[xi][yj];
int path[xi*yj]={0},p;
int si = rand()%xi, sj = rand()%yj; // 起點座標變數
int sii, sjj;
int ei = rand()%xi, ej = rand()%yj; // 終點座標變數
int eii, ejj;
int success = false; //行走成功與否,初始值是否
////////////////////////////////我是分隔線//////////////////////////////////////////
int visit(int x, int y) //傳入的是起點座標
{
p = 0;
while(!(x==eii && y==ejj)) /*檢查終點*/
{
if(maze[y][x-1]==0) /*檢查左邊*/
{
maze[y][x]=2; /*左邊有通路*/
path[p]=1; /*儲存走的方向*/
p++;
x--;
}
else /*左邊沒通路*/
{
if(maze[y+1][x]==0) /*檢查下面*/
{
maze[y][x]=2; /*下面有通路*/
path[p]=2; /*儲存走的方向*/
p++;
y++;
}
else /*下面沒通路*/
{
if(maze[y][x+1]==0) /*檢查右邊*/
{
maze[y][x]=2; /*右邊有通路*/
path[p]=3; /*儲存走的方向*/
p++;
x++;
}
else /*右邊沒通路*/
{
if(maze[y-1][x]==0) /*檢查上面*/
{
maze[y][x]=2; /*上面有通路*/
path[p]=4; /*儲存走的方向*/
p++;
y--;
}
else /*都沒有通路時*/
{
if(p)
{
maze[y][x]=3;
switch(path[p-1])
{
case 1:
x++;
break;
case 2:
y--;
break;
case 3:
x--;
break;
case 4:
y++;
break;
}
p--;
path[p]=0;
}
else
{
x=eii;
y=ejj;
success=1;
}
}
}
}
}
}
return success;
}
////////////////////////////////我是分隔線//////////////////////////////////////////
void draw()
{
int i,j;
for(int k = 0; k < xi; k++) //產生地圖外框
{
maze[k][0] = 1;
maze[0][k] = 1;
maze[xi-1][k] = 1;
maze[k][xi-1] = 1;
}
for(i = 1; i < xi-1; i++) //隨機畫地圖,只有0跟1
{
for(j = 1; j < yj-1; j++)
{
if(!(rand()%4)) //為了不要讓障礙出現的太頻繁
{ //所以用(!rand()%4)
maze[i][j] = 1; //就有四分之一的機會產生障礙了
}
}
}
switch((rand()%4)) //隨機產生0,1,2,3//隨機選擇起點
{
case 0:
if(sj != 0 && sj != 19)
{
maze[sj][0] = 0;
sjj = sj;
sii = 0;
}
else if(sj == 0)
{
maze[sj+1][0] = 0;
sjj = sj+1;
sii = 0;
}
else if(sj == 19)
{
maze[sj-1][0] = 0;
sjj = sj-1;
sii = 0;
}
break;
case 1:
if(si != 0 && si != 19)
{
maze[0][si] = 0;
sjj = 0;
sii = si;
}
else if(si == 0)
{
maze[0][si+1] = 0;
sjj = 0;
sii = si+1;
}
else if(si == 19)
{
maze[0][si-1] = 0;
sjj = 0;
sii = si-1;
}
break;
case 2:
if(si != 0 && si != 19)
{
maze[yj-1][si] = 0;
sjj = yj-1;
sii = si;
}
else if(si == 0)
{
maze[yj-1][si+1] = 0;
sjj = yj-1;
sii = si+1;
}
else if(si == 19)
{
maze[yj-1][si-1] = 0;
sjj = yj-1;
sii = si-1;
}
break;
case 3:
if(sj != 0 && sj != 19)
{
maze[sj][xi-1] = 0;
sjj = sj;
sii = xi-1;
}
else if(sj == 0)
{
maze[sj+1][xi-1] = 0;
sjj = sj+1;
sii = xi-1;
}
else if(sj == 19)
{
maze[sj-1][xi-1] = 0;
sjj = sj-1;
sii = xi-1;
}
break;
}
switch((rand()%4)) //隨機產生0,1,2,3//隨機選擇終點
{
case 0:
if(ej != 0 && ej != 19)
{
maze[ej][0] = 0;
ejj = ej;
eii = 0;
}
else if(ej == 0)
{
maze[ej+1][0] = 0;
ejj = ej+1;
eii = 0;
}
else if(ej == 19)
{
maze[ej-1][0] = 0;
ejj = ej-1;
eii = 0;
}
break;
case 1:
if(ei != 0 && ei != 19)
{
maze[0][ei] = 0;
ejj = 0;
eii = ei;
}
else if(ei == 0)
{
maze[0][ei+1] = 0;
ejj = 0;
eii = ei+1;
}else if(ei == 19)
{
maze[0][ei-1] = 0;
ejj = 0;
eii = ei-1;
}
break;
case 2:
if(ei != 0 && ei != 19)
{
maze[yj-1][ei] = 0;
ejj = yj-1;
eii = ei;
}
else if(si == 0)
{
maze[yj-1][ei+1] = 0;
ejj = yj-1;
eii = ei+1;
}
else if(si == 19)
{
maze[yj-1][ei-1] = 0;
ejj = yj-1;
eii = ei-1;
}
break;
case 3:
if(ej != 0 && ej != 19)
{
maze[ej][xi-1] = 0;
ejj = ej;
eii = xi-1;
}
else if(ej == 0)
{
maze[ej+1][xi-1] = 0;
ejj = ej+1;
eii = xi-1;
}
else if(ej == 19)
{
maze[ej-1][xi-1] = 0;
ejj = ej-1;
eii = xi-1;
}
break;
}
for(i = 0; i < xi; i++) //隨機畫通路
{
for(j = 0; j < yj; j++)
{
printf("%d",maze[i][j]);
// select = rand()%4; // 1
// // 0 2
// maze[i][j] = select; // 3
// if(maze[i][j] == 0) maze[i][j] =
// if(maze[i][j] == 1)
// if(maze[i][j] == 2)
// if(maze[i][j] == 3)
}
}
}