mirror of
https://github.com/cliffe/BreakEscape.git
synced 2026-02-20 13:50:46 +00:00
Added a difficulty chooser, makes the pin mode hidden and adds a sound
This commit is contained in:
65
index.html
65
index.html
@@ -3063,6 +3063,27 @@
|
||||
padding: 10px;
|
||||
`;
|
||||
|
||||
// Add difficulty selection
|
||||
const difficultySelect = document.createElement('select');
|
||||
difficultySelect.style.cssText = `
|
||||
margin-bottom: 10px;
|
||||
padding: 5px;
|
||||
background: #444;
|
||||
color: white;
|
||||
border: 1px solid #666;
|
||||
border-radius: 3px;
|
||||
`;
|
||||
const difficulties = ['Easy - Pins Visible', 'Hard - Audio Only'];
|
||||
difficulties.forEach(diff => {
|
||||
const option = document.createElement('option');
|
||||
option.value = diff;
|
||||
option.textContent = diff;
|
||||
difficultySelect.appendChild(option);
|
||||
});
|
||||
|
||||
// Add audio feedback
|
||||
const clickSound = new Audio('data:audio/wav;base64,UklGRnoGAABXQVZFZm10IBAAAAABAAEAQB8AAEAfAAABAAgAZGF0YQoGAACBhYqFbF1fdH2Dam9ycG5wdX2Dg4CBhIWCgX+Af4B/goCDgIJ/gn+BfoF/gn+CgIF/gn+Cf4F/g4CDgIJ/hIGFgoWBhYKGgoaCh4OIg4mEioWLhIyFjYaOhI+FkIaRhZKGk4eUhpWHloeXiJiImYiaiZuKnIqdi56LoIyhjaKOo4+kj6WQppGnkqiTqZSqlauWrJetmK6Zr5qwm7GcsZ2yn7OgtKG1oraitqO3pLiltqe4qLmpuqq7q7ysvq2/rsCwwbHCssOzxbTGtce2yLfJuMq5y7rMu827zrzPvdC+0b/SwdPC1MPVxNbF18bYx9nI2sjbydvK3Mvdy97M383gzuHP4tDj0eTT5dTm1efW6Nfp2Ora69vt3O7d797w3/Lh8+P05fXn9+j46Prs+/D89v77AQYHDA8VGh8lKi8zOD1CRkpPVFhbX2NobHBydHZ4enx+gIGCg4SFhoeIiYqLjI2Oj5CRkpOUlZaXmJmam5ydnp+goaKjpKWmp6ipqqusra6vsLGys7S1tre4ubq7vL2+v8DBwsPExcbHyMnKy8zNzs/Q0dLT1NXW19jZ2tvc3d7f4OHi4+Tl5ufo6err7O3u7/Dx8vP09fb3+Pn6+/z9/v8AAQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyAhIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+f4CBgoOEhYaHiImKi4yNjo+QkZKTlJWWl5iZmpucnZ6foKGio6SlpqeoqaqrrK2ur7CxsrO0tba3uLm6u7y9vr/AwcLDxMXGx8jJysvMzc7P0NHS09TV1tfY2drb3N3e3+Dh4uPk5ebn6Onq6+zt7u/w8fLz9PX29/j5+vv8/f7/AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9fn+AgYKDhIWGh4iJiouMjY6PkJGSk5SVlpeYmZqbnJ2en6ChoqOkpaanqKmqq6ytrq+wsbKztLW2t7i5uru8vb6/wMHCw8TFxsfIycrLzM3Oz9DR0tPU1dbX2Nna29zd3t/g4eLj5OXm5+jp6uvs7e7v8PHy8/T19vf4+fr7/P3+/w==');
|
||||
|
||||
// Add close button
|
||||
const closeButton = document.createElement('button');
|
||||
closeButton.textContent = 'X';
|
||||
@@ -3091,8 +3112,9 @@
|
||||
// Track game state
|
||||
const gameState = {
|
||||
tensionApplied: false,
|
||||
pinStates: Array(numPins).fill(0), // 0 = down, 1 = binding, 2 = set
|
||||
currentBindingIndex: 0
|
||||
pinStates: Array(numPins).fill(0),
|
||||
currentBindingIndex: 0,
|
||||
hardMode: false
|
||||
};
|
||||
|
||||
// Create tension wrench toggle
|
||||
@@ -3138,10 +3160,12 @@
|
||||
|
||||
function updatePinVisual(index) {
|
||||
const pin = pinsContainer.children[index];
|
||||
switch (gameState.pinStates[index]) {
|
||||
case 0: pin.style.background = '#555'; break; // Down
|
||||
case 1: pin.style.background = '#00f'; break; // Binding
|
||||
case 2: pin.style.background = '#0f0'; break; // Set
|
||||
if (!gameState.hardMode) {
|
||||
switch (gameState.pinStates[index]) {
|
||||
case 0: pin.style.background = '#555'; break; // Down
|
||||
case 1: pin.style.background = '#00f'; break; // Binding
|
||||
case 2: pin.style.background = '#0f0'; break; // Set
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3171,15 +3195,21 @@
|
||||
pin.appendChild(pinNumber);
|
||||
|
||||
pin.onmousedown = () => {
|
||||
if (!gameState.tensionApplied) return; // Pins only move with tension
|
||||
if (!gameState.tensionApplied) return;
|
||||
|
||||
const bindingPin = bindingOrder[gameState.currentBindingIndex];
|
||||
if (i === bindingPin) {
|
||||
gameState.pinStates[i] = 2; // Set
|
||||
gameState.pinStates[i] = 2;
|
||||
gameState.currentBindingIndex++;
|
||||
pin.style.background = '#0f0'; // Green for set
|
||||
|
||||
// Check win condition
|
||||
// Play success click sound
|
||||
clickSound.currentTime = 0; // Reset sound to start
|
||||
clickSound.play().catch(e => console.log('Audio play failed:', e));
|
||||
|
||||
if (!gameState.hardMode) {
|
||||
pin.style.background = '#0f0';
|
||||
}
|
||||
|
||||
if (gameState.currentBindingIndex >= numPins) {
|
||||
setTimeout(() => {
|
||||
unlockTarget(lockable, 'door', lockable.layer);
|
||||
@@ -3191,8 +3221,10 @@
|
||||
}, 500);
|
||||
}
|
||||
} else {
|
||||
gameState.pinStates[i] = 1; // Binding
|
||||
pin.style.background = '#00f'; // Blue for binding
|
||||
gameState.pinStates[i] = 1;
|
||||
if (!gameState.hardMode) {
|
||||
pin.style.background = '#00f';
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@@ -3206,7 +3238,16 @@
|
||||
pinsContainer.appendChild(pin);
|
||||
}
|
||||
|
||||
difficultySelect.onchange = () => {
|
||||
gameState.hardMode = difficultySelect.value.includes('Hard');
|
||||
// Update pin visibility
|
||||
Array.from(pinsContainer.children).forEach(pin => {
|
||||
pin.style.opacity = gameState.hardMode ? '0.1' : '1';
|
||||
});
|
||||
};
|
||||
|
||||
// Add components to game container
|
||||
gameContainer.appendChild(difficultySelect);
|
||||
gameContainer.appendChild(tensionWrench);
|
||||
gameContainer.appendChild(pinsContainer);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user