Implement moving on engine

Thus make all state management the engine's responsibility, and remove
the state maintaining code from frontend!
This commit is contained in:
2021-12-14 21:56:27 +01:00
parent c49bedf0ad
commit a1207f2404
3 changed files with 15 additions and 37 deletions

View File

@@ -17,16 +17,13 @@ function post_json(url, json) {
}
class Backend {
constructor() {
this.config = new Configuration(
new Map(Object.entries(get_json("http://localhost:3000/get_state/")))
getConfig() {
return new Map(
Object.entries(get_json("http://localhost:3000/get_state/"))
);
}
getConfig() {
return this.config;
}
makeMove(source, target) {
this.config.makeMove(source, target);
return post_json("http://localhost:3000/make_move/", [source, target]);
}
getAvailableMoves(position) {
return post_json("http://localhost:3000/get_moves/", position);
@@ -44,7 +41,7 @@ class Chess {
this.canMoveTo = [];
document.onclick = (ev) => this.click(ev);
}
syncBackend() {
updateState() {
let config = this.backend.getConfig();
this.configVis.configuration = config;
this.configVis.draw(this.canvas);
@@ -63,7 +60,7 @@ class Chess {
}
this.activeSquares.unselectSquare(this.canvas);
this.activeSquares.unsetMoveSquares(this.canvas);
this.syncBackend();
this.updateState();
this.moveSource = null;
}
click(ev) {
@@ -82,30 +79,4 @@ class Chess {
}
}
class Configuration {
constructor(board) {
this.board = new Map(board);
}
getAt(position) {
if (!this.board.has(position)) {
return null;
}
return this.board.get(position);
}
setAt(position, piece) {
this.board.set(position, piece);
}
dropAt(position) {
this.board.delete(position);
}
makeMove(source, target) {
const piece = this.getAt(source);
if (piece === null) return;
else {
this.setAt(target, piece);
this.dropAt(source);
}
}
}
new Chess();