帮我用js画布画一个象棋棋盘
时间: 2023-12-03 16:43:43 浏览: 132
好的,以下是一个简单的实现:
```html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>象棋棋盘</title>
<style>
canvas {
border: 1px solid #000;
}
</style>
</head>
<body>
<canvas id="chessboard"></canvas>
<script>
const canvas = document.getElementById('chessboard');
const ctx = canvas.getContext('2d');
const width = canvas.width = 500;
const height = canvas.height = 500;
const row = 10;
const col = 9;
const gridWidth = width / (col + 1);
const gridHeight = height / (row + 1);
const xStart = gridWidth;
const yStart = gridHeight;
// 绘制棋盘格子
function drawGrid() {
for (let i = 0; i < col; i++) {
for (let j = 0; j < row; j++) {
const x = xStart + i * gridWidth;
const y = yStart + j * gridHeight;
if ((i + j) % 2 === 0) {
ctx.fillStyle = '#b58863';
} else {
ctx.fillStyle = '#f0d9b5';
}
ctx.fillRect(x, y, gridWidth, gridHeight);
}
}
}
// 绘制棋盘边框和线条
function drawBorder() {
ctx.strokeStyle = '#000';
ctx.lineWidth = 2;
ctx.strokeRect(xStart, yStart, col * gridWidth, row * gridHeight);
for (let i = 1; i < col; i++) {
ctx.beginPath();
ctx.moveTo(xStart + i * gridWidth, yStart);
ctx.lineTo(xStart + i * gridWidth, yStart + 4 * gridHeight);
ctx.moveTo(xStart + i * gridWidth, yStart + 5 * gridHeight);
ctx.lineTo(xStart + i * gridWidth, yStart + row * gridHeight);
ctx.stroke();
}
for (let i = 1; i < row - 1; i++) {
ctx.beginPath();
ctx.moveTo(xStart, yStart + i * gridHeight);
ctx.lineTo(xStart + 2 * gridWidth, yStart + i * gridHeight);
ctx.moveTo(xStart + 7 * gridWidth, yStart + i * gridHeight);
ctx.lineTo(xStart + col * gridWidth, yStart + i * gridHeight);
ctx.stroke();
}
}
drawGrid();
drawBorder();
</script>
</body>
</html>
```
这段代码使用了 HTML5 的 `<canvas>` 元素,通过 JavaScript 在画布上绘制了一个象棋棋盘。具体实现过程如下:
1. 使用 `document.getElementById()` 方法获取到 `<canvas>` 元素,并获取到其上下文对象 `ctx`。
2. 定义棋盘的行列数、格子宽度和高度、起始位置等变量。
3. 编写 `drawGrid()` 函数,使用双重循环绘制棋盘格子。对于每个格子,根据奇偶性选择不同颜色填充。
4. 编写 `drawBorder()` 函数,绘制棋盘边框和线条。使用 `strokeRect()` 方法绘制矩形边框,使用 `beginPath()`、`moveTo()` 和 `lineTo()` 方法绘制线条。注意水平线条只需绘制一半,因为棋盘是对称的。
5. 调用 `drawGrid()` 和 `drawBorder()` 函数以绘制完成的棋盘。
阅读全文