| 
                
                  | 唐老鴨 
         
  
 | 分享:        ▲
                    
                      ▼         
 
   剛花了點時間幫你把自動產生迷宮的程式寫出來了    ..... 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 | |  |  |