Files Classes Functions Hierarchy
#include <mazematrixD2createmaze.h>
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. | |
Definition at line 16 of file mazematrixD2createmaze.h.
| mazematrixD2createmaze< T >::mazematrixD2createmaze | ( | mazematrixD2< T > & | mz_ | ) | [inline] |
| 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 }
| 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 }
| mazematrixD2<T>& mazematrixD2createmaze< T >::mz |
Maze data structure.
Definition at line 21 of file mazematrixD2createmaze.h.
Referenced by mazematrixD2createmaze< T >::buildpropermaze(), and mazematrixD2createmaze< T >::impropermaze01().
| 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().
1.5.8