JSFiddle - React, Tailwind, and code Playground
by DaveAlger
HTML
<p id="moves">Moves: <span id="movecount">0</span></p>
JavaScript
var kBoardWidth = 9;
var kBoardHeight= 9;
var kNumPieces = 9;
var kPieceWidth = 50;
var kPieceHeight= 50;
var kPixelWidth = 1 + (kBoardWidth * kPieceWidth);
var kPixelHeight= 1 + (kBoardHeight * kPieceHeight);
var gCanvasElement;
var gDrawingContext;
var gPattern;
var gPieces;
var gNumPieces;
var gSelectedPieceIndex;
var gSelectedPieceHasMoved;
var gMoveCount;
var gMoveCountElem;
var gGameInProgress;
function Cell(row, column) {
this.row = row;
this.column = column;
}
function getCursorPosition(e) {
/* returns Cell with .row and .column properties */
var x;
var y;
if (e.pageX != undefined && e.pageY != undefined) {
x = e.pageX;
y = e.pageY;
}
else {
x = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
y = e.clientY + document.body.scrollTop + document.documentElement.scrollTop;
}
x -= gCanvasElement.offsetLeft;
y -= gCanvasElement.offsetTop;
x = Math.min(x, kBoardWidth * kPieceWidth);
y = Math.min(y, kBoardHeight * kPieceHeight);
var cell = new Cell(Math.floor(y/kPieceHeight), Math.floor(x/kPieceWidth));
return cell;
}
function halmaOnClick(e) {
var cell = getCursorPosition(e);
for (var i = 0; i < gNumPieces; i++) {
if ((gPieces[i].row == cell.row) &&
(gPieces[i].column == cell.column)) {
clickOnPiece(i);
return;
}
}
clickOnEmptyCell(cell);
}
function clickOnEmptyCell(cell) {
if (gSelectedPieceIndex == -1) { return; }
var rowDiff = Math.abs(cell.row - gPieces[gSelectedPieceIndex].row);
var columnDiff = Math.abs(cell.column - gPieces[gSelectedPieceIndex].column);
if ((rowDiff <= 1) &&
(columnDiff <= 1)) {
/* we already know that this click was on an empty square,
so that must mean this was a valid single-square move */
gPieces[gSelectedPieceIndex].row = cell.row;
gPieces[gSelectedPieceIndex].column = cell.column;
gMoveCount += 1;
gSelectedPieceIndex = -1;
gSelectedPieceHasMoved =...