@@ -7,6 +7,15 @@ function get_json(url) {
|
|||||||
return JSON.parse(request.responseText);
|
return JSON.parse(request.responseText);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function post_json(url, json) {
|
||||||
|
var request = new XMLHttpRequest();
|
||||||
|
request.open("post", url, false);
|
||||||
|
request.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
|
||||||
|
request.send(JSON.stringify(json));
|
||||||
|
if (request.status != 200) return null;
|
||||||
|
return JSON.parse(request.responseText);
|
||||||
|
}
|
||||||
|
|
||||||
class Backend {
|
class Backend {
|
||||||
constructor() {
|
constructor() {
|
||||||
this.config = new Configuration(
|
this.config = new Configuration(
|
||||||
@@ -20,8 +29,7 @@ class Backend {
|
|||||||
this.config.makeMove(source, target);
|
this.config.makeMove(source, target);
|
||||||
}
|
}
|
||||||
getAvailableMoves(position) {
|
getAvailableMoves(position) {
|
||||||
position;
|
return post_json("http://localhost:3000/get_moves/", position);
|
||||||
return [];
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -46,6 +54,7 @@ class Chess {
|
|||||||
let validMoves = this.backend.getAvailableMoves(source);
|
let validMoves = this.backend.getAvailableMoves(source);
|
||||||
if (validMoves === null) return;
|
if (validMoves === null) return;
|
||||||
this.activeSquares.selectSquare(this.canvas, source);
|
this.activeSquares.selectSquare(this.canvas, source);
|
||||||
|
this.activeSquares.setMoveSquares(this.canvas, validMoves);
|
||||||
this.moveSource = source;
|
this.moveSource = source;
|
||||||
}
|
}
|
||||||
finalizeMove(target) {
|
finalizeMove(target) {
|
||||||
@@ -53,6 +62,7 @@ class Chess {
|
|||||||
this.backend.makeMove(this.moveSource, target);
|
this.backend.makeMove(this.moveSource, target);
|
||||||
}
|
}
|
||||||
this.activeSquares.unselectSquare(this.canvas);
|
this.activeSquares.unselectSquare(this.canvas);
|
||||||
|
this.activeSquares.unsetMoveSquares(this.canvas);
|
||||||
this.syncBackend();
|
this.syncBackend();
|
||||||
this.moveSource = null;
|
this.moveSource = null;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -89,12 +89,27 @@ export function rowColToBoardIndex(row, col) {
|
|||||||
export class ActiveSquares {
|
export class ActiveSquares {
|
||||||
constructor() {
|
constructor() {
|
||||||
this.selectedSquare = null;
|
this.selectedSquare = null;
|
||||||
|
this.moveSquares = [];
|
||||||
}
|
}
|
||||||
selectSquare(canvas, position) {
|
selectSquare(canvas, position) {
|
||||||
let [r, c] = boardIndexToRowCol(position);
|
let [r, c] = boardIndexToRowCol(position);
|
||||||
canvas.drawSquareColor("#c0c0ff", r, c);
|
canvas.drawSquareColor("#c0c0ff", r, c);
|
||||||
this.selectedSquare = position;
|
this.selectedSquare = position;
|
||||||
}
|
}
|
||||||
|
setMoveSquares(canvas, moveSquares) {
|
||||||
|
moveSquares.forEach((position) => {
|
||||||
|
let [r, c] = boardIndexToRowCol(position);
|
||||||
|
canvas.drawSquareColor("#ffffc0", r, c);
|
||||||
|
this.moveSquares.push(position);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
unsetMoveSquares(canvas) {
|
||||||
|
this.moveSquares.forEach((position) => {
|
||||||
|
let [r, c] = boardIndexToRowCol(position);
|
||||||
|
canvas.drawSquareColor(canvas.decideColor(r, c), r, c);
|
||||||
|
});
|
||||||
|
this.moveSquares = [];
|
||||||
|
}
|
||||||
unselectSquare(canvas) {
|
unselectSquare(canvas) {
|
||||||
if (this.selectedSquare === null) return;
|
if (this.selectedSquare === null) return;
|
||||||
let [r, c] = boardIndexToRowCol(this.selectedSquare);
|
let [r, c] = boardIndexToRowCol(this.selectedSquare);
|
||||||
|
|||||||
Reference in New Issue
Block a user