推箱子js代码
时间: 2023-08-13 10:06:24 浏览: 82
以下是一个简单的推箱子游戏的 JavaScript 代码示例:
```html
<!DOCTYPE html>
<html>
<head>
<title>推箱子游戏</title>
<style>
.box {
width: 50px;
height: 50px;
background-color: #ccc;
display: inline-block;
position: absolute;
top: 0;
left: 0;
}
.player {
width: 50px;
height: 50px;
background-color: #f00;
display: inline-block;
position: absolute;
top: 0;
left: 0;
}
</style>
</head>
<body>
<div id="game"></div>
<script>
// 游戏地图
var map = [
[1,1,1,1,1],
[1,0,0,2,1],
[1,0,3,0,1],
[1,0,0,4,1],
[1,1,1,1,1]
];
// 将游戏地图渲染到页面
var game = document.getElementById('game');
for (var i = 0; i < map.length; i++) {
for (var j = 0; j < map[i].length; j++) {
if (map[i][j] === 1) {
game.innerHTML += '<div class="box" style="top:' + i*50 + 'px;left:' + j*50 + 'px;"></div>';
} else if (map[i][j] === 2) {
game.innerHTML += '<div class="player" style="top:' + i*50 + 'px;left:' + j*50 + 'px;"></div>';
}
}
}
// 监听键盘事件,控制玩家移动
var player = document.querySelector('.player');
document.addEventListener('keydown', function(event) {
var x = parseInt(player.style.left) / 50;
var y = parseInt(player.style.top) / 50;
if (event.keyCode === 37) { // 左
if (map[y][x-1] === 0) {
player.style.left = (x-1)*50 + 'px';
} else if (map[y][x-1] === 3 && map[y][x-2] === 0) {
player.style.left = (x-1)*50 + 'px';
map[y][x-2] = 3;
map[y][x-1] = 0;
// 重新渲染箱子和空地
game.innerHTML = '';
for (var i = 0; i < map.length; i++) {
for (var j = 0; j < map[i].length; j++) {
if (map[i][j] === 1) {
game.innerHTML += '<div class="box" style="top:' + i*50 + 'px;left:' + j*50 + 'px;"></div>';
} else if (map[i][j] === 2) {
game.innerHTML += '<div class="player" style="top:' + i*50 + 'px;left:' + j*50 + 'px;"></div>';
} else if (map[i][j] === 3) {
game.innerHTML += '<div class="box" style="top:' + i*50 + 'px;left:' + j*50 + 'px;"></div>';
}
}
}
}
} else if (event.keyCode === 38) { // 上
if (map[y-1][x] === 0) {
player.style.top = (y-1)*50 + 'px';
} else if (map[y-1][x] === 3 && map[y-2][x] === 0) {
player.style.top = (y-1)*50 + 'px';
map[y-2][x] = 3;
map[y-1][x] = 0;
// 重新渲染箱子和空地
game.innerHTML = '';
for (var i = 0; i < map.length; i++) {
for (var j = 0; j < map[i].length; j++) {
if (map[i][j] === 1) {
game.innerHTML += '<div class="box" style="top:' + i*50 + 'px;left:' + j*50 + 'px;"></div>';
} else if (map[i][j] === 2) {
game.innerHTML += '<div class="player" style="top:' + i*50 + 'px;left:' + j*50 + 'px;"></div>';
} else if (map[i][j] === 3) {
game.innerHTML += '<div class="box" style="top:' + i*50 + 'px;left:' + j*50 + 'px;"></div>';
}
}
}
}
} else if (event.keyCode === 39) { // 右
if (map[y][x+1] === 0) {
player.style.left = (x+1)*50 + 'px';
} else if (map[y][x+1] === 3 && map[y][x+2] === 0) {
player.style.left = (x+1)*50 + 'px';
map[y][x+2] = 3;
map[y][x+1] = 0;
// 重新渲染箱子和空地
game.innerHTML = '';
for (var i = 0; i < map.length; i++) {
for (var j = 0; j < map[i].length; j++) {
if (map[i][j] === 1) {
game.innerHTML += '<div class="box" style="top:' + i*50 + 'px;left:' + j*50 + 'px;"></div>';
} else if (map[i][j] === 2) {
game.innerHTML += '<div class="player" style="top:' + i*50 + 'px;left:' + j*50 + 'px;"></div>';
} else if (map[i][j] === 3) {
game.innerHTML += '<div class="box" style="top:' + i*50 + 'px;left:' + j*50 + 'px;"></div>';
}
}
}
}
} else if (event.keyCode === 40) { // 下
if (map[y+1][x] === 0) {
player.style.top = (y+1)*50 + 'px';
} else if (map[y+1][x] === 3 && map[y+2][x] === 0) {
player.style.top = (y+1)*50 + 'px';
map[y+2][x] = 3;
map[y+1][x] = 0;
// 重新渲染箱子和空地
game.innerHTML = '';
for (var i = 0; i < map.length; i++) {
for (var j = 0; j < map[i].length; j++) {
if (map[i][j] === 1) {
game.innerHTML += '<div class="box" style="top:' + i*50 + 'px;left:' + j*50 + 'px;"></div>';
} else if (map[i][j] === 2) {
game.innerHTML += '<div class="player" style="top:' + i*50 + 'px;left:' + j*50 + 'px;"></div>';
} else if (map[i][j] === 3) {
game.innerHTML += '<div class="box" style="top:' + i*50 + 'px;left:' + j*50 + 'px;"></div>';
}
}
}
}
}
});
</script>
</body>
</html>
```
这段代码实现了一个简单的推箱子游戏。其中,游戏地图以二维数组的形式给出,1 表示墙,0 表示空地,2 表示玩家,3 表示箱子。玩家通过键盘的上下左右键控制移动。如果遇到墙或箱子,则无法移动;如果遇到箱子并且箱子的前面是空地,则可以将箱子推动到空地上。游戏的渲染使用了简单的绝对定位和 CSS 样式。
阅读全文