示例#1
0
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 */
示例#3
0
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);
}