continu change style
This commit is contained in:
parent
60f424ce1e
commit
d8dcb08a46
BIN
public/img/pause.png
Normal file
BIN
public/img/pause.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 376 B |
@ -12,19 +12,21 @@
|
|||||||
<body>
|
<body>
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div id="left-part" class="first">
|
<div id="left-part" class="first">
|
||||||
<p>
|
<p class="frame">
|
||||||
Score:
|
Score:
|
||||||
<span id="score-value">0</span>
|
<span id="score-value">0</span>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div id="tetris" class="tetris">
|
<div id="tetris" class="frame tetris">
|
||||||
<canvas class="hidden" id="tetris-canvas" width="300" height="600"></canvas>
|
<div class="hidden" id="board-container">
|
||||||
|
<canvas id="tetris-canvas" width="300" height="600"></canvas>
|
||||||
|
</div>
|
||||||
<div class="main-menu hidden" id="main-menu" >
|
<div class="main-menu hidden" id="main-menu" >
|
||||||
<button id="start-button">Start</button>
|
<button id="start-button">Start</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="gameOver hidden" id="game-over-menu">
|
<div class="gameOver hidden" id="game-over-menu">
|
||||||
<p>Game Over</p>
|
<p>Game Over</p>
|
||||||
<button id="restart-button">Restart</button>
|
<label id="restart-button">Restart</label>
|
||||||
<button id="main-menu">Main Menu</button>
|
<button id="main-menu">Main Menu</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="pause hidden" id="pause-menu">
|
<div class="pause hidden" id="pause-menu">
|
||||||
@ -38,10 +40,19 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="last">
|
<div class="last">
|
||||||
<label id="pause-button">Pause And Resume</label>
|
<div class="frame">
|
||||||
|
<p>Next</p>
|
||||||
|
<div id="preview-container">
|
||||||
<canvas id="preview-canvas" width="100" height="100"></canvas>
|
<canvas id="preview-canvas" width="100" height="100"></canvas>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="frame pauseContainer" id="pause-container">
|
||||||
|
<div id="pause-button" class="icon play-pause">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
const board = document.getElementById('tetris-canvas');
|
let board = document.getElementById('tetris-canvas');
|
||||||
|
const boardBis = document.getElementById('tetris-canvas').cloneNode(true);
|
||||||
const scoreElement = document.getElementById('score-value');
|
const scoreElement = document.getElementById('score-value');
|
||||||
const loadMenu = document.getElementById('load-menu');
|
const loadMenu = document.getElementById('load-menu');
|
||||||
const mainMenu = document.getElementById('main-menu');
|
const mainMenu = document.getElementById('main-menu');
|
||||||
@ -7,15 +8,21 @@ const pauseMenu = document.getElementById('pause-menu');
|
|||||||
const startButton = document.getElementById('start-button');
|
const startButton = document.getElementById('start-button');
|
||||||
const pauseButton = document.getElementById('pause-button');
|
const pauseButton = document.getElementById('pause-button');
|
||||||
|
|
||||||
const preview = document.getElementById('preview-canvas');
|
let preview = document.getElementById('preview-canvas');
|
||||||
|
const previewBis = document.getElementById('preview-canvas').cloneNode(true);
|
||||||
|
|
||||||
const gameOverMenu = document.getElementById('game-over-menu');
|
const gameOverMenu = document.getElementById('game-over-menu');
|
||||||
const restartButton = document.getElementById('restart-button');
|
const restartButton = document.getElementById('restart-button');
|
||||||
|
|
||||||
|
const boardContainer = document.getElementById('board-container');
|
||||||
|
const previewContainer = document.getElementById('preview-container');
|
||||||
|
|
||||||
|
const buttonContainer = document.getElementById('pause-container');
|
||||||
|
|
||||||
restartButton.addEventListener('click', () =>
|
restartButton.addEventListener('click', () =>
|
||||||
{
|
{
|
||||||
displayGameBoard();
|
displayGameBoard();
|
||||||
iniGame();
|
startGame();
|
||||||
refresh();
|
refresh();
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
@ -30,8 +37,8 @@ pauseButton.addEventListener('click', () =>
|
|||||||
pauseGame();
|
pauseGame();
|
||||||
});
|
});
|
||||||
|
|
||||||
const boardContext = board.getContext('2d');
|
let boardContext = board.getContext('2d');
|
||||||
const previewContext = preview.getContext('2d');
|
let previewContext = preview.getContext('2d');
|
||||||
|
|
||||||
boardContext.fillStyle = 'black';
|
boardContext.fillStyle = 'black';
|
||||||
boardContext.fillRect(0, 0, board.width, board.height);
|
boardContext.fillRect(0, 0, board.width, board.height);
|
||||||
@ -57,7 +64,7 @@ let lines = 0;
|
|||||||
let speed = 1000;
|
let speed = 1000;
|
||||||
|
|
||||||
let pause = false;
|
let pause = false;
|
||||||
let gameOver = false;
|
let gameOver = true;
|
||||||
|
|
||||||
const templatePiece = [
|
const templatePiece = [
|
||||||
[ // ok
|
[ // ok
|
||||||
@ -200,10 +207,14 @@ function startGame() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function pauseGame() {
|
function pauseGame() {
|
||||||
|
if (gameOver) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (pause) {
|
if (pause) {
|
||||||
pause = false;
|
pause = false;
|
||||||
displayGameBoard();
|
displayGameBoard();
|
||||||
initAndChangeSpeedDrop();
|
//initAndChangeSpeedDrop();
|
||||||
} else {
|
} else {
|
||||||
pause = true;
|
pause = true;
|
||||||
displayPause();
|
displayPause();
|
||||||
@ -521,7 +532,7 @@ function fasteDrop() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
document.addEventListener('keydown', (event) => {
|
document.addEventListener('keydown', (event) => {
|
||||||
if (event.key == 'Escape') {
|
if (event.key == 'Escape' && !keyPress.includes('Escape')) {
|
||||||
pauseGame();
|
pauseGame();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -588,6 +599,5 @@ document.addEventListener('keyup', (event) => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
img.onload = () => {
|
img.onload = () => {
|
||||||
loadMenu.classList.add('hidden');
|
displayMainMenu();
|
||||||
mainMenu.classList.remove('hidden');
|
|
||||||
}
|
}
|
@ -8,31 +8,10 @@ function drawTetisWithOppacity(x, y, color, oppacity) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function drawTetrisOnThePreview(x, y, color) {
|
function drawTetrisOnThePreview(x, y, color) {
|
||||||
let width = 0;
|
previewContext.fillStyle = '#303f4f'; // Couleur de fond
|
||||||
let height = 0;
|
previewContext.fillRect(x, y, preview.width/5, preview.width/5);
|
||||||
|
previewContext.fillStyle = `rgba(${color[0]}, ${color[1]}, ${color[2]}, ${oppacity})`
|
||||||
for (let i = 0; i < nextPiece.length - 1; i++) {
|
previewContext.fillRect(x + gapPiece/2, y + gapPiece/2, preview.width/5 - gapPiece, preview.width/5 - gapPiece);
|
||||||
let piece = nextPiece[i];
|
|
||||||
width = Math.max(width, piece[0]);
|
|
||||||
height = Math.max(height, piece[1]);
|
|
||||||
}
|
|
||||||
|
|
||||||
x = x + (preview.width/5 - width * preview.width/5) / 2;
|
|
||||||
y = y + (preview.height/5 - height * preview.width/10) / 2;
|
|
||||||
|
|
||||||
previewContext.drawImage(img, x, y, preview.width/5, preview.width/5);
|
|
||||||
|
|
||||||
const imageData = previewContext.getImageData(x, y, preview.width/5, preview.width/5);
|
|
||||||
const data = imageData.data;
|
|
||||||
|
|
||||||
for (let i = 0; i < data.length; i += 4) {
|
|
||||||
data[i] = data[i] * color[0] / 255;
|
|
||||||
data[i + 1] = data[i + 1] * color[1] / 255;
|
|
||||||
data[i + 2] = data[i + 2] * color[2] / 255;
|
|
||||||
data[i + 3] = data[i + 3] * color[3] / 255;
|
|
||||||
}
|
|
||||||
|
|
||||||
previewContext.putImageData(imageData, x, y);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -97,14 +76,20 @@ function drawBoard() {
|
|||||||
|
|
||||||
function clearBoard() {
|
function clearBoard() {
|
||||||
// Ajouter un motif subtil en arrière-plan
|
// Ajouter un motif subtil en arrière-plan
|
||||||
boardContext.fillStyle = 'rgba(255, 255, 255)';
|
|
||||||
|
boardContainer.innerHTML = '';
|
||||||
|
board = boardBis.cloneNode(true);
|
||||||
|
boardContainer.appendChild(board);
|
||||||
|
|
||||||
|
boardContext = board.getContext('2d');
|
||||||
|
|
||||||
for (let i = 0; i < 10; i++) {
|
for (let i = 0; i < 10; i++) {
|
||||||
for (let j = 0; j < 20; j++) {
|
for (let j = 0; j < 20; j++) {
|
||||||
if ((i + j) % 2 === 0) {
|
if ((i + j) % 2 === 0) {
|
||||||
boardContext.fillStyle = '#5d6270'; // Encore plus sombre
|
boardContext.fillStyle = '#6d728020'; // Encore plus sombre
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
boardContext.fillStyle = '#3d4250'; // Presque noir-bleuté
|
boardContext.fillStyle = '#3d425020'; // Presque noir-bleuté
|
||||||
}
|
}
|
||||||
boardContext.fillRect(
|
boardContext.fillRect(
|
||||||
i * board.width/10,
|
i * board.width/10,
|
||||||
@ -118,12 +103,40 @@ function clearBoard() {
|
|||||||
|
|
||||||
|
|
||||||
function displayPreview() {
|
function displayPreview() {
|
||||||
previewContext.fillStyle = 'black';
|
previewContainer.innerHTML = '';
|
||||||
previewContext.fillRect(0, 0, preview.width, preview.height);
|
|
||||||
|
preview = previewBis.cloneNode(true);
|
||||||
|
previewContainer.appendChild(preview);
|
||||||
|
|
||||||
|
previewContext = preview.getContext('2d');
|
||||||
|
|
||||||
|
|
||||||
|
// make damier
|
||||||
|
|
||||||
|
for (let x = 0; x < 5 ; x++) {
|
||||||
|
for (let y = 0;y < 5; y++) {
|
||||||
|
if ((x + y) % 2 === 0) {
|
||||||
|
previewContext.fillStyle = '#6d728020'; // Encore plus sombre
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
previewContext.fillStyle = '#3d425020'; // Presque noir-bleuté
|
||||||
|
}
|
||||||
|
|
||||||
|
previewContext.fillRect(
|
||||||
|
x * preview.width/5,
|
||||||
|
y * preview.height/5,
|
||||||
|
preview.width/5,
|
||||||
|
preview.height/5
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let xDif = nextPiece[nextPiece.length - 1][0] - 2;
|
||||||
|
let yDif = nextPiece[nextPiece.length - 1][1] + 0.5;
|
||||||
|
|
||||||
for (let i = 0; i < nextPiece.length - 1; i++) {
|
for (let i = 0; i < nextPiece.length - 1; i++) {
|
||||||
let piece = nextPiece[i];
|
let piece = nextPiece[i];
|
||||||
drawTetrisOnThePreview(piece[0] * preview.width/5, piece[1] * preview.width/5, nextColor);
|
drawTetrisOnThePreview((piece[0] - xDif) * preview.width/5, (piece[1] + yDif) * preview.width/5, nextColor);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -136,11 +149,22 @@ function refresh() {
|
|||||||
displayPreview();
|
displayPreview();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function displayMainMenu() {
|
||||||
|
mainMenu.classList.remove('hidden');
|
||||||
|
loadMenu.classList.add('hidden');
|
||||||
|
boardContainer.classList.add('hidden');
|
||||||
|
pauseButton.classList.remove('paused');
|
||||||
|
buttonContainer.classList.add('hidden');
|
||||||
|
|
||||||
|
gameOverMenu.classList.add('hidden');
|
||||||
|
}
|
||||||
|
|
||||||
function displayPause() {
|
function displayPause() {
|
||||||
mainMenu.classList.add('hidden');
|
mainMenu.classList.add('hidden');
|
||||||
loadMenu.classList.add('hidden');
|
loadMenu.classList.add('hidden');
|
||||||
board.classList.add('hidden');
|
boardContainer.classList.add('hidden');
|
||||||
|
|
||||||
|
pauseButton.classList.add('paused');
|
||||||
pauseMenu.classList.remove('hidden');
|
pauseMenu.classList.remove('hidden');
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -149,14 +173,18 @@ function displayGameBoard() {
|
|||||||
loadMenu.classList.add('hidden');
|
loadMenu.classList.add('hidden');
|
||||||
pauseMenu.classList.add('hidden');
|
pauseMenu.classList.add('hidden');
|
||||||
gameOverMenu.classList.add('hidden');
|
gameOverMenu.classList.add('hidden');
|
||||||
|
pauseButton.classList.remove('paused');
|
||||||
|
buttonContainer.classList.remove('hidden');
|
||||||
|
|
||||||
board.classList.remove('hidden');
|
boardContainer.classList.remove('hidden');
|
||||||
}
|
}
|
||||||
|
|
||||||
function displayGameOver() {
|
function displayGameOver() {
|
||||||
mainMenu.classList.add('hidden');
|
mainMenu.classList.add('hidden');
|
||||||
loadMenu.classList.add('hidden');
|
loadMenu.classList.add('hidden');
|
||||||
board.classList.add('hidden');
|
boardContainer.classList.add('hidden');
|
||||||
|
pauseButton.classList.remove('paused');
|
||||||
|
buttonContainer.classList.add('hidden');
|
||||||
|
|
||||||
gameOverMenu.classList.remove('hidden');
|
gameOverMenu.classList.remove('hidden');
|
||||||
}
|
}
|
@ -20,6 +20,7 @@ body {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.container {
|
.container {
|
||||||
|
gap: 1rem;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: row;
|
flex-direction: row;
|
||||||
}
|
}
|
||||||
@ -27,22 +28,54 @@ body {
|
|||||||
.tetris {
|
.tetris {
|
||||||
width: 300px;
|
width: 300px;
|
||||||
height: 600px;
|
height: 600px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.frame {
|
||||||
padding: 10px;
|
padding: 10px;
|
||||||
|
margin: 0px;
|
||||||
|
|
||||||
border-radius: 10px;
|
border-radius: 10px;
|
||||||
|
|
||||||
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.6);
|
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.6);
|
||||||
|
|
||||||
background: #4E4F4D;
|
background: #414241a0;
|
||||||
|
position: relative; /* Nécessaire pour le positionnement du pseudo-élément */
|
||||||
|
|
||||||
|
p {
|
||||||
|
padding: 0px;
|
||||||
|
margin: 0px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.frame::before {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
bottom: 0;
|
||||||
|
background: #4E4F4DA0;
|
||||||
|
border-radius: 10px; /* Même border-radius que le parent */
|
||||||
|
backdrop-filter: blur(8px);
|
||||||
|
-webkit-backdrop-filter: blur(8px); /* Pour Safari */
|
||||||
|
z-index: -1; /* Assure que le fond est derrière le contenu */
|
||||||
}
|
}
|
||||||
|
|
||||||
.first {
|
.first {
|
||||||
width: 150px;
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 1rem;
|
||||||
|
align-items: end;
|
||||||
|
width: 100px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.last {
|
.last {
|
||||||
width: 150px;
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 1rem;
|
||||||
|
align-items: start;
|
||||||
|
width: 100px;
|
||||||
|
justify-content: space-between;
|
||||||
}
|
}
|
||||||
|
|
||||||
.main-menu {
|
.main-menu {
|
||||||
@ -67,6 +100,44 @@ body {
|
|||||||
color: white;
|
color: white;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.icon.play-pause {
|
||||||
|
border: 0;
|
||||||
|
background: transparent;
|
||||||
|
box-sizing: border-box;
|
||||||
|
width: 0;
|
||||||
|
height: 37px; /* Réduit de moitié (était 74px) */
|
||||||
|
|
||||||
|
border-color: transparent transparent transparent #74dc74;
|
||||||
|
transition: 100ms all ease;
|
||||||
|
cursor: pointer;
|
||||||
|
|
||||||
|
border-style: solid;
|
||||||
|
border-width: 18.5px 0 18.5px 30px; /* Réduit proportionnellement (était 37px 0 37px 60px) */
|
||||||
|
|
||||||
|
&.paused {
|
||||||
|
border-style: double;
|
||||||
|
border-width: 0px 0 0px 30px; /* Réduit (était 60px) */
|
||||||
|
border-color: transparent transparent transparent #ff5e5e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon.play-pause.play::before {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
bottom: 0;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
.pauseContainer {
|
||||||
|
width: min-content;
|
||||||
|
height: min-content;
|
||||||
|
}
|
||||||
|
|
||||||
.loader {
|
.loader {
|
||||||
width: 48px;
|
width: 48px;
|
||||||
height: 48px;
|
height: 48px;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user