Refactor project away from html
Main reason is to dynamically specify the dimensions for the board canvas.
This commit is contained in:
@@ -5,7 +5,6 @@
|
|||||||
<title>Chess</title>
|
<title>Chess</title>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<canvas id="chessBoard" width="600" height="600"></canvas>
|
|
||||||
<script src="main.js"></script>
|
<script src="main.js"></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -1,13 +1,16 @@
|
|||||||
var _canvas = document.getElementById('chessBoard');
|
const BOX_SIDE = 80;
|
||||||
|
const INDEX_MARGIN = BOX_SIDE / 2;
|
||||||
const INDEX_MARGIN = (_canvas.width + _canvas.height) / 2 / 16;
|
|
||||||
const BOARD_WIDTH = _canvas.width - INDEX_MARGIN;
|
|
||||||
const BOARD_HEIGHT = _canvas.height - INDEX_MARGIN;
|
|
||||||
const BOX_WIDTH = BOARD_WIDTH / 8;
|
|
||||||
const BOX_HEIGHT = BOARD_HEIGHT / 8;
|
|
||||||
|
|
||||||
const INDEX_LETTERS = 'abcdefgh';
|
const INDEX_LETTERS = 'abcdefgh';
|
||||||
|
|
||||||
|
function createCanvas() {
|
||||||
|
let canvas = document.createElement('canvas');
|
||||||
|
let boardSide = BOX_SIDE * 8 + INDEX_MARGIN;
|
||||||
|
canvas.width = boardSide;
|
||||||
|
canvas.height = boardSide;
|
||||||
|
document.body.appendChild(canvas);
|
||||||
|
return canvas
|
||||||
|
}
|
||||||
|
|
||||||
function drawChessBoard(canvas) {
|
function drawChessBoard(canvas) {
|
||||||
let ctx = canvas.getContext('2d');
|
let ctx = canvas.getContext('2d');
|
||||||
|
|
||||||
@@ -15,9 +18,9 @@ function drawChessBoard(canvas) {
|
|||||||
ctx.fillStyle = '#c0c0c0';
|
ctx.fillStyle = '#c0c0c0';
|
||||||
for (let r = 0; r < 8; r++) {
|
for (let r = 0; r < 8; r++) {
|
||||||
for (let c = 0; c < 8; c++) {
|
for (let c = 0; c < 8; c++) {
|
||||||
if ((r + c) % 2) ctx.fillRect(c*BOX_WIDTH + INDEX_MARGIN,
|
if ((r + c) % 2) ctx.fillRect(c*BOX_SIDE + INDEX_MARGIN,
|
||||||
r*BOX_HEIGHT + INDEX_MARGIN,
|
r*BOX_SIDE + INDEX_MARGIN,
|
||||||
BOX_WIDTH, BOX_HEIGHT);
|
BOX_SIDE, BOX_SIDE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -27,11 +30,11 @@ function drawChessBoard(canvas) {
|
|||||||
ctx.font = `${fontsize}px Monospace`;
|
ctx.font = `${fontsize}px Monospace`;
|
||||||
for (let idx = 0; idx < 8; idx++) {
|
for (let idx = 0; idx < 8; idx++) {
|
||||||
ctx.fillText(INDEX_LETTERS[idx],
|
ctx.fillText(INDEX_LETTERS[idx],
|
||||||
BOX_WIDTH*idx + BOX_WIDTH/2 + INDEX_MARGIN - fontsize / 4,
|
BOX_SIDE*idx + BOX_SIDE/2 + INDEX_MARGIN - fontsize / 4,
|
||||||
INDEX_MARGIN / 2);
|
INDEX_MARGIN / 2);
|
||||||
ctx.fillText((8-idx).toString(),
|
ctx.fillText((8-idx).toString(),
|
||||||
INDEX_MARGIN / 2 - fontsize / 4,
|
INDEX_MARGIN / 2 - fontsize / 4,
|
||||||
BOX_HEIGHT*idx + BOX_HEIGHT/2 + INDEX_MARGIN + fontsize / 4);
|
BOX_SIDE*idx + BOX_SIDE/2 + INDEX_MARGIN + fontsize / 4);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -39,11 +42,11 @@ function drawPiece(canvas, piece, field) {
|
|||||||
let canvasRect = canvas.getBoundingClientRect();
|
let canvasRect = canvas.getBoundingClientRect();
|
||||||
let rc = boardIndexToRowCol(field);
|
let rc = boardIndexToRowCol(field);
|
||||||
|
|
||||||
let im = new Image(BOX_WIDTH, BOX_HEIGHT);
|
let im = new Image(BOX_SIDE, BOX_SIDE);
|
||||||
im.src = `./icons/${piece}.svg`;
|
im.src = `./icons/${piece}.svg`;
|
||||||
im.onload = () => {
|
im.onload = () => {
|
||||||
let topPx = canvasRect.top + INDEX_MARGIN + rc[0]*BOX_HEIGHT + window.pageYOffset;
|
let topPx = canvasRect.top + INDEX_MARGIN + rc[0]*BOX_SIDE + window.pageYOffset;
|
||||||
let leftPx = canvasRect.left + INDEX_MARGIN + rc[1]*BOX_WIDTH + window.pageXOffset;
|
let leftPx = canvasRect.left + INDEX_MARGIN + rc[1]*BOX_SIDE + window.pageXOffset;
|
||||||
im.style.position = 'absolute';
|
im.style.position = 'absolute';
|
||||||
im.style.top = `${topPx}px`;
|
im.style.top = `${topPx}px`;
|
||||||
im.style.left = `${leftPx}px`;
|
im.style.left = `${leftPx}px`;
|
||||||
@@ -84,5 +87,6 @@ function boardIndexToRowCol(boardIndex) {
|
|||||||
return [row, col];
|
return [row, col];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var _canvas = createCanvas();
|
||||||
drawChessBoard(_canvas);
|
drawChessBoard(_canvas);
|
||||||
_setupBoard(_canvas);
|
_setupBoard(_canvas);
|
||||||
|
|||||||
Reference in New Issue
Block a user