在下面代码中帮我写一下class ThistlethwaiteSolver 中实现完成顶层十字的逻辑部分的代码要使得写出来的代码能够直接放进原来的代码中运行直接给出需要的那部分代码#include iostream#include vector#include stringusing namespace std; 定义魔方的颜色enum Color RED BLUE GREEN WHITE YE
// 第一步:完成顶层十字 void completeTopCross(Cube& cube) { // 获取当前魔方状态 CubeState state = cube.getState();
// 如果顶层中心块不是白色,则需要先将其旋转到顶部
if (state.up[1][1] != WHITE) {
// 找到白色中心块所在的面
Color face;
if (state.front[1][1] == WHITE) {
face = FRONT;
} else if (state.left[1][1] == WHITE) {
face = LEFT;
} else if (state.right[1][1] == WHITE) {
face = RIGHT;
} else if (state.back[1][1] == WHITE) {
face = BACK;
}
// 将白色中心块旋转到顶部
switch (face) {
case FRONT:
cube.rotate(UP, CLOCKWISE);
cube.rotate(RIGHT, CLOCKWISE);
cube.rotate(DOWN, COUNTERCLOCKWISE);
cube.rotate(RIGHT, COUNTERCLOCKWISE);
cube.rotate(UP, COUNTERCLOCKWISE);
cube.rotate(RIGHT, CLOCKWISE);
cube.rotate(DOWN, COUNTERCLOCKWISE);
cube.rotate(RIGHT, COUNTERCLOCKWISE);
break;
case LEFT:
cube.rotate(UP, COUNTERCLOCKWISE);
cube.rotate(FRONT, COUNTERCLOCKWISE);
cube.rotate(UP, CLOCKWISE);
cube.rotate(FRONT, CLOCKWISE);
break;
case RIGHT:
cube.rotate(UP, CLOCKWISE);
cube.rotate(FRONT, CLOCKWISE);
cube.rotate(UP, COUNTERCLOCKWISE);
cube.rotate(FRONT, COUNTERCLOCKWISE);
break;
case BACK:
cube.rotate(UP, COUNTERCLOCKWISE);
cube.rotate(LEFT, CLOCKWISE);
cube.rotate(DOWN, CLOCKWISE);
cube.rotate(LEFT, COUNTERCLOCKWISE);
cube.rotate(UP, COUNTERCLOCKWISE);
cube.rotate(LEFT, CLOCKWISE);
cube.rotate(DOWN, CLOCKWISE);
cube.rotate(LEFT, COUNTERCLOCKWISE);
break;
}
}
// 如果顶层中心块已经是白色,则直接进行下一步操作
// 将白色边块旋转到顶部
while (state.up[0][1] != WHITE || state.front[2][1] != GREEN || state.right[2][1] != RED || state.back[0][1] != BLUE || state.left[2][1] != ORANGE) {
// 如果白色边块在前面,则将其旋转到右边
if (state.front[2][1] == WHITE) {
cube.rotate(UP, COUNTERCLOCKWISE);
cube.rotate(RIGHT, CLOCKWISE);
cube.rotate(FRONT, CLOCKWISE);
cube.rotate(RIGHT, COUNTERCLOCKWISE);
cube.rotate(FRONT, COUNTERCLOCKWISE);
cube.rotate(UP, CLOCKWISE);
cube.rotate(FRONT, CLOCKWISE);
cube.rotate(RIGHT, CLOCKWISE);
cube.rotate(FRONT, COUNTERCLOCKWISE);
cube.rotate(RIGHT, COUNTERCLOCKWISE);
}
// 如果白色边块在右边,则将其旋转到后面
else if (state.right[2][1] == WHITE) {
cube.rotate(UP, CLOCKWISE);
cube.rotate(BACK, CLOCKWISE);
cube.rotate(RIGHT, CLOCKWISE);
cube.rotate(BACK, COUNTERCLOCKWISE);
cube.rotate(RIGHT, COUNTERCLOCKWISE);
cube.rotate(UP, COUNTERCLOCKWISE);
cube.rotate(RIGHT, CLOCKWISE);
cube.rotate(BACK, CLOCKWISE);
cube.rotate(RIGHT, COUNTERCLOCKWISE);
cube.rotate(BACK, COUNTERCLOCKWISE);
}
// 如果白色边块在后面,则将其旋转到左边
else if (state.back[0][1] == WHITE) {
cube.rotate(UP, COUNTERCLOCKWISE);
cube.rotate(LEFT, COUNTERCLOCKWISE);
cube.rotate(BACK, CLOCKWISE);
cube.rotate(LEFT, CLOCKWISE);
cube.rotate(BACK, COUNTERCLOCKWISE);
cube.rotate(UP, CLOCKWISE);
cube.rotate(BACK, CLOCKWISE);
cube.rotate(LEFT, COUNTERCLOCKWISE);
cube.rotate(BACK, COUNTERCLOCKWISE);
cube.rotate(LEFT, CLOCKWISE);
}
// 如果白色边块在左边,则将其旋转到前面
else if (state.left[2][1] == WHITE) {
cube.rotate(UP, CLOCKWISE);
cube.rotate(FRONT, COUNTERCLOCKWISE);
cube.rotate(LEFT, CLOCKWISE);
cube.rotate(FRONT, CLOCKWISE);
cube.rotate(LEFT, COUNTERCLOCKWISE);
cube.rotate(UP, COUNTERCLOCKWISE);
cube.rotate(LEFT, CLOCKWISE);
cube.rotate(FRONT, COUNTERCLOCKWISE);
cube.rotate(LEFT, COUNTERCLOCKWISE);
cube.rotate(FRONT, CLOCKWISE);
}
// 更新魔方状态
state = cube.getState();
}
}
原文地址: https://www.cveoy.top/t/topic/b1h2 著作权归作者所有。请勿转载和采集!