+var canvas = document.getElementById("game-canvas");
+var context = canvas.getContext("2d");
+
+var boardSize = 19;
+var border = canvas.width / 10;
+var boardWidth = canvas.width - (border * 2);
+var boardHeight = canvas.height - (border * 2);
+
+var cellWidth = boardWidth / (boardSize - 1);
+var cellHeight = boardHeight / (boardSize - 1);
+
+var lastX;
+var lastY;
+
+drawGrid();
+
+function drawGrid()
+{
+ var backgroundColor = '#F5DEB3';
+ var gridColor = '#8B4513';
+
+ context.fillStyle = backgroundColor;
+ context.fillRect(0, 0, canvas.width, canvas.height);
+
+ context.fillStyle = gridColor;
+
+ for (var i = 0; i < boardSize - 1; i++)
+ {
+ for (var j = 0; j < boardSize - 1; j++)
+ {
+ context.fillRect(i * cellWidth + border, j * cellHeight + border, cellWidth - 1, cellHeight - 1);
+ }
+ }
+
+ var quater = Math.floor((boardSize - 1) / 4);
+ var markerSize = 8;
+ var markerMargin = (markerSize / 2) + 0.5;
+
+ context.fillStyle = backgroundColor;
+
+ if (!!(boardSize % 2))
+ {
+ context.fillRect((((boardSize - 1) / 2) * cellWidth) + border - markerMargin, (((boardSize - 1) / 2) * cellWidth) + border - markerMargin, markerSize, markerSize);
+ }
+
+ context.fillRect((quater * cellWidth) + border - markerMargin, (quater * cellWidth) + border - markerMargin, markerSize, markerSize);
+ context.fillRect((((boardSize - 1) - quater) * cellWidth) + border - markerMargin, (quater * cellWidth) + border - markerMargin, markerSize, markerSize);
+
+ context.fillRect((((boardSize - 1) - quater) * cellWidth) + border - markerMargin, (((boardSize - 1) - quater) * cellWidth) + border - markerMargin, markerSize, markerSize);
+ context.fillRect((quater * cellWidth) + border - markerMargin, (((boardSize - 1) - quater) * cellWidth) + border - markerMargin, markerSize, markerSize);
+
+ var size = canvas.width / 40;
+ var textSpacing = 10;
+ context.fillStyle = '#000000';
+ context.font = size + "px Arial";
+
+ for (i = 0; i < boardSize; i++)
+ {
+ context.fillText((i + 1), textSpacing, ((canvas.height - border) - (i * cellHeight)) + (size / 3));
+ context.fillText((i + 1), canvas.width - (size + textSpacing), ((canvas.height - border) - (i * cellHeight)) + (size / 3));
+
+ context.fillText((String.fromCharCode(97 + i)), (border + (i * cellHeight) + (size / 3)) - (size / 1.5), textSpacing + size);
+ context.fillText((String.fromCharCode(97 + i)), (border + (i * cellHeight) + (size / 3)) - (size / 1.5), canvas.height - (textSpacing * 2));
+ }
+}
+
+canvas.addEventListener('mousedown', function(evt)
+{
+ if (lastX && lastY) {
+ placeStone((lastX * cellWidth) + border, (lastY * cellWidth) + border, 'rgba(0, 0, 0, 1)');
+ }
+});
+
+canvas.addEventListener('mousemove', function(evt)
+{
+ var position = getGridPoint(evt);
+
+ if ((position.x != lastX) || (position.y != lastY))
+ {
+ drawGrid();
+
+ if (((position.x >=0) && (position.x < boardSize)) && ((position.y >=0) && (position.y < boardSize)))
+ {
+ placeStone((position.x * cellWidth) + border, (position.y * cellWidth) + border, 'rgba(0, 0, 0, 0.2)');
+ }
+ }
+
+ lastX = position.x;
+ lastY = position.y;
+});
+
+function placeStone(x, y, color)
+{
+ var radius = cellWidth / 2;
+
+ context.beginPath();
+ context.arc(x, y, radius, 0, 2 * Math.PI, false);
+ context.fillStyle = color;
+ context.fill();
+ context.lineWidth = 5;
+}
+
+function getGridPoint(evt)
+{
+ var rect = canvas.getBoundingClientRect();
+
+ var x = Math.round((evt.clientX-border-rect.left)/(rect.right-2*border-rect.left)* boardWidth);
+ var y = Math.round((evt.clientY-border-rect.top)/(rect.bottom-2*border-rect.top)* boardHeight);
+
+ var roundX = Math.round(x / cellWidth);
+ var roundY = Math.round(y / cellHeight);
+
+ return {
+ x: roundX,
+ y: roundY
+ };
+}