html网页2048小游戏代码
时间: 2023-08-28 10:06:23 浏览: 53
以下是一个简单的 HTML + JavaScript 实现的 2048 小游戏:
```html
<!DOCTYPE html>
<html>
<head>
<title>2048 Game</title>
<style>
.tile {
width: 100px;
height: 100px;
font-size: 48px;
text-align: center;
line-height: 100px;
background-color: #eee;
border-radius: 10px;
margin: 5px;
float: left;
}
</style>
</head>
<body onload="startGame()">
<div id="gameBoard"></div>
<script>
var board = [];
var size = 4;
function startGame() {
createBoard();
addRandomTile();
addRandomTile();
}
function createBoard() {
var gameBoard = document.getElementById("gameBoard");
for (var i = 0; i < size; i++) {
board[i] = [];
for (var j = 0; j < size; j++) {
var tile = document.createElement("div");
tile.className = "tile";
tile.id = "tile" + i + j;
gameBoard.appendChild(tile);
board[i][j] = 0;
}
}
}
function addRandomTile() {
var emptyTiles = [];
for (var i = 0; i < size; i++) {
for (var j = 0; j < size; j++) {
if (board[i][j] === 0) {
emptyTiles.push({ x: i, y: j });
}
}
}
var randomTile = emptyTiles[Math.floor(Math.random() * emptyTiles.length)];
var value = Math.random() < 0.9 ? 2 : 4;
board[randomTile.x][randomTile.y] = value;
updateBoard();
}
function updateBoard() {
for (var i = 0; i < size; i++) {
for (var j = 0; j < size; j++) {
var tile = document.getElementById("tile" + i + j);
tile.innerHTML = board[i][j] > 0 ? board[i][j] : "";
tile.style.backgroundColor = getTileColor(board[i][j]);
}
}
}
function getTileColor(value) {
switch (value) {
case 2:
return "#eee";
case 4:
return "#e0e0e0";
case 8:
return "#ffc107";
case 16:
return "#ff9800";
case 32:
return "#ff5722";
case 64:
return "#f44336";
case 128:
return "#9c27b0";
case 256:
return "#673ab7";
case 512:
return "#3f51b5";
case 1024:
return "#2196f3";
case 2048:
return "#03a9f4";
default:
return "#9e9e9e";
}
}
function moveTiles(direction) {
var moved = false;
switch (direction) {
case "left":
for (var i = 0; i < size; i++) {
for (var j = 1; j < size; j++) {
if (board[i][j] > 0) {
for (var k = j; k > 0; k--) {
if (board[i][k - 1] === 0) {
board[i][k - 1] = board[i][k];
board[i][k] = 0;
moved = true;
} else if (board[i][k - 1] === board[i][k]) {
board[i][k - 1] *= 2;
board[i][k] = 0;
moved = true;
break;
} else {
break;
}
}
}
}
}
break;
case "right":
for (var i = 0; i < size; i++) {
for (var j = size - 2; j >= 0; j--) {
if (board[i][j] > 0) {
for (var k = j; k < size - 1; k++) {
if (board[i][k + 1] === 0) {
board[i][k + 1] = board[i][k];
board[i][k] = 0;
moved = true;
} else if (board[i][k + 1] === board[i][k]) {
board[i][k + 1] *= 2;
board[i][k] = 0;
moved = true;
break;
} else {
break;
}
}
}
}
}
break;
case "up":
for (var j = 0; j < size; j++) {
for (var i = 1; i < size; i++) {
if (board[i][j] > 0) {
for (var k = i; k > 0; k--) {
if (board[k - 1][j] === 0) {
board[k - 1][j] = board[k][j];
board[k][j] = 0;
moved = true;
} else if (board[k - 1][j] === board[k][j]) {
board[k - 1][j] *= 2;
board[k][j] = 0;
moved = true;
break;
} else {
break;
}
}
}
}
}
break;
case "down":
for (var j = 0; j < size; j++) {
for (var i = size - 2; i >= 0; i--) {
if (board[i][j] > 0) {
for (var k = i; k < size - 1; k++) {
if (board[k + 1][j] === 0) {
board[k + 1][j] = board[k][j];
board[k][j] = 0;
moved = true;
} else if (board[k + 1][j] === board[k][j]) {
board[k + 1][j] *= 2;
board[k][j] = 0;
moved = true;
break;
} else {
break;
}
}
}
}
}
break;
}
if (moved) {
addRandomTile();
}
}
document.addEventListener("keydown", function (event) {
switch (event.keyCode) {
case 37:
moveTiles("left");
break;
case 38:
moveTiles("up");
break;
case 39:
moveTiles("right");
break;
case 40:
moveTiles("down");
break;
}
event.preventDefault();
});
</script>
</body>
</html>
```
需要注意的是,这个实现比较简单,没有包含过多的特性,但足以让你了解 2048 小游戏的实现方式。