first commit
This commit is contained in:
Executable
+131
@@ -0,0 +1,131 @@
|
||||
<!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>
|
||||
Reference in New Issue
Block a user