Compare commits

...

2 Commits

Author SHA1 Message Date
941a5c072a Refactor square drawing
Make square drawing modular and a member function of Canvas.

Issue #3
2021-12-13 19:38:54 +01:00
d36a948936 Use separate function to talk to engine in adapter 2021-12-13 18:21:24 +01:00
2 changed files with 34 additions and 21 deletions

View File

@@ -29,19 +29,24 @@ def make_piece(piece_str):
}
@app.route("/get_state/")
def get_state():
engine.stdin.write(b"get_state\n")
def ask_engine(command):
engine.stdin.write(f"{command}\n".encode("ascii"))
engine.stdin.flush()
reply = engine.stdout.readline().decode("ascii").strip()
status, position_str = reply.split(",")
status, result = reply.split(",")
if status != "ok":
flask.abort(400)
position = {
position_str[i + 2 : i + 4]: make_piece(position_str[i : i + 2])
for i in range(0, len(position_str), 4)
return result
@app.route("/get_state/")
def get_state():
state_str = ask_engine("get_state")
state = {
state_str[i + 2 : i + 4]: make_piece(state_str[i : i + 2])
for i in range(0, len(state_str), 4)
}
return flask.jsonify(position)
return flask.jsonify(state)
if __name__ == "__main__":

View File

@@ -5,39 +5,47 @@ const INDEX_LETTERS = "abcdefgh";
export class Canvas {
constructor() {
this._canvas = document.createElement("canvas");
this._ctx = this._canvas.getContext("2d");
let boardSide = BOX_SIDE * 8 + INDEX_MARGIN;
this._canvas.width = boardSide;
this._canvas.height = boardSide;
document.body.appendChild(this._canvas);
this.drawChessBoard();
}
drawChessBoard() {
// Draw squares
let ctx = this._canvas.getContext("2d");
ctx.fillStyle = "#c0c0c0";
for (let r = 0; r < 8; r++) {
for (let c = 0; c < 8; c++) {
if ((r + c) % 2)
ctx.fillRect(
decideColor(r, c) {
if ((r + c) % 2) return "#c0c0c0";
else return "#ffffff";
}
drawSquareColor(color, r, c) {
const crtStyle = this._ctx.fillStyle;
this._ctx.fillStyle = color;
this._ctx.fillRect(
c * BOX_SIDE + INDEX_MARGIN,
r * BOX_SIDE + INDEX_MARGIN,
BOX_SIDE,
BOX_SIDE
);
this._ctx.fillStyle = crtStyle;
}
drawChessBoard() {
// Draw squares
for (let r = 0; r < 8; r++) {
for (let c = 0; c < 8; c++) {
this.drawSquareColor(this.decideColor(r, c), r, c);
}
}
// Draw letters
ctx.fillStyle = "black";
this._ctx.fillStyle = "black";
let fontsize = INDEX_MARGIN / 2;
ctx.font = `${fontsize}px Monospace`;
this._ctx.font = `${fontsize}px Monospace`;
for (let idx = 0; idx < 8; idx++) {
ctx.fillText(
this._ctx.fillText(
INDEX_LETTERS[idx],
BOX_SIDE * idx + BOX_SIDE / 2 + INDEX_MARGIN - fontsize / 4,
INDEX_MARGIN / 2
);
ctx.fillText(
this._ctx.fillText(
(8 - idx).toString(),
INDEX_MARGIN / 2 - fontsize / 4,
BOX_SIDE * idx + BOX_SIDE / 2 + INDEX_MARGIN + fontsize / 4