Beispiel #1
0
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
	//initialize rootcube
	//FILE *fp;
	//fp = freopen ("rubix.txt", "w", stdout);
	printf("sizeof(&rootCube->face)=%u\n", sizeof((&rootCube)->face));
	ZeroMemory(&rootCube, sizeof(rootCube));
	rootCube.parent = NULL;
	rootCube.lastMove = -1;
	rootCube.depth = 0;
	GetFacesString(&rootCube, startCube);
	printf("starting cube\n");
	printCube(&rootCube);
	//initialize solved cube
	GetFacesString(&solvedCube, g_szSolvedCubeFaces);
	printf("target solution\n");
	printCube(&solvedCube);
	struct Cube_t test;
	CopyMemory(&test, &solvedCube, sizeof(struct Cube_t));
	transformCube(&test, MOVE_RACW);
	transformCube(&test, MOVE_RACW);
	transformCube(&test, MOVE_LACW);
	transformCube(&test, MOVE_BCW);
	transformCube(&test, MOVE_LACW);
	transformCube(&test, MOVE_BACW);
	transformCube(&test, MOVE_BCW);
	transformCube(&test, MOVE_LACW);
	transformCube(&test, MOVE_BACW);
	transformCube(&test, MOVE_LACW);
	//transformCube(&test, MOVE_BACW);
	printf("test cube\n");
	printCube(&test);
	CopyMemory(&rootCube, &test, sizeof(struct Cube_t));
	int g;
	struct Cube_t *result;
	LARGE_INTEGER liStart, liFinish, liFrequency;
	QueryPerformanceFrequency(&liFrequency);
	for (g=0;g<g_uMaxDepth;g++) {
		QueryPerformanceCounter(&liStart);
		result = expandGeneration(&rootCube, g);
		if (result != NULL) break;
		QueryPerformanceCounter(&liFinish);
		printf("Cubes at generation %3u: %10u (new: %10u); time taken: %8.6f s\n", g, countCubes(&rootCube, -1), countCubes(&rootCube, g+1), (double)(liFinish.QuadPart-liStart.QuadPart)/(double)liFrequency.QuadPart);
	}
	if (result != NULL) {
		printMoveSequence(result);
		putchar('\n');
		printCube(result);
	} else {
		printf("no solution found\n");
	}
	pause();
	return 0;
}
Beispiel #2
0
int main(int argc, char *argv[])
{
    // check some type sizes
    debug_size(rootCube.face);
    debug_size(Cube);
    debug("\n");

    // initialize solved cube
    Cube_Init(&solvedCube);
    if (!Cube_LoadTiles(&solvedCube, SOLVED_CUBE_STR, "FURDBL")) {
        fatal(0, "Failed to load solved cube");
    }
    printf("Target solution:\n");
    printCube(&solvedCube);
    putchar('\n');

    // initialize problem cube
    Cube_Init(&rootCube);
    rootCube.depth = 0;
    assert(sizeof(rootCube.face) == sizeof(solvedCube.face));
    verify(memcpy(rootCube.face, solvedCube.face, sizeof(rootCube.face)) == rootCube.face);
    transformCube(&rootCube, MOVE_RACW);
    transformCube(&rootCube, MOVE_RACW);
    transformCube(&rootCube, MOVE_LACW);
    transformCube(&rootCube, MOVE_BCW);
    transformCube(&rootCube, MOVE_LACW);
    transformCube(&rootCube, MOVE_BACW);
    transformCube(&rootCube, MOVE_BCW);
    transformCube(&rootCube, MOVE_LACW);
    transformCube(&rootCube, MOVE_BACW);
    //transformCube(&rootCube, MOVE_LACW);
    //transformCube(&rootCube, MOVE_BACW);
    verify(Cube_ValidateTiles(&rootCube));
    printf("Cube initial state:\n");
    printCube(&rootCube);
    putchar('\n');

    // solve cube
    Cube *result;
    for (int gen = 0; gen < 8; gen++) {
        result = expandGeneration(&rootCube, gen);
        if (result != NULL) break;
        printf("Generation %2d: %10u cubes (%10u new)\n", gen, countCubes(&rootCube, -1), countCubes(&rootCube, gen + 1));
    }
    if (result != NULL) {
        printMoveSequence(result);
        putchar('\n');
        printCube(result);
    } else {
        printf("no solution found\n");
    }
    //pause();
    return 0;
}
void Option()
{
	int opt;
	Point cube_dest[8];

	printf("\n1. X- axis \n 2. Y - axis \n");
	printf("Enter your option:");
	scanf("%d",&opt);

	switch(opt)
	{
		case 1: { 
				float mat[3][3]={
									{1,0,0},
									{0,1,0},
									{0,0,-1}
								};
			
				transformCube(cube_vertex,mat,  cube_dest);
				glColor3f(0.5, 0.8, 0.5);
				drawCube(cube_dest);
				glFinish();
				}
				break;
			
		case 2:	{
					float mat[3][3]={
										{-1,0,0},
										{0,1,0},
										{0,0,1}
									};
			
					transformCube(cube_vertex,mat,  cube_dest);
					glColor3f(0.5, 0.8, 0.5);
					drawCube(cube_dest);
					glFinish();
				}	
			break;
	
		default:
			return;
	}
}