diff --git a/src/game/mod.rs b/src/game/mod.rs
index 61e4fbb..7abcf10 100644
--- a/src/game/mod.rs
+++ b/src/game/mod.rs
@@ -57,7 +57,7 @@ impl Game {
}
/// Attempt to make a move given a source and destination index
- pub fn make_move(&mut self, from: BrdIdx, to: BrdIdx) {
+ pub fn make_move(&mut self, from: BrdIdx, to: BrdIdx) -> Moveable {
let able = self.current.can_move(from, to);
if let Moveable::Allowed = able {
@@ -76,6 +76,8 @@ impl Game {
// board has been changed, update player turn
self.current.current_turn = self.current.current_turn.opponent();
+
+ able
}
/// Update board state with given move and push new board into current state
diff --git a/www/index.html b/www/index.html
index 6a09245..27eba6e 100644
--- a/www/index.html
+++ b/www/index.html
@@ -39,11 +39,17 @@
Working on an implementation of checkers in Rust WASM with a thin Js frontend, mainly as an exercise to learn Rust and to have a larger project in the language to fiddle with. The idea is to use the minimax algorithm to create an AI player that can operate with reasonable performance as a result of Rust's compiled performance.
-
diff --git a/www/index.js b/www/index.js
index 852fc01..be87e49 100644
--- a/www/index.js
+++ b/www/index.js
@@ -1,4 +1,4 @@
-import { Game, Board, BrdIdx, Painter, Team, init_wasm } from "draught";
+import { Game, Board, BrdIdx, Painter, Team, init_wasm, Moveable } from "draught";
import { memory } from "draught/draught_bg.wasm";
///////////////////
@@ -29,6 +29,8 @@ init_wasm();
// let board = new Board(BOARD_WIDTH, BOARD_HEIGHT, Team.Black);
+const statusText = document.getElementById("status-p");
+
let current_state = GameState.HUMAN_TURN.THINKING;
let painter = new Painter(CANVAS_WIDTH, CANVAS_HEIGHT, "game-canvas");
// painter.draw(board);
@@ -81,9 +83,43 @@ function process_canvas_click(cell_coord) {
console.log("Your turn, first piece already picked, picking second");
to = cell_coord;
- game.make_move(from, to);
- game.draw();
+ if(from.col == to.col && from.row == to.row){
+ setStatusText("Move Cancelled");
+ } else {
+
+ let status = game.make_move(from, to);
+
+ if (status == Moveable.Allowed) {
+ // game.draw();
+ } else {
+ switch(status) {
+ case Moveable.Allowed:
+ break;
+ case Moveable.IllegalTrajectory:
+ break;
+ case Moveable.JumpingSameTeam:
+ break;
+ case Moveable.NoJumpablePiece:
+ break;
+ case Moveable.OccupiedDest:
+ break;
+ case Moveable.OutOfBounds:
+ break;
+ case Moveable.UnoccupiedSrc:
+ break;
+ case Moveable.Unplayable:
+ break;
+ case Moveable.WrongTeamSrc:
+ break;
+ }
+ }
+
+ }
+
+ game.draw();
+ from = null;
+ to = null;
current_state = GameState.HUMAN_TURN.THINKING;
break;
@@ -101,3 +137,8 @@ function getMousePos(canvas, evt) {
};
}
+function setStatusText(txt) {
+ statusText.hidden = false;
+ statusText.innerText = txt;
+}
+