唐老鴨
|
分享:
▲
▼
剛花了點時間幫你把自動產生迷宮的程式寫出來了 ..... 33*33的迷宮應該夠你用了吧.... 至於走的方法請你自己參考程式區有你要的寫法.... 下面我幫你加了些註解... 但也許對你會有些複雜.... 請自己努力看懂吧.... 不然就參考一些有關遊戲設計的書吧.... 我自己也有東西要做.... 所以我沒時間解釋給你聽 .... 複製程式
#include <iostream.h>
#include <stdlib.h>
#include <time.h>
#define row 35
#define column 35
int maze[row][column];
void generatemaze(int x,int y)
{
int direction;
maze[x][y] |= 0x1; // 標示此格已設定
while (maze[x][y+2]==0 || maze[x+2][y]==0 || maze[x][y-2]==0 || maze[x-2][y]==0) // 如果不是外牆
{
direction = rand()%4+1; // 決定下一個位置
if (direction==1 && maze[x][y+2]==0) // 向右走
{
maze[x][y+1] |= 0x1; // 拆掉右牆
generatemaze(x,y+2);
}
else if (direction==2 && maze[x-2][y]==0) // 向上走
{
maze[x-1][y] |= 0x1; // 拆掉上牆
generatemaze(x-2,y);
}
else if (direction==3 && maze[x][y-2]==0) // 向左走
{
maze[x][y-1] |= 0x1; // 拆掉右牆
generatemaze(x,y-2);
}
else if (direction==4 && maze[x+2][y]==0) // 向下走
{
maze[x+1][y] |= 0x1; // 拆掉上牆
generatemaze(x+2,y);
}
}
}
void main()
{
int Si=2,Sj=2,Ei=row-3,Ej=column-3;
int x,y;
srand(time(NULL));
for (x=0;x<row;x++)
{
for (y=0;y<column;y++)
{
if (x==0 || y==0 || y==1 || x==row-2 || x==row-1 || y==column-1 )
maze[x][y]=2; // 設定外牆
else
maze[x][y]=0; // 初始迷宮內部
}
}
generatemaze(Ei,Ej); // 產生迷宮
maze[Si-1][Sj] |= 0x1; // 拆掉入口上牆
maze[Ei][Ej+1] |= 0x1; // 拆掉出口右牆
for(x=1; x<row-1; x++)
{
for(y=1; y<column-1; y++)
{
if (maze[x][y] == 0 || maze[x][y] == 2)
cout<<"█";
else
cout<<" ";
}
cout<<endl;
}
}
請自己排版吧...好懶 .....
|
|
rakish
|
分享:
▲
▼
書上的..剛好看到... 複製程式
int maze[7][10]={
1,1,1,1,1,1,1,1,1,1,
1,0,1,0,1,0,0,0,0,1,
1,0,1,0,1,0,1,1,0,1,
1,0,1,0,1,1,1,0,0,1,
1,0,1,0,0,0,0,0,1,1,
1,0,0,0,1,1,1,0,0,1,
1,1,1,1,1,1,1,1,1,1};
int find(int x,int y){//入口
if(x==1&&y==1){ //出口
maze[x][y]=2;
return 1;
}else{
if(maze[x][y]==0){
maze[x][y]=2; //表示走過
if(( find(x-1,y)
+find(x+1,y)
+find(x,y+1)
+find(x,y-1))>0)
return 1;
}else{
maze[x][y]=0;
return 0;
}
}else{
return 0;
}
}
}
void main(){
int i,j;
find(2,5); //入口
}
|
人一但長大了 就發現世上的事不像想的那麼好 你總是會一天天長大的 會看得越來越清楚
|
x0
[6 樓]
From:台灣
| Posted:2005-11-30 15:00 |
|
|
|