void myRubixCube::randomize()
{


    int i, j=22, k, random_var=13456;

    for (i = 0; i<random_var; i++)
    {
        k = j;
        while (j == k || (j == 2 && k == 3) || (j == 3 && k == 2))
            j = rand() % 4;
        keypressed.push_back(k);
        switch (k)
        {
        case 0:
            axis.push_back(rand() % 3);
            break;
        case 1:
            plane.push_back(rand() % 3);
            break;
        case 2:
            direction = 0;
            rotating = false;
            rotate_cube_plane();
            break;
        case 3:
            direction = 1;
            rotating = false;
            rotate_cube_plane();
            break;
        }
    }
}
void RubixCube::randomize() {
	time_t t; time(&t);
	tm * a; a=localtime(&t);
    
	int i,j,k,till;
	till=20+(a->tm_sec + a->tm_min + a->tm_hour + a->tm_mday + a->tm_mon + a->tm_year)%30;
	j=(a->tm_sec + a->tm_min + a->tm_hour + a->tm_mday + a->tm_mon + a->tm_year)%4;
	for(i=0;i<till;i++) {
		k=j;
		while(j==k  || (j==2 && k==3) || (j==3 && k==2))
			j=rand()%4;
		keypressed.push_back(k);
		switch(k) {
            case 0:
                axis.push_back(rand()%3);
                break;
            case 1:
                plane.push_back(rand()%3);
                break;
            case 2:
                dir=0;
                rotating=false;
                rotate_cube_plane();
                break;
            case 3:
                dir=1;
                rotating=false;
                rotate_cube_plane();
                break;
		}
	}
}
void RubixCube::keyboard(unsigned char key) {
    switch (key) {
        case 'r':
        case 'R':
            //randomize();
            glutPostRedisplay();
            break;
        case ',':
        case '<':
            dir=1;
            keypressed.push_back(3);
            rotating=true;
            rotate_cube_plane();
            break;
        case '.':
        case '>':
            dir=0;
            keypressed.push_back(2);
            rotating=true;
            rotate_cube_plane();
            break;
        case 'a':
        case 'A':
            if(Axis == 0) {
                axis.push_back(0);
                keypressed.push_back(0);
                Axis = 2;
            } else if(Axis == 2) {
                axis.push_back(2);
                keypressed.push_back(0);
                Axis = 1;
            } else {
                axis.push_back(1);
                keypressed.push_back(0);
                Axis = 0;
            }
            break;
        case 's':
        case 'S':
            if(Row == 0) {
                plane.push_back(0);
                keypressed.push_back(1);
                Row = 1;
            } else if(Row == 1) {
                plane.push_back(1);
                keypressed.push_back(1);
                Row = 2;
            } else {
                plane.push_back(2);
                keypressed.push_back(1);
                Row = 0;
            }
            break;
    }
}
void myRubixCube::keyboard(unsigned char key)
{
    if (!rotating)
    {
        switch (key)
        {

        case '>':
        case '.':
            direction = 1;
            keypressed.push_back(3);
            rotating = true;
            rotate_cube_plane();
            break;
        case ',':
        case '<':
            direction = 0;
            keypressed.push_back(2);
            rotating = true;
            rotate_cube_plane();
            break;
        case 'x':
        case 'X':
            axis.push_back(0);
            keypressed.push_back(0);
            break;
        case 'y':
        case 'Y':
            axis.push_back(1);
            keypressed.push_back(0);
            break;
        case 'z':
        case 'Z':
            axis.push_back(2);
            keypressed.push_back(0);
            break;
        case '1':
            plane.push_back(0);
            keypressed.push_back(1);
            break;
        case '2':
            plane.push_back(1);
            keypressed.push_back(1);
            break;
        case '3':
            plane.push_back(2);
            keypressed.push_back(1);
            break;

        }
    }
}
void RubixCube::rotation_idle_func() {
	if(rotating) {
		if(theta>=(double)90) {
			glutIdleFunc(NULL);
			rotating=false;
			theta=0.0;
			rotate_cube_plane();
		}
		else
			theta+=+0.5;
		glutPostRedisplay();
	}
}