v5: кубик инициализируется сразу перемешанным

This commit is contained in:
Naz 2026-09-16 10:09:22 +00:00
parent 8afae1cff1
commit 2f64bf86e1

View File

@ -719,12 +719,165 @@ document.addEventListener('touchend', () => {
isDragging = false; isDragging = false;
}); });
initCube();
setTimeout(() => scramble(), 500);
let moveHistory = []; let moveHistory = [];
let hintTimeout = null; let hintTimeout = null;
function initAndScramble() {
initCube();
const layers = ['U', 'D', 'L', 'R', 'F', 'B'];
const moves = 20;
for (let i = 0; i < moves; i++) {
const layer = layers[Math.floor(Math.random() * layers.length)];
const direction = Math.random() > 0.5 ? 1 : -1;
applyQuickMove(layer, direction);
}
moveHistory = [];
}
function applyQuickMove(layer, direction) {
const affectedCubies = [];
for (let x = 0; x < 3; x++) {
for (let y = 0; y < 3; y++) {
for (let z = 0; z < 3; z++) {
let include = false;
if (layer === 'U' && cube[x][y][z].y === 1) include = true;
if (layer === 'D' && cube[x][y][z].y === -1) include = true;
if (layer === 'L' && cube[x][y][z].x === -1) include = true;
if (layer === 'R' && cube[x][y][z].x === 1) include = true;
if (layer === 'F' && cube[x][y][z].z === 1) include = true;
if (layer === 'B' && cube[x][y][z].z === -1) include = true;
if (include) {
affectedCubies.push(cube[x][y][z]);
}
}
}
}
affectedCubies.forEach(cubie => {
let newX = cubie.x;
let newY = cubie.y;
let newZ = cubie.z;
if (layer === 'U' || layer === 'D') {
const temp = newX;
if (direction > 0) {
newX = -newZ;
newZ = temp;
} else {
newX = newZ;
newZ = -temp;
}
} else if (layer === 'L' || layer === 'R') {
const temp = newY;
if (direction > 0) {
newY = -newZ;
newZ = temp;
} else {
newY = newZ;
newZ = -temp;
}
} else if (layer === 'F' || layer === 'B') {
const temp = newX;
if (direction > 0) {
newX = -newY;
newY = temp;
} else {
newX = newY;
newY = -temp;
}
}
const tempColors = { ...cubie.colors };
if (layer === 'U' || layer === 'D') {
if (direction > 0) {
cubie.colors.front = tempColors.right;
cubie.colors.right = tempColors.back;
cubie.colors.back = tempColors.left;
cubie.colors.left = tempColors.front;
} else {
cubie.colors.front = tempColors.left;
cubie.colors.left = tempColors.back;
cubie.colors.back = tempColors.right;
cubie.colors.right = tempColors.front;
}
} else if (layer === 'L' || layer === 'R') {
if (direction > 0) {
cubie.colors.front = tempColors.top;
cubie.colors.top = tempColors.back;
cubie.colors.back = tempColors.bottom;
cubie.colors.bottom = tempColors.front;
} else {
cubie.colors.front = tempColors.bottom;
cubie.colors.bottom = tempColors.back;
cubie.colors.back = tempColors.top;
cubie.colors.top = tempColors.front;
}
} else if (layer === 'F' || layer === 'B') {
if (direction > 0) {
cubie.colors.top = tempColors.left;
cubie.colors.left = tempColors.bottom;
cubie.colors.bottom = tempColors.right;
cubie.colors.right = tempColors.top;
} else {
cubie.colors.top = tempColors.right;
cubie.colors.right = tempColors.bottom;
cubie.colors.bottom = tempColors.left;
cubie.colors.left = tempColors.top;
}
}
cubie.x = newX;
cubie.y = newY;
cubie.z = newZ;
updateCubiePosition(cubie.element, cubie.x, cubie.y, cubie.z);
const faceElements = cubie.element.querySelectorAll('.face');
faceElements.forEach(face => {
const faceClass = Array.from(face.classList).find(c => c.startsWith('face-') && !c.startsWith('face-face'));
if (faceClass) {
const faceName = faceClass.replace('face-', '');
const colorName = cubie.colors[faceName] || 'black';
face.className = `face face-${faceName} face-${colorName}`;
if (faceName === 'front') face.style.transform = 'rotateY(0deg) translateZ(48px)';
if (faceName === 'back') face.style.transform = 'rotateY(180deg) translateZ(48px)';
if (faceName === 'right') face.style.transform = 'rotateY(90deg) translateZ(48px)';
if (faceName === 'left') face.style.transform = 'rotateY(-90deg) translateZ(48px)';
if (faceName === 'top') face.style.transform = 'rotateX(90deg) translateZ(48px)';
if (faceName === 'bottom') face.style.transform = 'rotateX(-90deg) translateZ(48px)';
}
});
});
const newCube = [];
for (let x = 0; x < 3; x++) {
newCube[x] = [];
for (let y = 0; y < 3; y++) {
newCube[x][y] = [];
for (let z = 0; z < 3; z++) {
newCube[x][y][z] = cube[x][y][z];
}
}
}
for (let x = 0; x < 3; x++) {
for (let y = 0; y < 3; y++) {
for (let z = 0; z < 3; z++) {
const cubie = newCube[x][y][z];
cube[cubie.x + 1][cubie.y + 1][cubie.z + 1] = cubie;
}
}
}
}
initAndScramble();
function showHint() { function showHint() {
const moveNames = { const moveNames = {
'U': { name: 'Верх (U)', axis: 'Y' }, 'U': { name: 'Верх (U)', axis: 'Y' },