用HTML5写一个九宫格拼图游戏
时间: 2023-12-29 12:53:00 浏览: 31
好的,以下是一个简单的九宫格拼图游戏的 HTML5 代码:
```html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>九宫格拼图游戏</title>
<style>
/* 设置游戏区域样式 */
#game-board {
display: flex;
flex-wrap: wrap;
width: 450px;
height: 450px;
background-color: #eee;
border: 5px solid #333;
}
/* 设置拼图块样式 */
.puzzle-piece {
width: 150px;
height: 150px;
background-size: 450px 450px;
background-repeat: no-repeat;
border: 5px solid #333;
}
/* 设置空白块样式 */
.empty-piece {
border: none;
background-color: #eee;
}
</style>
</head>
<body>
<h1>九宫格拼图游戏</h1>
<div id="game-board">
<!-- 生成拼图块 -->
<div class="puzzle-piece" id="piece-1"></div>
<div class="puzzle-piece" id="piece-2"></div>
<div class="puzzle-piece" id="piece-3"></div>
<div class="puzzle-piece" id="piece-4"></div>
<div class="puzzle-piece" id="piece-5"></div>
<div class="puzzle-piece" id="piece-6"></div>
<div class="puzzle-piece" id="piece-7"></div>
<div class="puzzle-piece" id="piece-8"></div>
<div class="empty-piece" id="empty"></div>
</div>
<script>
// 获取拼图块和空白块元素
const pieces = document.querySelectorAll('.puzzle-piece');
const emptyPiece = document.querySelector('.empty-piece');
// 随机排序拼图块位置
const pieceOrder = shuffleArray([1, 2, 3, 4, 5, 6, 7, 8]);
for (let i = 0; i < pieces.length; i++) {
pieces[i].style.order = pieceOrder[i];
pieces[i].style.backgroundImage = `url('img/piece${pieceOrder[i]}.jpg')`;
}
// 为拼图块添加点击事件
for (let i = 0; i < pieces.length; i++) {
pieces[i].addEventListener('click', function() {
// 判断拼图块是否可以移动
if (canMove(this)) {
// 移动拼图块
movePiece(this);
// 判断是否游戏结束
if (isGameOver()) {
alert('恭喜你完成了游戏!');
}
}
});
}
// 判断拼图块是否可以移动
function canMove(piece) {
const pieceOrder = parseInt(piece.style.order);
const emptyOrder = parseInt(emptyPiece.style.order);
// 判断是否在同一行或同一列
if (pieceOrder === emptyOrder - 3 ||
pieceOrder === emptyOrder - 1 ||
pieceOrder === emptyOrder + 1 ||
pieceOrder === emptyOrder + 3) {
return true;
} else {
return false;
}
}
// 移动拼图块
function movePiece(piece) {
const pieceOrder = parseInt(piece.style.order);
piece.style.order = emptyPiece.style.order;
emptyPiece.style.order = pieceOrder;
}
// 判断游戏是否结束
function isGameOver() {
for (let i = 0; i < pieces.length; i++) {
if (parseInt(pieces[i].style.order) !== i + 1) {
return false;
}
}
return true;
}
// 洗牌算法,随机排序数组
function shuffleArray(array) {
for (let i = array.length - 1; i > 0; i--) {
const j = Math.floor(Math.random() * (i + 1));
[array[i], array[j]] = [array[j], array[i]];
}
return array;
}
</script>
</body>
</html>
```
上面的代码生成了一个 3x3 的九宫格拼图游戏,拼图块和空白块使用 CSS 的 `order` 属性来控制位置,点击拼图块时判断是否可以移动,移动时交换位置,判断游戏是否结束时,判断拼图块的顺序是否正确。