Files
Site-Web/fun/2048.html
T
2026-05-16 11:10:19 +02:00

132 lines
3.1 KiB
HTML
Executable File

<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>2048 Game</title>
<style>
body {
background: #faf8ef;
font-family: "Arial", sans-serif;
text-align: center;
}
h1 {
color: #776e65;
}
#game-container {
width: 400px;
margin: 20px auto;
background: #bbada0;
padding: 10px;
border-radius: 6px;
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 10px;
}
.tile {
width: 90px;
height: 90px;
background: #cdc1b4;
border-radius: 6px;
font-size: 30px;
font-weight: bold;
line-height: 90px;
color: #776e65;
}
</style>
</head>
<body>
<h1>2048</h1>
<p>Utilizer les flèches pour controler le jeu!</p>
<div id="game-container"></div>
<script>
const container = document.getElementById("game-container");
let grid = [];
function init() {
grid = Array.from({length:4}, ()=>Array(4).fill(0));
addTile();
addTile();
draw();
}
function draw() {
container.innerHTML = "";
for(let i=0;i<4;i++){
for(let j=0;j<4;j++){
const tile = document.createElement("div");
tile.classList.add("tile");
if(grid[i][j]!==0){
tile.textContent = grid[i][j];
tile.style.background = getTileColor(grid[i][j]);
tile.style.color = grid[i][j]>4?"#f9f6f2":"#776e65";
}
container.appendChild(tile);
}
}
}
function getTileColor(n){
const colors = {2:"#eee4da",4:"#ede0c8",8:"#f2b179",16:"#f59563",32:"#f67c5f",64:"#f65e3b",128:"#edcf72",256:"#edcc61",512:"#edc850",1024:"#edc53f",2048:"#edc22e"};
return colors[n]||"#3c3a32";
}
function addTile(){
let empty = [];
for(let i=0;i<4;i++) for(let j=0;j<4;j++) if(grid[i][j]===0) empty.push([i,j]);
if(empty.length===0) return;
const [i,j] = empty[Math.floor(Math.random()*empty.length)];
grid[i][j] = Math.random()<0.9?2:4;
}
function slide(row){
let arr = row.filter(v=>v!==0);
for(let i=0;i<arr.length-1;i++){
if(arr[i]===arr[i+1]){ arr[i]*=2; arr[i+1]=0; }
}
return arr.filter(v=>v!==0).concat(Array(4-arr.filter(v=>v!==0).length).fill(0));
}
function rotate(grid){
return grid[0].map((_,i)=>grid.map(row=>row[i]));
}
document.addEventListener("keydown",e=>{
let moved=false;
if(e.key==="ArrowLeft"){
for(let i=0;i<4;i++){
const row=grid[i].slice();
grid[i]=slide(grid[i]);
if(!moved && row.join()!=grid[i].join()) moved=true;
}
} else if(e.key==="ArrowRight"){
for(let i=0;i<4;i++){
const row=grid[i].slice();
grid[i]=slide(grid[i].reverse()).reverse();
if(!moved && row.join()!=grid[i].join()) moved=true;
}
} else if(e.key==="ArrowUp"){
grid = rotate(grid);
for(let i=0;i<4;i++){
const row=grid[i].slice();
grid[i]=slide(grid[i]);
if(!moved && row.join()!=grid[i].join()) moved=true;
}
grid = rotate(rotate(rotate(grid)));
} else if(e.key==="ArrowDown"){
grid = rotate(grid);
for(let i=0;i<4;i++){
const row=grid[i].slice();
grid[i]=slide(grid[i].reverse()).reverse();
if(!moved && row.join()!=grid[i].join()) moved=true;
}
grid = rotate(rotate(rotate(grid)));
}
if(moved) addTile();
draw();
});
init();
</script>
</body>
</html>