proj home

Files   Classes   Functions   Hierarchy  

mazematrixD2createmaze< T > Class Template Reference

Create maze given mazematrixD2 data structure. More...

#include <mazematrixD2createmaze.h>

Collaboration diagram for mazematrixD2createmaze< T >:

List of all members.

Public Member Functions

 mazematrixD2createmaze (mazematrixD2< T > &mz_)
 Constructor.
void buildpropermaze ()
 Build the maze, the data structure holds the dimensions.
void impropermaze01 (doublec deletewall)
 Given maze, visit each cell and randomly delete walls on delwall ratio.

Public Attributes

mazematrixD2< T > & mz
 Maze data structure.
deque< point2< T > > process
 Process queue where from and to links are added.


Detailed Description

template<typename T>
class mazematrixD2createmaze< T >

Create maze given mazematrixD2 data structure.

Definition at line 16 of file mazematrixD2createmaze.h.


Constructor & Destructor Documentation

template<typename T>
mazematrixD2createmaze< T >::mazematrixD2createmaze ( mazematrixD2< T > &  mz_  )  [inline]

Constructor.

Definition at line 27 of file mazematrixD2createmaze.h.

00028     : mz(mz_) {}


Member Function Documentation

template<typename T >
void mazematrixD2createmaze< T >::buildpropermaze (  )  [inline]

Build the maze, the data structure holds the dimensions.

Definition at line 44 of file mazematrixD2createmaze.h.

References mazematrixD2createmaze< T >::mz, mazematrixD2createmaze< T >::process, point2< T >::x, and point2< T >::y.

Referenced by mazegameD2state01::game01(), maze003::maze003(), and mazematrixD2test::unittest02().

00045 {
00046   T m=mz.dim[0];
00047   T n=mz.dim[1];
00048 
00049   T i;
00050   T j;
00051 
00052   i=1+(rand()%(m*n));
00053 
00054   process.clear();
00055   vector< T > unvisited;
00056 
00057   mz.neighboursunvisited(unvisited,i);
00058   random_shuffle(unvisited.begin(),unvisited.end());
00059   assert(unvisited.size()!=0);
00060   process.push_back( point2<T>(i,unvisited[0]) );
00061 
00062   point2<T> current;
00063 
00064   bool res;
00065   for ( ; !process.empty(); )
00066   {
00067     current = process.front();
00068     process.pop_front();
00069 
00070     i = current.x;
00071     j = current.y;
00072 //cout << "(" << i << "," << j << ")" << endl;
00073 
00074     if (mz.vi[j].unvisited())
00075     {
00076       mz.linkadjacent(res,i,j);
00077       assert(res);
00078 
00079       mz.neighboursunvisited(unvisited,j);
00080       random_shuffle(unvisited.begin(),unvisited.end());
00081 
00082 /*
00083 cout << j << ": ";
00084 for (uint k=0; k<unvisited.size(); ++k)
00085   cout << unvisited[k] << " ";
00086 cout << endl;
00087 */
00088 
00089       //random_shuffle(unvisited.begin(),unvisited.end());
00090       if (unvisited.size()!=0)
00091       {
00092         process.push_front( point2<T>(j,unvisited[0]) );
00093         for (uint k=1; k<unvisited.size(); ++k)
00094           process.push_back( point2<T>(j,unvisited[k]) );
00095       }
00096     }
00097 
00098 /*
00099 cout << "process: ";
00100 typename deque< point2<T> >::iterator i2;
00101 i2=process.begin();
00102 for ( ; i2!=process.end(); ++i2)
00103   cout << *i2 << " ";
00104 cout << endl;
00105 */
00106 
00107   }
00108 
00109 }

template<typename T >
void mazematrixD2createmaze< T >::impropermaze01 ( doublec  deletewall  )  [inline]

Given maze, visit each cell and randomly delete walls on delwall ratio.

Definition at line 113 of file mazematrixD2createmaze.h.

References mazematrixD2createmaze< T >::mz, and r.

Referenced by mazegameD2state01::game01(), and maze003::maze003().

00114 {
00115   assert(deletewall<1.0);
00116   assert(deletewall >= 0.0);
00117 
00118   T m=mz.dim[0];
00119   T n=mz.dim[1];
00120   T mn=m*n;
00121 
00122   vector<T> ki(mn);
00123 
00124   for (T i=0; i<mn; ++i)
00125     ki[i]=i+1;
00126 
00127   // Help randomize things a bit, may not matter.
00128   random_shuffle(ki.begin(),ki.end());
00129 
00130   T k2;
00131   bool res;
00132  
00133   random11<> r;
00134 
00135   for (T i=0; i<mn; ++i)
00136   {
00137 
00138     for (uint j=0; j<4; ++j)
00139     {
00140       if (mz.vi[ki[i]].ni[j]!=0)
00141         continue;
00142 
00143       mz.move(res,k2,j,ki[i]);
00144       if (res==false)
00145         continue;
00146       
00147       if (r()<deletewall)
00148       {
00149         mz.linkadjacent(res,k2,ki[i]);
00150         assert(res==true);
00151       }
00152     }
00153   }
00154 }


Member Data Documentation

template<typename T>
mazematrixD2<T>& mazematrixD2createmaze< T >::mz

template<typename T>
deque< point2<T> > mazematrixD2createmaze< T >::process

Process queue where from and to links are added.

Definition at line 24 of file mazematrixD2createmaze.h.

Referenced by mazematrixD2createmaze< T >::buildpropermaze().


The documentation for this class was generated from the following file:

Generated on Fri Mar 4 00:50:05 2011 for Chelton Evans Source by  doxygen 1.5.8