用html写一个拼图游戏
时间: 2023-04-06 11:00:57 浏览: 173
好的,我可以回答这个问题。要用 HTML 写一个拼图游戏,可以使用 HTML5 的 canvas 标签和 JavaScript 来实现。首先,需要将图片切成若干个小块,然后将这些小块随机排列。接着,可以使用 JavaScript 来实现拖拽和交换小块的功能,直到拼图完成。具体实现细节可以参考相关的教程和代码示例。
相关问题
用canvas写一个拼图小游戏
好的,我可以为您提供一个简单的拼图小游戏的示例代码。代码中使用了HTML5的canvas元素和JavaScript语言来实现。
HTML部分:
```html
<!DOCTYPE html>
<html>
<head>
<title>拼图小游戏</title>
<style>
canvas {
border: 1px solid black;
}
</style>
</head>
<body>
<canvas id="canvas" width="400" height="400"></canvas>
<button id="startBtn">开始</button>
<script src="game.js"></script>
</body>
</html>
```
JavaScript部分:
```javascript
var canvas = document.getElementById("canvas");
var ctx = canvas.getContext("2d");
var img = new Image();
img.src = "puzzle.jpg";
var tileSize = 100; // 每个拼图块的大小
var rows = 4; // 拼图块的行数
var cols = 4; // 拼图块的列数
var tiles = []; // 存储所有拼图块的数组
var emptyTile = {row: rows-1, col: cols-1}; // 空白拼图块位置
img.onload = function() {
init();
}
function init() {
drawImage();
createTiles();
shuffleTiles();
drawTiles();
}
function drawImage() {
ctx.drawImage(img, 0, 0, canvas.width, canvas.height);
}
function createTiles() {
for (var r = 0; r < rows; r++) {
for (var c = 0; c < cols; c++) {
var tile = {
row: r,
col: c,
x: c * tileSize,
y: r * tileSize,
imageX: c * tileSize,
imageY: r * tileSize
};
tiles.push(tile);
}
}
}
function shuffleTiles() {
for (var i = tiles.length-1; i >= 0; i--) {
var randomIndex = Math.floor(Math.random() * i);
var temp = tiles[i];
tiles[i] = tiles[randomIndex];
tiles[randomIndex] = temp;
}
}
function drawTiles() {
ctx.clearRect(0, 0, canvas.width, canvas.height);
for (var i = 0; i < tiles.length; i++) {
var tile = tiles[i];
ctx.drawImage(img, tile.imageX, tile.imageY, tileSize, tileSize, tile.x, tile.y, tileSize, tileSize);
}
}
function getClickedTile(mouseX, mouseY) {
for (var i = 0; i < tiles.length; i++) {
var tile = tiles[i];
if (mouseX >= tile.x && mouseX < tile.x + tileSize && mouseY >= tile.y && mouseY < tile.y + tileSize) {
return tile;
}
}
return null;
}
canvas.addEventListener("click", function(event) {
var mouseX = event.clientX - canvas.offsetLeft;
var mouseY = event.clientY - canvas.offsetTop;
var clickedTile = getClickedTile(mouseX, mouseY);
if (clickedTile) {
if (isValidMove(clickedTile)) {
moveTile(clickedTile);
drawTiles();
if (isGameComplete()) {
alert("拼图完成!");
}
}
}
});
function isValidMove(tile) {
if (tile.row == emptyTile.row && Math.abs(tile.col - emptyTile.col) == 1) {
return true;
}
if (tile.col == emptyTile.col && Math.abs(tile.row - emptyTile.row) == 1) {
return true;
}
return false;
}
function moveTile(tile) {
var temp = {
row: tile.row,
col: tile.col,
x: tile.x,
y: tile.y
};
tile.row = emptyTile.row;
tile.col = emptyTile.col;
tile.x = emptyTile.col * tileSize;
tile.y = emptyTile.row * tileSize;
emptyTile.row = temp.row;
emptyTile.col = temp.col;
emptyTile.x = temp.col * tileSize;
emptyTile.y = temp.row * tileSize;
}
function isGameComplete() {
for (var i = 0; i < tiles.length; i++) {
var tile = tiles[i];
if (tile.row != Math.floor(i / cols) || tile.col != i % cols) {
return false;
}
}
return true;
}
document.getElementById("startBtn").addEventListener("click", function() {
shuffleTiles();
drawTiles();
});
```
代码中首先加载一张拼图图片,然后创建一个指定大小和行列数的拼图块数组,并使用shuffleTiles()方法对拼图块进行随机打乱。在绘制拼图块时,可以根据拼图块的位置和大小,从图片中截取拼图块对应的部分并绘制到canvas中。
当用户点击canvas时,根据鼠标坐标获取点击的拼图块,如果该拼图块与空白拼图块相邻且可以移动,则进行移动并重新绘制拼图块。当拼图全部拼好后,弹出提示框告知用户游戏完成。
最后,为了让用户可以重新开始游戏,我们添加了一个开始按钮,点击该按钮可以重新打乱拼图块并进行游戏。
用HTML5写一个九宫格拼图游戏
好的,以下是一个简单的九宫格拼图游戏的 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` 属性来控制位置,点击拼图块时判断是否可以移动,移动时交换位置,判断游戏是否结束时,判断拼图块的顺序是否正确。
阅读全文