1 var canvas = document.getElementById("game-canvas");
2 var context = canvas.getContext("2d");
5 var border = canvas.width / 10;
6 var boardWidth = canvas.width - (border * 2);
7 var boardHeight = canvas.height - (border * 2);
9 var cellWidth = boardWidth / (boardSize - 1);
10 var cellHeight = boardHeight / (boardSize - 1);
19 var backgroundColor = '#F5DEB3';
20 var gridColor = '#8B4513';
22 context.fillStyle = backgroundColor;
23 context.fillRect(0, 0, canvas.width, canvas.height);
25 context.fillStyle = gridColor;
27 for (var i = 0; i < boardSize - 1; i++)
29 for (var j = 0; j < boardSize - 1; j++)
31 context.fillRect(i * cellWidth + border, j * cellHeight + border, cellWidth - 1, cellHeight - 1);
35 var quater = Math.floor((boardSize - 1) / 4);
37 var markerMargin = (markerSize / 2) + 0.5;
39 context.fillStyle = backgroundColor;
41 if (!!(boardSize % 2))
43 context.fillRect((((boardSize - 1) / 2) * cellWidth) + border - markerMargin, (((boardSize - 1) / 2) * cellWidth) + border - markerMargin, markerSize, markerSize);
46 context.fillRect((quater * cellWidth) + border - markerMargin, (quater * cellWidth) + border - markerMargin, markerSize, markerSize);
47 context.fillRect((((boardSize - 1) - quater) * cellWidth) + border - markerMargin, (quater * cellWidth) + border - markerMargin, markerSize, markerSize);
49 context.fillRect((((boardSize - 1) - quater) * cellWidth) + border - markerMargin, (((boardSize - 1) - quater) * cellWidth) + border - markerMargin, markerSize, markerSize);
50 context.fillRect((quater * cellWidth) + border - markerMargin, (((boardSize - 1) - quater) * cellWidth) + border - markerMargin, markerSize, markerSize);
52 var size = canvas.width / 40;
54 context.fillStyle = '#000000';
55 context.font = size + "px Arial";
57 for (i = 0; i < boardSize; i++)
59 context.fillText((i + 1), textSpacing, ((canvas.height - border) - (i * cellHeight)) + (size / 3));
60 context.fillText((i + 1), canvas.width - (size + textSpacing), ((canvas.height - border) - (i * cellHeight)) + (size / 3));
62 context.fillText((String.fromCharCode(97 + i)), (border + (i * cellHeight) + (size / 3)) - (size / 1.5), textSpacing + size);
63 context.fillText((String.fromCharCode(97 + i)), (border + (i * cellHeight) + (size / 3)) - (size / 1.5), canvas.height - (textSpacing * 2));
67 canvas.addEventListener('mousedown', function(evt)
70 placeStone((lastX * cellWidth) + border, (lastY * cellWidth) + border, 'rgba(0, 0, 0, 1)');
74 canvas.addEventListener('mousemove', function(evt)
76 var position = getGridPoint(evt);
78 if ((position.x != lastX) || (position.y != lastY))
82 if (((position.x >=0) && (position.x < boardSize)) && ((position.y >=0) && (position.y < boardSize)))
84 placeStone((position.x * cellWidth) + border, (position.y * cellWidth) + border, 'rgba(0, 0, 0, 0.2)');
92 function placeStone(x, y, color)
94 var radius = cellWidth / 2;
97 context.arc(x, y, radius, 0, 2 * Math.PI, false);
98 context.fillStyle = color;
100 context.lineWidth = 5;
103 function getGridPoint(evt)
105 var rect = canvas.getBoundingClientRect();
107 var x = Math.round((evt.clientX-border-rect.left)/(rect.right-2*border-rect.left)* boardWidth);
108 var y = Math.round((evt.clientY-border-rect.top)/(rect.bottom-2*border-rect.top)* boardHeight);
110 var roundX = Math.round(x / cellWidth);
111 var roundY = Math.round(y / cellHeight);