void TestMaze() { int n = 10; int** ppMaze = CreateMaze(n); Pos entry = InitMaze(ppMaze, n); PrintMaze(ppMaze, n); Stack<Pos> path; Maze(ppMaze, n, entry, path); PrintMaze(ppMaze, n); cout<<"Path:"; while (!path.Empty()) { const Pos& pos = path.Top(); cout<<"("<<pos.row<<","<<pos.col<<")"<<"<-"; path.Pop(); } cout<<"Entry"<<endl; }
int main (int argc, char *argv []) { int width = WIDTH; int height = HEIGHT; maze_t maze; if (argc >= 2) width = atoi (argv [1]); if (argc >= 3) height = atoi (argv [2]); if (argc >= 4) srand (atoi (argv [3])); else srand ((int) time ((time_t *) NULL)); if (width <= 0 || height <= 0) { (void) fprintf (stderr, "Illegal width or height value!\n"); exit (EXIT_FAILURE); } maze = (maze_t) calloc (width * height, sizeof (cell_t)); if (maze == NULL) { (void) fprintf (stderr, "Cannot allocate memory!\n"); exit (EXIT_FAILURE); } CreateMaze (maze, width, height); PrintMaze (maze, width, height); (void) putchar ('\n'); free (maze); exit (EXIT_SUCCESS); return (0); }/* main */
std::string create_random_chambers(int size) { int *maze = CreateMaze(size, size); char buffer[256]; for(int j = 0; j < size; j++) { std::string mazeStr = ""; for(int i = 0; i < size; i++) { _itoa(maze[i+j*size], buffer, 16); mazeStr += buffer; mazeStr += " "; } mazeStr += "\n"; OutputDebugString(mazeStr.c_str()); } std::string output = densityFunctionsPS; output += "static inline float GetMazeWalls(float3 wp, float4 wallParams)"; output += "{"; output += "float t = 9999999;"; for(int i = 0; i < size; i++) { char bufferX[256]; char bufferX1[256]; _itoa(i,bufferX, 10); _itoa(i+1,bufferX1, 10); for(int j = 0; j < size; j++) { char bufferY[256]; char bufferY1[256]; _itoa(j,bufferY, 10); _itoa(j+1,bufferY1, 10); //Flip right and down bits std::string offsetPosX = "-SCALE * (float3("; offsetPosX += bufferX1; offsetPosX += ",0,"; offsetPosX += bufferY; offsetPosX += ")+float3(0,0,0.5))"; std::string offsetPosY = "-SCALE * (float3("; offsetPosY += bufferX; offsetPosY += ",0,"; offsetPosY += bufferY1; offsetPosY += ")+float3(0.5,0,0))"; int idx = i + j * size; if(i < size-1 && (maze[idx] & 0x01)) //If right is sealed { output += "t = min(t, udRoundBox(wp"; output += offsetPosX; output += ", wallParams));"; } if(j < size-1 && (maze[idx] & 0x04)) //If down is sealed { output += "t = min(t, udRoundBox(wp"; output += offsetPosY; output += ", wallParams.zyxw));"; } } } output += "return t;"; output += "}"; return output; }
TEST (test_maze, bombed_maze_test) { BombedMazeFactory factory; Sp_Maze spMaze = CreateMaze(factory); Sp_Room spRoom = spMaze->RoomNo(33); EXPECT_TRUE(spRoom.get() != NULL); EXPECT_EQ(spRoom->GetRoomNumber(), 33); Sp_MapSite spSite = spRoom->GetSide(East); EXPECT_TRUE(spSite.get() != NULL); EXPECT_EQ(spSite->Enter(), true); spSite = spRoom->GetSide(North); EXPECT_TRUE(spSite.get() != NULL); EXPECT_EQ(spSite->Enter(), false); spSite = spRoom->GetSide(South); EXPECT_TRUE(spSite.get() != NULL); EXPECT_EQ(spSite->Enter(), false); spSite = spRoom->GetSide(West); EXPECT_TRUE(spSite.get() != NULL); EXPECT_EQ(spSite->Enter(), false); spRoom = spMaze->RoomNo(34); EXPECT_TRUE(spRoom.get() != NULL); EXPECT_EQ(spRoom->GetRoomNumber(), 34); spSite = spRoom->GetSide(East); EXPECT_TRUE(spSite.get() != NULL); EXPECT_EQ(spSite->Enter(), false); spSite = spRoom->GetSide(North); EXPECT_TRUE(spSite.get() != NULL); EXPECT_EQ(spSite->Enter(), false); spSite = spRoom->GetSide(South); EXPECT_TRUE(spSite.get() != NULL); EXPECT_EQ(spSite->Enter(), false); spSite = spRoom->GetSide(West); EXPECT_TRUE(spSite.get() != NULL); EXPECT_EQ(spSite->Enter(), true); //enter into a bombed room EXPECT_TRUE(spRoom->Enter()); spSite = spRoom->GetSide(East); EXPECT_TRUE(spSite.get() != NULL); EXPECT_EQ(spSite->Enter(), true); spSite = spRoom->GetSide(North); EXPECT_TRUE(spSite.get() != NULL); EXPECT_EQ(spSite->Enter(), true); spSite = spRoom->GetSide(South); EXPECT_TRUE(spSite.get() != NULL); EXPECT_EQ(spSite->Enter(), true); spSite = spRoom->GetSide(West); EXPECT_TRUE(spSite.get() != NULL); EXPECT_EQ(spSite->Enter(), true); //same should happen for the other room spRoom = spMaze->RoomNo(33); EXPECT_TRUE(spRoom.get() != NULL); EXPECT_EQ(spRoom->GetRoomNumber(), 33); EXPECT_TRUE(spRoom->Enter()); spSite = spRoom->GetSide(East); EXPECT_TRUE(spSite.get() != NULL); EXPECT_EQ(spSite->Enter(), true); spSite = spRoom->GetSide(North); EXPECT_TRUE(spSite.get() != NULL); EXPECT_EQ(spSite->Enter(), true); spSite = spRoom->GetSide(South); EXPECT_TRUE(spSite.get() != NULL); EXPECT_EQ(spSite->Enter(), true); spSite = spRoom->GetSide(West); EXPECT_TRUE(spSite != NULL); EXPECT_EQ(spSite->Enter(), true); }