예제 #1
0
파일: btree.c 프로젝트: ptcte/allinone
Node* balanceNode(Node* n)
{
  if (n != NULL) {
    n->l = balanceNode(n->l);
    n->r = balanceNode(n->r);
    if (depth(n->r) > depth(n->l)+1) {
      n = rotateACW(n);
    }
    if (depth(n->l) > depth(n->r)+1) {
      n = rotateCW(n);
    }
  }  
  return n;
}
예제 #2
0
void moveCube(Cube *thisCube, Cube *parentCube, enum Move_e thisMove)
{
    switch (thisMove) {
    case MOVE_FCW:
        rotateCW(&parentCube->face[FACE_F], &thisCube->face[FACE_F]);
        moveEdges(parentCube, thisCube, FACE_F, ROTATE_CW);
        break;
    case MOVE_FACW:
        rotateACW(&parentCube->face[FACE_F], &thisCube->face[FACE_F]);
        moveEdges(parentCube, thisCube, FACE_F, ROTATE_ACW);
        break;
    case MOVE_UCW:
        rotateCW(&parentCube->face[FACE_U], &thisCube->face[FACE_U]);
        moveEdges(parentCube, thisCube, FACE_U, ROTATE_CW);
        break;
    case MOVE_UACW:
        rotateACW(&parentCube->face[FACE_U], &thisCube->face[FACE_U]);
        moveEdges(parentCube, thisCube, FACE_U, ROTATE_ACW);
        break;
    case MOVE_RCW:
        rotateCW(&parentCube->face[FACE_R], &thisCube->face[FACE_R]);
        moveEdges(parentCube, thisCube, FACE_R, ROTATE_CW);
        break;
    case MOVE_RACW:
        rotateACW(&parentCube->face[FACE_R], &thisCube->face[FACE_R]);
        moveEdges(parentCube, thisCube, FACE_R, ROTATE_ACW);
        break;
    case MOVE_DCW:
        rotateCW(&parentCube->face[FACE_D], &thisCube->face[FACE_D]);
        moveEdges(parentCube, thisCube, FACE_D, ROTATE_CW);
        break;
    case MOVE_DACW:
        rotateACW(&parentCube->face[FACE_D], &thisCube->face[FACE_D]);
        moveEdges(parentCube, thisCube, FACE_D, ROTATE_ACW);
        break;
    case MOVE_BCW:
        rotateCW(&parentCube->face[FACE_B], &thisCube->face[FACE_B]);
        moveEdges(parentCube, thisCube, FACE_B, ROTATE_CW);
        break;
    case MOVE_BACW:
        rotateACW(&parentCube->face[FACE_B], &thisCube->face[FACE_B]);
        moveEdges(parentCube, thisCube, FACE_B, ROTATE_ACW);
        break;
    case MOVE_LCW:
        rotateCW(&parentCube->face[FACE_L], &thisCube->face[FACE_L]);
        moveEdges(parentCube, thisCube, FACE_L, ROTATE_CW);
        break;
    case MOVE_LACW:
        rotateACW(&parentCube->face[FACE_L], &thisCube->face[FACE_L]);
        moveEdges(parentCube, thisCube, FACE_L, ROTATE_ACW);
        break;
    default:
        //MessageBox(NULL, "Illegal move attempted", "wtf", 0);
        fatal(0, "Illegal move attempted");
    }
}