Refactor: Implement SmartCube renderer, improve UI styling, and fix gaps
This commit is contained in:
117
test/simulate_moves.js
Normal file
117
test/simulate_moves.js
Normal file
@@ -0,0 +1,117 @@
|
||||
|
||||
import { Cube, FACES, COLORS } from '../src/utils/Cube.js';
|
||||
|
||||
// Helper to print face
|
||||
const printFace = (matrix, name) => {
|
||||
console.log(`--- ${name} ---`);
|
||||
matrix.forEach(row => console.log(row.map(c => c ? c[0].toUpperCase() : '-').join(' ')));
|
||||
};
|
||||
|
||||
// Helper to check if a face matches expected color (center color)
|
||||
const checkFaceColor = (matrix, expectedColor) => {
|
||||
return matrix.every(row => row.every(c => c === expectedColor));
|
||||
};
|
||||
|
||||
console.log("=== RUBIK'S CUBE SIMULATION & DIAGNOSTIC ===");
|
||||
|
||||
const cube = new Cube();
|
||||
|
||||
// 1. Initial State Check
|
||||
console.log("\n1. Checking Initial State...");
|
||||
let state = cube.getState();
|
||||
const isSolved =
|
||||
checkFaceColor(state[FACES.UP], COLORS.WHITE) &&
|
||||
checkFaceColor(state[FACES.DOWN], COLORS.YELLOW) &&
|
||||
checkFaceColor(state[FACES.FRONT], COLORS.GREEN) &&
|
||||
checkFaceColor(state[FACES.BACK], COLORS.BLUE) &&
|
||||
checkFaceColor(state[FACES.LEFT], COLORS.ORANGE) &&
|
||||
checkFaceColor(state[FACES.RIGHT], COLORS.RED);
|
||||
|
||||
if (isSolved) {
|
||||
console.log("✅ Initial state is SOLVED.");
|
||||
} else {
|
||||
console.error("❌ Initial state is BROKEN.");
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
// 2. Simulate Move: Front Face Drag Down
|
||||
// Visual: Drag Down on Front Face (Left Layer).
|
||||
// Axis: X. Index: -1 (Left).
|
||||
// Physical expectation: The Left slice moves "towards the user" (if looking from top) or "down" (if looking from front).
|
||||
// Standard Notation: L (Left CW).
|
||||
// L move: Top -> Front -> Down -> Back -> Top.
|
||||
// Let's verify what L does.
|
||||
// Standard L: Front gets Top color.
|
||||
// If I drag Left Layer DOWN on Front face, the Front face pieces move DOWN.
|
||||
// So Front gets Top pieces.
|
||||
// So Drag Down = L = Front gets Top.
|
||||
|
||||
console.log("\n2. Simulating: Left Layer (x=-1) Rotation (L-like move)...");
|
||||
// We need to find which 'direction' in our engine corresponds to L.
|
||||
// Our engine: rotateLayer('x', -1, direction).
|
||||
|
||||
// Try direction = 1
|
||||
console.log("-> Applying rotateLayer('x', -1, 1)...");
|
||||
cube.rotateLayer('x', -1, 1);
|
||||
state = cube.getState();
|
||||
|
||||
// Check result on Left Column of Front Face
|
||||
// Front is Green. Top is White.
|
||||
// If L (Drag Down): Front-Left-Col should be White.
|
||||
const frontLeftCol = [state[FACES.FRONT][0][0], state[FACES.FRONT][1][0], state[FACES.FRONT][2][0]];
|
||||
console.log("Front Left Column colors:", frontLeftCol);
|
||||
|
||||
if (frontLeftCol.every(c => c === COLORS.WHITE)) {
|
||||
console.log("✅ Result: Front got White (Top). This matches 'Drag Down' (L move).");
|
||||
console.log("=> CONCLUSION: direction=1 corresponds to Drag Down (L).");
|
||||
} else if (frontLeftCol.every(c => c === COLORS.YELLOW)) {
|
||||
console.log("⚠️ Result: Front got Yellow (Down). This matches 'Drag Up' (L' move).");
|
||||
console.log("=> CONCLUSION: direction=1 corresponds to Drag Up (L').");
|
||||
} else {
|
||||
console.error("❌ Unexpected colors:", frontLeftCol);
|
||||
}
|
||||
|
||||
// Reset for next test
|
||||
cube.reset();
|
||||
|
||||
// 3. Simulate Move: Front Face Drag Right
|
||||
// Visual: Drag Right on Front Face (Top Layer).
|
||||
// Axis: Y. Index: 1 (Top).
|
||||
// Physical expectation: Top slice moves Right.
|
||||
// Standard Notation: U' (Up CCW) ? No.
|
||||
// If I hold cube, drag Top Layer to Right.
|
||||
// Front face pieces move to Right face.
|
||||
// Standard U (CW): Front -> Left.
|
||||
// So Drag Right is U' (CCW).
|
||||
// Let's verify.
|
||||
// Drag Right: Front -> Right.
|
||||
|
||||
console.log("\n3. Simulating: Top Layer (y=1) Rotation...");
|
||||
// Try direction = 1
|
||||
console.log("-> Applying rotateLayer('y', 1, 1)...");
|
||||
cube.rotateLayer('y', 1, 1);
|
||||
state = cube.getState();
|
||||
|
||||
// Check result on Top Row of Front Face
|
||||
// Front is Green. Left is Orange. Right is Red.
|
||||
// If Drag Right: Front-Top-Row should be Orange? No.
|
||||
// Drag Right: The pieces move Right. So Front REPLACES Right?
|
||||
// Or Front GETS Left?
|
||||
// Visually: The face moves Right. So the Green pieces go to Right face.
|
||||
// And Front face gets Left (Orange) pieces.
|
||||
// So Front-Top-Row should be Orange.
|
||||
|
||||
const frontTopRow = state[FACES.FRONT][0];
|
||||
console.log("Front Top Row colors:", frontTopRow);
|
||||
|
||||
if (frontTopRow.every(c => c === COLORS.ORANGE)) {
|
||||
console.log("✅ Result: Front got Orange (Left). This matches 'Drag Right'.");
|
||||
console.log("=> CONCLUSION: direction=1 corresponds to Drag Right.");
|
||||
} else if (frontTopRow.every(c => c === COLORS.RED)) {
|
||||
console.log("⚠️ Result: Front got Red (Right). This matches 'Drag Left'.");
|
||||
console.log("=> CONCLUSION: direction=1 corresponds to Drag Left.");
|
||||
} else {
|
||||
console.error("❌ Unexpected colors:", frontTopRow);
|
||||
}
|
||||
|
||||
console.log("\n=== END SIMULATION ===");
|
||||
Reference in New Issue
Block a user