用JavaScript写一个推箱子游戏
时间: 2023-07-01 15:05:21 浏览: 162
JavaScript编写推箱子游戏
好的,以下是一个简单的推箱子游戏的实现,使用了HTML、CSS和JavaScript:
```
<!DOCTYPE html>
<html>
<head>
<title>推箱子游戏</title>
<style>
body {
font-family: Arial, sans-serif;
}
#game-board {
width: 400px;
height: 400px;
margin: 0 auto;
position: relative;
background-color: #EEE;
border: 1px solid #999;
}
.box {
width: 40px;
height: 40px;
background-color: #F00;
position: absolute;
top: 0;
left: 0;
border: 1px solid #000;
box-sizing: border-box;
}
.player {
width: 40px;
height: 40px;
background-color: #00F;
position: absolute;
top: 0;
left: 0;
border: 1px solid #000;
box-sizing: border-box;
}
</style>
</head>
<body>
<h1>推箱子游戏</h1>
<div id="game-board">
<div class="box" data-row="1" data-col="1"></div>
<div class="player" data-row="2" data-col="1"></div>
</div>
<script>
// 获取游戏面板元素
var gameBoard = document.getElementById("game-board");
// 获取方块和玩家元素
var boxes = document.getElementsByClassName("box");
var player = document.getElementsByClassName("player")[0];
// 定义游戏地图
var gameMap = [
[1, 1, 1, 1, 1],
[1, 0, 0, 0, 1],
[1, 2, 1, 0, 1],
[1, 0, 3, 0, 1],
[1, 1, 1, 1, 1]
];
// 定义玩家当前位置
var playerRow = 2;
var playerCol = 1;
// 初始化游戏面板
render();
// 监听键盘事件
document.addEventListener("keydown", function(event) {
// 根据按键移动玩家
switch (event.keyCode) {
case 37: // 左箭头
movePlayer(0, -1);
break;
case 38: // 上箭头
movePlayer(-1, 0);
break;
case 39: // 右箭头
movePlayer(0, 1);
break;
case 40: // 下箭头
movePlayer(1, 0);
break;
}
});
// 渲染游戏面板
function render() {
// 遍历游戏地图,创建方块元素
for (var row = 0; row < gameMap.length; row++) {
for (var col = 0; col < gameMap[row].length; col++) {
if (gameMap[row][col] === 1) {
var box = document.createElement("div");
box.className = "box";
box.dataset.row = row;
box.dataset.col = col;
box.style.top = (row * 40) + "px";
box.style.left = (col * 40) + "px";
gameBoard.appendChild(box);
} else if (gameMap[row][col] === 2) {
playerRow = row;
playerCol = col;
player.style.top = (row * 40) + "px";
player.style.left = (col * 40) + "px";
}
}
}
}
// 移动玩家
function movePlayer(rowDiff, colDiff) {
// 计算新位置
var newRow = playerRow + rowDiff;
var newCol = playerCol + colDiff;
// 判断新位置是否合法
if (newRow < 0 || newRow >= gameMap.length || newCol < 0 || newCol >= gameMap[0].length) {
return; // 超出边界,不做处理
}
if (gameMap[newRow][newCol] === 1) {
return; // 新位置是障碍物,不做处理
}
if (gameMap[newRow][newCol] === 3) {
// 新位置是目标位置,推动箱子
var boxRow = newRow + rowDiff;
var boxCol = newCol + colDiff;
if (boxRow < 0 || boxRow >= gameMap.length || boxCol < 0 || boxCol >= gameMap[0].length) {
return; // 箱子超出边界,不做处理
}
if (gameMap[boxRow][boxCol] === 1 || gameMap[boxRow][boxCol] === 3) {
return; // 箱子不能推动,不做处理
}
// 推动箱子
gameMap[boxRow][boxCol] = 3;
gameMap[newRow][newCol] = 2;
gameMap[playerRow][playerCol] = 0;
playerRow = newRow;
playerCol = newCol;
update();
} else {
// 移动玩家
gameMap[newRow][newCol] = 2;
gameMap[playerRow][playerCol] = 0;
playerRow = newRow;
playerCol = newCol;
update();
}
}
// 更新游戏面板
function update() {
// 移动方块和玩家元素
for (var i = 0; i < boxes.length; i++) {
var box = boxes[i];
var row = parseInt(box.dataset.row);
var col = parseInt(box.dataset.col);
if (gameMap[row][col] === 1) {
box.style.display = "block";
} else {
box.style.display = "none";
}
}
player.style.top = (playerRow * 40) + "px";
player.style.left = (playerCol * 40) + "px";
}
</script>
</body>
</html>
```
该游戏实现了基本的推箱子玩法,玩家可以使用上下左右箭头键来移动,当玩家移动至一个箱子的位置时,可以推动箱子。当所有箱子都移动到目标位置时,游戏结束。
阅读全文