通过一个 for 循环,在画布上循环画线:
其中:
context.moveTo(15 + i * 30, 15);
context.lineTo(15 + i * 30, 430);
context.stroke();
用于绘制从 (15 + i * 30, 15) 到 (15 + i * 30, 430) 的竖线
通过 15 + i * 30 盘算出每个竖线的 x 坐标
15 和 430 分别表示竖线的 起始 和 结束 的 y 坐标
例如,i = 1,此时 x = 45:
moveTo(45, 15) 表示将画笔移动到 (45, 15)的坐标位置,不绘制任何内容:
接着 lineTo(45, 430) 表示从当前位置画一条直线到 (45, 430)坐标:
末了 stroke() 方法会让这条线见效
接着,绘制横线:
context.moveTo(15, 15 + i * 30);
context.lineTo(430, 15 + i * 30);
context.stroke();
i 控制横线的 y 坐标,通过 15 + i * 30 盘算出每条横线的 y 坐标,15 和 430 是横线的 x 坐标的起始值和结束值
function initGame() { // 是我下还是对方下. 根据服务器分配的先后手情况决定 let me = gameInfo.isWhite; // 游戏是否结束 let over = false; let chessBoard = []; //初始化chessBord数组(表示棋盘的数组) for (let i = 0; i < 15; i++) { chessBoard[i] = []; for (let j = 0; j < 15; j++) { chessBoard[i][j] = 0; } } let chess = document.querySelector('#chess');
let context = chess.getContext('2d');
context.strokeStyle = "#BFBFBF";
// 背景图片
let logo = new Image();
logo.src = "img/chessboard.jpg";
logo.onload = function () {
context.drawImage(logo, 0, 0, 450, 450);
initChessBoard();
}
// 绘制棋盘网格 function initChessBoard() {
for (let i = 0; i < 15; i++) {
context.moveTo(15 + i * 30, 15);
context.lineTo(15 + i * 30, 430);
context.stroke();
context.moveTo(15, 15 + i * 30);
context.lineTo(430, 15 + i * 30);
context.stroke();
}
} // 绘制一个棋子 /** * * @param {*} row 行 对应 y 坐标 * @param {*} col 列 对应 x 坐标 * @param {*} isWhite */ function oneStep(row, col, isWhite) {
} chess.onclick = function (e) { // 判定游戏是否结束 if (over) { return; } // 当前是否轮到 我 落子 if (!me) { return; } // 获取棋子的 x 和 y 坐标 let x = e.offsetX; let y = e.offsetY; // 注意, 横坐标是列, 纵坐标是行 let col = Math.floor(x / 30); let row = Math.floor(y / 30); if (chessBoard[row][col] == 0) { // TODO 发送坐标给服务器, 服务器要返回结果 oneStep(row, col, gameInfo.isWhite); chessBoard[row][col] = 1; } }}