From 082181680ead240ab1734ffb55315762f35ddff3 Mon Sep 17 00:00:00 2001 From: Sarsoo Date: Wed, 14 Jul 2021 13:11:40 +0000 Subject: [PATCH] deploy: 40d47f8042c83c4759b0a1b91a3e65c12bf36887 --- 10.bootstrap.js | 2 +- 10.bootstrap.js.map | 2 +- 1f6adaf6c2dc4c9caead.module.wasm | Bin 0 -> 122931 bytes a9e080695052ab7978e6.module.wasm | Bin 120761 -> 0 bytes doc/draught/all.html | 2 +- doc/draught/comp/index.html | 2 +- doc/draught/comp/struct.BoardNode.html | 12 +- doc/draught/comp/struct.Computer.html | 30 ++-- doc/draught/comp/struct.Move.html | 12 +- ...fn.__wasm_bindgen_generated_init_wasm.html | 2 +- doc/draught/fn.init_wasm.html | 2 +- doc/draught/game/index.html | 2 +- doc/draught/game/struct.Game.html | 51 +++--- doc/draught/index.html | 4 +- doc/draught/macro.log_error!.html | 10 ++ doc/draught/macro.log_error.html | 9 ++ doc/draught/paint/constant.OUTLINE_WIDTH.html | 4 +- doc/draught/paint/constant.PIECE_MARGIN.html | 6 - .../constant.PIECE_OUTLINE_PROPORTION.html | 6 + .../paint/constant.PIECE_OUTLINE_WIDTH.html | 6 - .../paint/constant.PIECE_PROPORTION.html | 6 + doc/draught/paint/index.html | 8 +- doc/draught/paint/sidebar-items.js | 2 +- doc/draught/paint/struct.Painter.html | 10 +- doc/draught/sidebar-items.js | 2 +- doc/search-index.js | 2 +- doc/src/draught/comp/mod.rs.html | 150 ++++++++++++++---- doc/src/draught/game/mod.rs.html | 38 ++++- doc/src/draught/lib.rs.html | 12 ++ doc/src/draught/paint.rs.html | 42 +++-- index.html | 12 +- 31 files changed, 312 insertions(+), 136 deletions(-) create mode 100644 1f6adaf6c2dc4c9caead.module.wasm delete mode 100644 a9e080695052ab7978e6.module.wasm create mode 100644 doc/draught/macro.log_error!.html create mode 100644 doc/draught/macro.log_error.html delete mode 100644 doc/draught/paint/constant.PIECE_MARGIN.html create mode 100644 doc/draught/paint/constant.PIECE_OUTLINE_PROPORTION.html delete mode 100644 doc/draught/paint/constant.PIECE_OUTLINE_WIDTH.html create mode 100644 doc/draught/paint/constant.PIECE_PROPORTION.html diff --git a/10.bootstrap.js b/10.bootstrap.js index 3a16db9..5ba9a7c 100644 --- a/10.bootstrap.js +++ b/10.bootstrap.js @@ -1,2 +1,2 @@ -(self.webpackChunkdraught=self.webpackChunkdraught||[]).push([[10],{171:(t,e,r)=>{"use strict";r.a(t,(async n=>{r.d(e,{wc:()=>x,SZ:()=>I,i0:()=>S,Tt:()=>E,rh:()=>B,lA:()=>O,Ck:()=>q,ug:()=>C,h4:()=>U,h9:()=>R,Dz:()=>$,kF:()=>D,U5:()=>M,r2:()=>P,iY:()=>z,mS:()=>F,XP:()=>J,yX:()=>Y,ae:()=>Z,Os:()=>L,DA:()=>N,s8:()=>Q,WB:()=>V,cP:()=>H,a:()=>X,l_:()=>K,U_:()=>G,EN:()=>tt,qu:()=>et,Wg:()=>rt,B3:()=>nt,I6:()=>_t,Qb:()=>at,cI:()=>ct,QK:()=>ot,Md:()=>it,ox:()=>st,ES:()=>ut,Ae:()=>lt,UL:()=>pt,qw:()=>dt,tS:()=>bt,R$:()=>gt,md:()=>ht,IF:()=>wt,zP:()=>ft,td:()=>mt,Ct:()=>vt,uQ:()=>yt,RV:()=>kt,sy:()=>xt,m_:()=>Tt,fY:()=>It,Or:()=>St,oH:()=>Et});var _=r(813);t=r.hmd(t);var a=n([_]);_=(a.then?await a:a)[0];const c=new Array(32).fill(void 0);function o(t){return c[t]}c.push(void 0,null,!0,!1);let i=c.length;let s=new("undefined"==typeof TextDecoder?(0,t.require)("util").TextDecoder:TextDecoder)("utf-8",{ignoreBOM:!0,fatal:!0});s.decode();let u=null;function l(){return null!==u&&u.buffer===_.memory.buffer||(u=new Uint8Array(_.memory.buffer)),u}function p(t,e){return s.decode(l().subarray(t,t+e))}function d(t){i===c.length&&c.push(c.length+1);const e=i;return i=c[e],c[e]=t,e}function b(t){const e=typeof t;if("number"==e||"boolean"==e||null==t)return`${t}`;if("string"==e)return`"${t}"`;if("symbol"==e){const e=t.description;return null==e?"Symbol":`Symbol(${e})`}if("function"==e){const e=t.name;return"string"==typeof e&&e.length>0?`Function(${e})`:"Function"}if(Array.isArray(t)){const e=t.length;let r="[";e>0&&(r+=b(t[0]));for(let n=1;n1))return toString.call(t);if(n=r[1],"Object"==n)try{return"Object("+JSON.stringify(t)+")"}catch(t){return"Object"}return t instanceof Error?`${t.name}: ${t.message}\n${t.stack}`:n}let g=0,h=new("undefined"==typeof TextEncoder?(0,t.require)("util").TextEncoder:TextEncoder)("utf-8");const w="function"==typeof h.encodeInto?function(t,e){return h.encodeInto(t,e)}:function(t,e){const r=h.encode(t);return e.set(r),{read:t.length,written:r.length}};function f(t,e,r){if(void 0===r){const r=h.encode(t),n=e(r.length);return l().subarray(n,n+r.length).set(r),g=r.length,n}let n=t.length,_=e(n);const a=l();let c=0;for(;c127)break;a[_+c]=e}if(c!==n){0!==c&&(t=t.slice(c)),_=r(_,n,n=c+3*t.length);const e=l().subarray(_+c,_+n);c+=w(t,e).written}return g=c,_}let m=null;function v(){return null!==m&&m.buffer===_.memory.buffer||(m=new Int32Array(_.memory.buffer)),m}function y(t){return null==t}function k(t,e){if(!(t instanceof e))throw new Error(`expected instance of ${e.name}`);return t.ptr}function x(){_.init_wasm()}function T(t,e){try{return t.apply(this,e)}catch(t){_.__wbindgen_exn_store(d(t))}}Object.freeze({Move:0,0:"Move",Jump:1,1:"Jump"});const I=Object.freeze({Black:0,0:"Black",White:1,1:"White"}),S=(Object.freeze({Man:0,0:"Man",King:1,1:"King"}),Object.freeze({Empty:0,0:"Empty",Occupied:1,1:"Occupied",Unplayable:2,2:"Unplayable"})),E=Object.freeze({Allowed:0,0:"Allowed",UnoccupiedSrc:1,1:"UnoccupiedSrc",OccupiedDest:2,2:"OccupiedDest",OutOfBounds:3,3:"OutOfBounds",Unplayable:4,4:"Unplayable",WrongTeamSrc:5,5:"WrongTeamSrc",IllegalTrajectory:6,6:"IllegalTrajectory",NoJumpablePiece:7,7:"NoJumpablePiece",JumpingSameTeam:8,8:"JumpingSameTeam"});class j{static __wrap(t){const e=Object.create(j.prototype);return e.ptr=t,e}__destroy_into_raw(){const t=this.ptr;return this.ptr=0,t}free(){const t=this.__destroy_into_raw();_.__wbg_board_free(t)}get width(){return _.__wbg_get_board_width(this.ptr)>>>0}set width(t){_.__wbg_set_board_width(this.ptr,t)}get height(){return _.__wbg_get_board_height(this.ptr)>>>0}set height(t){_.__wbg_set_board_height(this.ptr,t)}get current_turn(){return _.__wbg_get_board_current_turn(this.ptr)>>>0}set current_turn(t){_.__wbg_set_board_current_turn(this.ptr,t)}cell(t){var e=_.board_cell(this.ptr,t);return A.__wrap(e)}set_cell(t,e){k(e,A);var r=e.ptr;e.ptr=0,_.board_set_cell(this.ptr,t,r)}grid_cell(t){k(t,B);var e=t.ptr;t.ptr=0;var r=_.board_grid_cell(this.ptr,e);return A.__wrap(r)}cell_index(t,e){return _.board_cell_index(this.ptr,t,e)>>>0}cell_idx(t){k(t,B);var e=t.ptr;return t.ptr=0,_.board_cell_idx(this.ptr,e)>>>0}board_index(t){var e=_.board_board_index(this.ptr,t);return B.__wrap(e)}can_move(t,e){k(t,B);var r=t.ptr;t.ptr=0,k(e,B);var n=e.ptr;return e.ptr=0,_.board_can_move(this.ptr,r,n)>>>0}validate_man_move(t,e,r){k(t,B);var n=t.ptr;t.ptr=0,k(e,B);var a=e.ptr;e.ptr=0,k(r,W);var c=r.ptr;return r.ptr=0,_.board_validate_man_move(this.ptr,n,a,c)>>>0}validate_king_move(t,e,r){k(t,B);var n=t.ptr;t.ptr=0,k(e,B);var a=e.ptr;e.ptr=0,k(r,W);var c=r.ptr;return r.ptr=0,_.board_validate_king_move(this.ptr,n,a,c)>>>0}jumpee_idx(t,e){k(t,B);var r=t.ptr;t.ptr=0,k(e,B);var n=e.ptr;return e.ptr=0,_.board_jumpee_idx(this.ptr,r,n)>>>0}cells(){return _.board_cells(this.ptr)}num_cells(){return _.board_num_cells(this.ptr)>>>0}num_pieces(){return _.board_num_pieces(this.ptr)>>>0}num_player(t){return _.board_num_player(this.ptr,t)>>>0}score(){return _.board_score(this.ptr)}cell_state(t){return _.board_cell_state(this.ptr,t)>>>0}apply_move(t,e){k(t,B);var r=t.ptr;t.ptr=0,k(e,B);var n=e.ptr;e.ptr=0;var a=_.board_apply_move(this.ptr,r,n);return j.__wrap(a)}apply_jump(t,e){k(t,B);var r=t.ptr;t.ptr=0,k(e,B);var n=e.ptr;e.ptr=0;var a=_.board_apply_jump(this.ptr,r,n);return j.__wrap(a)}king_row_idx(){return _.board_king_row_idx(this.ptr)>>>0}static validate_jumpee(t,e){k(t,A);var r=t.ptr;t.ptr=0,k(e,W);var n=e.ptr;return e.ptr=0,_.board_validate_jumpee(r,n)>>>0}static check_jumpee_team(t,e){k(t,W);var r=t.ptr;t.ptr=0,k(e,W);var n=e.ptr;return e.ptr=0,0!==_.board_check_jumpee_team(r,n)}constructor(t,e,r){var n=_.board_new(t,e,r);return j.__wrap(n)}static init_game(t,e){k(t,j);var r=t.ptr;t.ptr=0;var n=_.board_init_game(r,e);return j.__wrap(n)}}class B{static __wrap(t){const e=Object.create(B.prototype);return e.ptr=t,e}__destroy_into_raw(){const t=this.ptr;return this.ptr=0,t}free(){const t=this.__destroy_into_raw();_.__wbg_brdidx_free(t)}get row(){return _.__wbg_get_brdidx_row(this.ptr)>>>0}set row(t){_.__wbg_set_brdidx_row(this.ptr,t)}get col(){return _.__wbg_get_brdidx_col(this.ptr)>>>0}set col(t){_.__wbg_set_brdidx_col(this.ptr,t)}constructor(t,e){var r=_.brdidx_from(t,e);return B.__wrap(r)}eq(t){return k(t,B),0!==_.brdidx_eq(this.ptr,t.ptr)}}class O{static __wrap(t){const e=Object.create(O.prototype);return e.ptr=t,e}__destroy_into_raw(){const t=this.ptr;return this.ptr=0,t}free(){const t=this.__destroy_into_raw();_.__wbg_game_free(t)}get last_node_count(){return _.__wbg_get_game_last_node_count(this.ptr)>>>0}set last_node_count(t){_.__wbg_set_game_last_node_count(this.ptr,t)}current_board_cells(){return _.game_current_board_cells(this.ptr)}current_board_len(){return _.game_current_board_len(this.ptr)>>>0}current_turn(){return _.game_current_turn(this.ptr)>>>0}score(){return _.game_score(this.ptr)}winning(){var t=_.game_winning(this.ptr);return 2===t?void 0:t}has_won(){var t=_.game_has_won(this.ptr);return 2===t?void 0:t}current_cell_state(t){k(t,B);var e=_.game_current_cell_state(this.ptr,t.ptr);return A.__wrap(e)}set_search_depth(t){_.game_set_search_depth(this.ptr,t)}set_selected(t){k(t,B),_.game_set_selected(this.ptr,t.ptr)}clear_selected(){_.game_clear_selected(this.ptr)}make_move(t,e){k(t,B);var r=t.ptr;t.ptr=0,k(e,B);var n=e.ptr;return e.ptr=0,_.game_make_move(this.ptr,r,n)>>>0}execute_move(t,e){k(t,B);var r=t.ptr;t.ptr=0,k(e,B);var n=e.ptr;e.ptr=0,_.game_execute_move(this.ptr,r,n)}execute_jump(t,e){k(t,B);var r=t.ptr;t.ptr=0,k(e,B);var n=e.ptr;e.ptr=0,_.game_execute_jump(this.ptr,r,n)}push_new_board(t){k(t,j);var e=t.ptr;t.ptr=0,_.game_push_new_board(this.ptr,e)}set_current(t){k(t,j);var e=t.ptr;t.ptr=0,_.game_set_current(this.ptr,e)}constructor(t,e,r,n,a){var c=_.game_new(t,e,r,n,a);return O.__wrap(c)}static new_with_canvas(t,e,r,n,a,c,o,i){var s=f(c,_.__wbindgen_malloc,_.__wbindgen_realloc),u=g,l=_.game_new_with_canvas(t,e,r,n,a,s,u,o,i);return O.__wrap(l)}set_painter(t){k(t,q);var e=t.ptr;t.ptr=0,_.game_set_painter(this.ptr,e)}draw(){_.game_draw(this.ptr)}ai_move(){_.game_ai_move(this.ptr)}}class q{static __wrap(t){const e=Object.create(q.prototype);return e.ptr=t,e}__destroy_into_raw(){const t=this.ptr;return this.ptr=0,t}free(){const t=this.__destroy_into_raw();_.__wbg_painter_free(t)}constructor(t,e,r){var n=f(r,_.__wbindgen_malloc,_.__wbindgen_realloc),a=g,c=_.painter_new(t,e,n,a);return q.__wrap(c)}static new_with_canvas(t,e,r){var n=_.painter_new_with_canvas(t,e,d(r));return q.__wrap(n)}set_square_outline(t){_.painter_set_square_outline(this.ptr,d(t))}set_outline_width(t){_.painter_set_outline_width(this.ptr,t)}set_draw_outline(t){_.painter_set_draw_outline(this.ptr,t)}reset_dimensions(){_.painter_reset_dimensions(this.ptr)}validate_board_dim(t){return k(t,j),0!==_.painter_validate_board_dim(this.ptr,t.ptr)}draw(t){k(t,j),_.painter_draw(this.ptr,t.ptr)}}class W{static __wrap(t){const e=Object.create(W.prototype);return e.ptr=t,e}__destroy_into_raw(){const t=this.ptr;return this.ptr=0,t}free(){const t=this.__destroy_into_raw();_.__wbg_piece_free(t)}get team(){return _.__wbg_get_piece_team(this.ptr)>>>0}set team(t){_.__wbg_set_piece_team(this.ptr,t)}get strength(){return _.__wbg_get_piece_strength(this.ptr)>>>0}set strength(t){_.__wbg_set_piece_strength(this.ptr,t)}constructor(t,e){var r=_.piece_new(t,e);return W.__wrap(r)}}class A{static __wrap(t){const e=Object.create(A.prototype);return e.ptr=t,e}__destroy_into_raw(){const t=this.ptr;return this.ptr=0,t}free(){const t=this.__destroy_into_raw();_.__wbg_square_free(t)}get occupant(){var t=_.__wbg_get_square_occupant(this.ptr);return 0===t?void 0:W.__wrap(t)}set occupant(t){let e=0;y(t)||(k(t,W),e=t.ptr,t.ptr=0),_.__wbg_set_square_occupant(this.ptr,e)}get state(){return _.__wbg_get_square_state(this.ptr)>>>0}set state(t){_.__wbg_set_square_state(this.ptr,t)}constructor(t,e){let r=0;y(e)||(k(e,W),r=e.ptr,e.ptr=0);var n=_.square_new(t,r);return A.__wrap(n)}static pc(t,e){var r=_.square_pc(t,e);return A.__wrap(r)}static empty(){var t=_.square_empty();return A.__wrap(t)}static unplay(){var t=_.square_unplay();return A.__wrap(t)}}function C(t){!function(t){const e=o(t);(function(t){t<36||(c[t]=i,i=t)})(t)}(t)}function U(t,e){return d(p(t,e))}function R(){return d(new Error)}function $(t,e){var r=f(o(e).stack,_.__wbindgen_malloc,_.__wbindgen_realloc),n=g;v()[t/4+1]=n,v()[t/4+0]=r}function D(t,e){try{console.error(p(t,e))}finally{_.__wbindgen_free(t,e)}}function M(){return T((function(){return d(self.self)}),arguments)}function P(t,e,r){return d(o(t).require(p(e,r)))}function z(t){return d(o(t).crypto)}function F(t){return d(o(t).msCrypto)}function J(t){return void 0===o(t)}function Y(t){return d(o(t).getRandomValues)}function Z(t,e){o(t).getRandomValues(o(e))}function L(t,e,r){var n,_;o(t).randomFillSync((n=e,_=r,l().subarray(n/1,n/1+_)))}function N(){return d(t)}function Q(t){return o(t)instanceof Window}function V(t){var e=o(t).document;return y(e)?0:d(e)}function H(t,e,r){var n=o(t).getElementById(p(e,r));return y(n)?0:d(n)}function X(t){console.log(o(t))}function K(t){return o(t)instanceof CanvasRenderingContext2D}function G(t,e){o(t).strokeStyle=o(e)}function tt(t,e){o(t).fillStyle=o(e)}function et(t,e){o(t).lineWidth=e}function rt(t){o(t).beginPath()}function nt(t){o(t).fill()}function _t(t){o(t).stroke()}function at(){return T((function(t,e,r,n,_,a){o(t).arc(e,r,n,_,a)}),arguments)}function ct(t,e,r,n,_){o(t).fillRect(e,r,n,_)}function ot(t,e,r,n,_){o(t).strokeRect(e,r,n,_)}function it(t){return o(t)instanceof HTMLCanvasElement}function st(t,e){o(t).width=e>>>0}function ut(t,e){o(t).height=e>>>0}function lt(){return T((function(t,e,r){var n=o(t).getContext(p(e,r));return y(n)?0:d(n)}),arguments)}function pt(t,e){return d(new Function(p(t,e)))}function dt(){return T((function(t,e){return d(o(t).call(o(e)))}),arguments)}function bt(){return T((function(){return d(self.self)}),arguments)}function gt(){return T((function(){return d(window.window)}),arguments)}function ht(){return T((function(){return d(globalThis.globalThis)}),arguments)}function wt(){return T((function(){return d(r.g.global)}),arguments)}function ft(t){return d(o(t).buffer)}function mt(t){return d(new Uint8Array(o(t)))}function vt(t,e,r){o(t).set(o(e),r>>>0)}function yt(t){return o(t).length}function kt(t){return d(new Uint8Array(t>>>0))}function xt(t,e,r){return d(o(t).subarray(e>>>0,r>>>0))}function Tt(t){return d(o(t))}function It(t,e){var r=f(b(o(e)),_.__wbindgen_malloc,_.__wbindgen_realloc),n=g;v()[t/4+1]=n,v()[t/4+0]=r}function St(t,e){throw new Error(p(t,e))}function Et(){return d(_.memory)}}))},813:(t,e,r)=>{"use strict";var n=([n])=>r.v(e,t.id,"a9e080695052ab7978e6",{"./draught_bg.js":{__wbindgen_object_drop_ref:n.ug,__wbindgen_string_new:n.h4,__wbg_new_59cb74e423758ede:n.h9,__wbg_stack_558ba5917b466edd:n.Dz,__wbg_error_4bb6c2a97407129a:n.kF,__wbg_self_86b4b13392c7af56:n.U5,__wbg_require_f5521a5b85ad2542:n.r2,__wbg_crypto_b8c92eaac23d0d80:n.iY,__wbg_msCrypto_9ad6677321a08dd8:n.mS,__wbindgen_is_undefined:n.XP,__wbg_getRandomValues_dd27e6b0652b3236:n.yX,__wbg_getRandomValues_e57c9b75ddead065:n.ae,__wbg_randomFillSync_d2ba53160aec6aba:n.Os,__wbg_static_accessor_MODULE_452b4680e8614c81:n.DA,__wbg_instanceof_Window_11e25482011fc506:n.s8,__wbg_document_5aff8cd83ef968f5:n.WB,__wbg_getElementById_b180ea4ada06a837:n.cP,__wbg_log_9a99fb1af846153b:n.a,__wbg_instanceof_CanvasRenderingContext2d_779e79c4121aa91b:n.l_,__wbg_setstrokeStyle_2939ee453716e462:n.U_,__wbg_setfillStyle_af790b5baf4d3210:n.EN,__wbg_setlineWidth_3e6b1837ae38d099:n.qu,__wbg_beginPath_2378575e37027ad3:n.Wg,__wbg_fill_558339447ed6ad43:n.B3,__wbg_stroke_c1e0313c58997dcf:n.I6,__wbg_arc_fffd87d9113dce32:n.Qb,__wbg_fillRect_46ffc8d2cef7e298:n.cI,__wbg_strokeRect_7ea34fad8a7f0fe2:n.QK,__wbg_instanceof_HtmlCanvasElement_fd3cbbe3906d7792:n.Md,__wbg_setwidth_f3c88eb520ba8d47:n.ox,__wbg_setheight_5a1abba41e35c42a:n.ES,__wbg_getContext_813df131fcbd6e91:n.Ae,__wbg_newnoargs_9fdd8f3961dd1bee:n.UL,__wbg_call_ba36642bd901572b:n.qw,__wbg_self_bb69a836a72ec6e9:n.tS,__wbg_window_3304fc4b414c9693:n.R$,__wbg_globalThis_e0d21cabc6630763:n.md,__wbg_global_8463719227271676:n.IF,__wbg_buffer_9e184d6f785de5ed:n.zP,__wbg_new_e8101319e4cf95fc:n.td,__wbg_set_e8ae7b27314e8b98:n.Ct,__wbg_length_2d56cb37075fcfb1:n.uQ,__wbg_newwithlength_a8d1dbcbe703a5c6:n.RV,__wbg_subarray_901ede8318da52a6:n.sy,__wbindgen_object_clone_ref:n.m_,__wbindgen_debug_string:n.fY,__wbindgen_throw:n.Or,__wbindgen_memory:n.oH}});r.a(t,(t=>{var e=t([r(171)]);return e.then?e.then(n):n(e)}),1)},10:(t,e,r)=>{"use strict";r.a(t,(async t=>{r.r(e);var n=r(171),_=t([n]);n=(_.then?await _:_)[0];var a=8,c=8,o=3,i=4;const s="human_turn.thinking",u="human_turn.from_selected";(0,n.wc)(),document.getElementById("status-p");const l=document.getElementById("status-d"),p=document.getElementById("team-p"),d=document.getElementById("node-count"),b=document.getElementById("winning-p");document.getElementById("startBtn").onclick=x;let g=null,h=null,w=function(t,e="danger",r=!0){null!=h&&clearInterval(h),l.className=`alert alert-${e}`,l.innerText=t,l.hidden=!1,r&&(h=setTimeout((()=>{l.hidden=!0}),3e3))},f=s,m=null,v=null,y=[];x();const k=document.getElementById("game-canvas");function x(){m=new n.lA(a,c,o,n.SZ.Black,i),v=new n.Ck(720,720,"game-canvas"),m.set_painter(v),m.draw(),clearInterval(g),T(),I(),y=[],f=s}function T(){switch(m.current_turn()){case n.SZ.White:p.innerText="⚪ White ⚪";break;case n.SZ.Black:p.innerText="🔴 Black 🔴"}}function I(){switch(m.winning()){case void 0:b.innerText="";break;case n.SZ.White:b.innerText="👑 White 👑";break;case n.SZ.Black:b.innerText="👑 Black 👑"}}k.addEventListener("click",(t=>{var e=function(t,e){var r=t.getBoundingClientRect();return{x:e.clientX-r.left,y:e.clientY-r.top}}(k,t);!function(t){switch(f){case s:if(m.current_cell_state(t).state!=n.i0.Occupied)return;if(m.current_cell_state(t).occupant.team!=m.current_turn())return;y.push(t),f=u,m.set_selected(t),m.draw();break;case u:if(!y[0].eq(t)){if(m.current_cell_state(t).state!=n.i0.Empty)return;if(y.push(t),2!=y.length)return w(`Error: wrong number of clicks to process ${y.length}`),void console.error(`Error: wrong number of clicks to process ${y.length}`);switch(m.make_move(y[0],y[1])){case n.Tt.Allowed:O.checked&&(m.ai_move(),d.innerText=`searched ${m.last_node_count.toLocaleString("en-GB")} possible moves`);break;case n.Tt.IllegalTrajectory:w("You can't move like that!");break;case n.Tt.JumpingSameTeam:w("You can't jump your own piece!");break;case n.Tt.NoJumpablePiece:w("There's nothing to jump!");break;case n.Tt.OccupiedDest:w("There's a piece there!");break;case n.Tt.OutOfBounds:w("That square's not on the board! (how have you managed that?)");break;case n.Tt.UnoccupiedSrc:w("There's no piece to move!");break;case n.Tt.Unplayable:w("That's not a playable square!");break;case n.Tt.WrongTeamSrc:w("That's not your piece!")}}m.clear_selected(),m.draw(),y=[],f=s;break;case"ai_turn":console.log("It's the AI's turn!")}T(),I(),function(){switch(m.has_won()){case void 0:break;case n.SZ.White:w("You Lost!"),g=setInterval((()=>{x()}),3e3);break;case n.SZ.Black:w("You Won!","success"),g=setInterval((()=>{x()}),3e3)}}()}(new n.rh(Math.floor(e.y/k.clientHeight*c),Math.floor(e.x/k.clientWidth*a)))}));const S=document.getElementById("width");S.onchange=()=>{a=parseInt(S.value),x()},S.value=8;const E=document.getElementById("height");E.onchange=()=>{c=parseInt(E.value),j.max=c/2-1,x()},E.value=8;const j=document.getElementById("play_rows");j.onchange=()=>{o=parseInt(j.value),x()},j.value=3;const B=document.getElementById("ai_search_depth");B.onchange=()=>{i=parseInt(B.value),m.set_search_depth(i),i>4&&w("This increases thinking time exponentially, be careful (probably don't go past 6)","warning")},B.value=4;const O=document.getElementById("ai-checkbox");O.onchange=()=>{}}))}}]); +(self.webpackChunkdraught=self.webpackChunkdraught||[]).push([[10],{171:(t,e,r)=>{"use strict";r.a(t,(async n=>{r.d(e,{wc:()=>x,SZ:()=>I,i0:()=>E,Tt:()=>S,rh:()=>j,lA:()=>O,Ck:()=>q,ug:()=>C,h4:()=>U,h9:()=>R,Dz:()=>$,kF:()=>D,U5:()=>M,r2:()=>P,iY:()=>z,mS:()=>F,XP:()=>J,yX:()=>Y,ae:()=>Z,Os:()=>L,DA:()=>N,s8:()=>Q,WB:()=>V,cP:()=>H,ck:()=>X,a:()=>K,l_:()=>G,U_:()=>tt,EN:()=>et,qu:()=>rt,Wg:()=>nt,B3:()=>_t,I6:()=>at,Qb:()=>ct,cI:()=>ot,QK:()=>it,Md:()=>st,ox:()=>ut,ES:()=>lt,Ae:()=>pt,UL:()=>dt,qw:()=>gt,tS:()=>bt,R$:()=>ht,md:()=>ft,IF:()=>wt,zP:()=>mt,td:()=>vt,Ct:()=>yt,uQ:()=>kt,RV:()=>xt,sy:()=>Tt,m_:()=>It,fY:()=>Et,Or:()=>St,oH:()=>Bt});var _=r(813);t=r.hmd(t);var a=n([_]);_=(a.then?await a:a)[0];const c=new Array(32).fill(void 0);function o(t){return c[t]}c.push(void 0,null,!0,!1);let i=c.length;let s=new("undefined"==typeof TextDecoder?(0,t.require)("util").TextDecoder:TextDecoder)("utf-8",{ignoreBOM:!0,fatal:!0});s.decode();let u=null;function l(){return null!==u&&u.buffer===_.memory.buffer||(u=new Uint8Array(_.memory.buffer)),u}function p(t,e){return s.decode(l().subarray(t,t+e))}function d(t){i===c.length&&c.push(c.length+1);const e=i;return i=c[e],c[e]=t,e}function g(t){const e=typeof t;if("number"==e||"boolean"==e||null==t)return`${t}`;if("string"==e)return`"${t}"`;if("symbol"==e){const e=t.description;return null==e?"Symbol":`Symbol(${e})`}if("function"==e){const e=t.name;return"string"==typeof e&&e.length>0?`Function(${e})`:"Function"}if(Array.isArray(t)){const e=t.length;let r="[";e>0&&(r+=g(t[0]));for(let n=1;n1))return toString.call(t);if(n=r[1],"Object"==n)try{return"Object("+JSON.stringify(t)+")"}catch(t){return"Object"}return t instanceof Error?`${t.name}: ${t.message}\n${t.stack}`:n}let b=0,h=new("undefined"==typeof TextEncoder?(0,t.require)("util").TextEncoder:TextEncoder)("utf-8");const f="function"==typeof h.encodeInto?function(t,e){return h.encodeInto(t,e)}:function(t,e){const r=h.encode(t);return e.set(r),{read:t.length,written:r.length}};function w(t,e,r){if(void 0===r){const r=h.encode(t),n=e(r.length);return l().subarray(n,n+r.length).set(r),b=r.length,n}let n=t.length,_=e(n);const a=l();let c=0;for(;c127)break;a[_+c]=e}if(c!==n){0!==c&&(t=t.slice(c)),_=r(_,n,n=c+3*t.length);const e=l().subarray(_+c,_+n);c+=f(t,e).written}return b=c,_}let m=null;function v(){return null!==m&&m.buffer===_.memory.buffer||(m=new Int32Array(_.memory.buffer)),m}function y(t){return null==t}function k(t,e){if(!(t instanceof e))throw new Error(`expected instance of ${e.name}`);return t.ptr}function x(){_.init_wasm()}function T(t,e){try{return t.apply(this,e)}catch(t){_.__wbindgen_exn_store(d(t))}}Object.freeze({Move:0,0:"Move",Jump:1,1:"Jump"});const I=Object.freeze({Black:0,0:"Black",White:1,1:"White"}),E=(Object.freeze({Man:0,0:"Man",King:1,1:"King"}),Object.freeze({Empty:0,0:"Empty",Occupied:1,1:"Occupied",Unplayable:2,2:"Unplayable"})),S=Object.freeze({Allowed:0,0:"Allowed",UnoccupiedSrc:1,1:"UnoccupiedSrc",OccupiedDest:2,2:"OccupiedDest",OutOfBounds:3,3:"OutOfBounds",Unplayable:4,4:"Unplayable",WrongTeamSrc:5,5:"WrongTeamSrc",IllegalTrajectory:6,6:"IllegalTrajectory",NoJumpablePiece:7,7:"NoJumpablePiece",JumpingSameTeam:8,8:"JumpingSameTeam"});class B{static __wrap(t){const e=Object.create(B.prototype);return e.ptr=t,e}__destroy_into_raw(){const t=this.ptr;return this.ptr=0,t}free(){const t=this.__destroy_into_raw();_.__wbg_board_free(t)}get width(){return _.__wbg_get_board_width(this.ptr)>>>0}set width(t){_.__wbg_set_board_width(this.ptr,t)}get height(){return _.__wbg_get_board_height(this.ptr)>>>0}set height(t){_.__wbg_set_board_height(this.ptr,t)}get current_turn(){return _.__wbg_get_board_current_turn(this.ptr)>>>0}set current_turn(t){_.__wbg_set_board_current_turn(this.ptr,t)}cell(t){var e=_.board_cell(this.ptr,t);return A.__wrap(e)}set_cell(t,e){k(e,A);var r=e.ptr;e.ptr=0,_.board_set_cell(this.ptr,t,r)}grid_cell(t){k(t,j);var e=t.ptr;t.ptr=0;var r=_.board_grid_cell(this.ptr,e);return A.__wrap(r)}cell_index(t,e){return _.board_cell_index(this.ptr,t,e)>>>0}cell_idx(t){k(t,j);var e=t.ptr;return t.ptr=0,_.board_cell_idx(this.ptr,e)>>>0}board_index(t){var e=_.board_board_index(this.ptr,t);return j.__wrap(e)}can_move(t,e){k(t,j);var r=t.ptr;t.ptr=0,k(e,j);var n=e.ptr;return e.ptr=0,_.board_can_move(this.ptr,r,n)>>>0}validate_man_move(t,e,r){k(t,j);var n=t.ptr;t.ptr=0,k(e,j);var a=e.ptr;e.ptr=0,k(r,W);var c=r.ptr;return r.ptr=0,_.board_validate_man_move(this.ptr,n,a,c)>>>0}validate_king_move(t,e,r){k(t,j);var n=t.ptr;t.ptr=0,k(e,j);var a=e.ptr;e.ptr=0,k(r,W);var c=r.ptr;return r.ptr=0,_.board_validate_king_move(this.ptr,n,a,c)>>>0}jumpee_idx(t,e){k(t,j);var r=t.ptr;t.ptr=0,k(e,j);var n=e.ptr;return e.ptr=0,_.board_jumpee_idx(this.ptr,r,n)>>>0}cells(){return _.board_cells(this.ptr)}num_cells(){return _.board_num_cells(this.ptr)>>>0}num_pieces(){return _.board_num_pieces(this.ptr)>>>0}num_player(t){return _.board_num_player(this.ptr,t)>>>0}score(){return _.board_score(this.ptr)}cell_state(t){return _.board_cell_state(this.ptr,t)>>>0}apply_move(t,e){k(t,j);var r=t.ptr;t.ptr=0,k(e,j);var n=e.ptr;e.ptr=0;var a=_.board_apply_move(this.ptr,r,n);return B.__wrap(a)}apply_jump(t,e){k(t,j);var r=t.ptr;t.ptr=0,k(e,j);var n=e.ptr;e.ptr=0;var a=_.board_apply_jump(this.ptr,r,n);return B.__wrap(a)}king_row_idx(){return _.board_king_row_idx(this.ptr)>>>0}static validate_jumpee(t,e){k(t,A);var r=t.ptr;t.ptr=0,k(e,W);var n=e.ptr;return e.ptr=0,_.board_validate_jumpee(r,n)>>>0}static check_jumpee_team(t,e){k(t,W);var r=t.ptr;t.ptr=0,k(e,W);var n=e.ptr;return e.ptr=0,0!==_.board_check_jumpee_team(r,n)}constructor(t,e,r){var n=_.board_new(t,e,r);return B.__wrap(n)}static init_game(t,e){k(t,B);var r=t.ptr;t.ptr=0;var n=_.board_init_game(r,e);return B.__wrap(n)}}class j{static __wrap(t){const e=Object.create(j.prototype);return e.ptr=t,e}__destroy_into_raw(){const t=this.ptr;return this.ptr=0,t}free(){const t=this.__destroy_into_raw();_.__wbg_brdidx_free(t)}get row(){return _.__wbg_get_brdidx_row(this.ptr)>>>0}set row(t){_.__wbg_set_brdidx_row(this.ptr,t)}get col(){return _.__wbg_get_brdidx_col(this.ptr)>>>0}set col(t){_.__wbg_set_brdidx_col(this.ptr,t)}constructor(t,e){var r=_.brdidx_from(t,e);return j.__wrap(r)}eq(t){return k(t,j),0!==_.brdidx_eq(this.ptr,t.ptr)}}class O{static __wrap(t){const e=Object.create(O.prototype);return e.ptr=t,e}__destroy_into_raw(){const t=this.ptr;return this.ptr=0,t}free(){const t=this.__destroy_into_raw();_.__wbg_game_free(t)}get last_node_count(){return _.__wbg_get_game_last_node_count(this.ptr)>>>0}set last_node_count(t){_.__wbg_set_game_last_node_count(this.ptr,t)}get perfect_chance(){return _.__wbg_get_game_perfect_chance(this.ptr)}set perfect_chance(t){_.__wbg_set_game_perfect_chance(this.ptr,t)}current_board_cells(){return _.game_current_board_cells(this.ptr)}current_board_len(){return _.game_current_board_len(this.ptr)>>>0}current_turn(){return _.game_current_turn(this.ptr)>>>0}score(){return _.game_score(this.ptr)}winning(){var t=_.game_winning(this.ptr);return 2===t?void 0:t}has_won(){var t=_.game_has_won(this.ptr);return 2===t?void 0:t}current_cell_state(t){k(t,j);var e=_.game_current_cell_state(this.ptr,t.ptr);return A.__wrap(e)}set_search_depth(t){_.game_set_search_depth(this.ptr,t)}set_selected(t){k(t,j),_.game_set_selected(this.ptr,t.ptr)}set_perfect_chance(t){_.game_set_perfect_chance(this.ptr,t)}clear_selected(){_.game_clear_selected(this.ptr)}make_move(t,e){k(t,j);var r=t.ptr;t.ptr=0,k(e,j);var n=e.ptr;return e.ptr=0,_.game_make_move(this.ptr,r,n)>>>0}execute_move(t,e){k(t,j);var r=t.ptr;t.ptr=0,k(e,j);var n=e.ptr;e.ptr=0,_.game_execute_move(this.ptr,r,n)}execute_jump(t,e){k(t,j);var r=t.ptr;t.ptr=0,k(e,j);var n=e.ptr;e.ptr=0,_.game_execute_jump(this.ptr,r,n)}push_new_board(t){k(t,B);var e=t.ptr;t.ptr=0,_.game_push_new_board(this.ptr,e)}set_current(t){k(t,B);var e=t.ptr;t.ptr=0,_.game_set_current(this.ptr,e)}constructor(t,e,r,n,a){var c=_.game_new(t,e,r,n,a);return O.__wrap(c)}static new_with_canvas(t,e,r,n,a,c,o,i){var s=w(c,_.__wbindgen_malloc,_.__wbindgen_realloc),u=b,l=_.game_new_with_canvas(t,e,r,n,a,s,u,o,i);return O.__wrap(l)}set_painter(t){k(t,q);var e=t.ptr;t.ptr=0,_.game_set_painter(this.ptr,e)}draw(){_.game_draw(this.ptr)}ai_move(){_.game_ai_move(this.ptr)}}class q{static __wrap(t){const e=Object.create(q.prototype);return e.ptr=t,e}__destroy_into_raw(){const t=this.ptr;return this.ptr=0,t}free(){const t=this.__destroy_into_raw();_.__wbg_painter_free(t)}constructor(t,e,r){var n=w(r,_.__wbindgen_malloc,_.__wbindgen_realloc),a=b,c=_.painter_new(t,e,n,a);return q.__wrap(c)}static new_with_canvas(t,e,r){var n=_.painter_new_with_canvas(t,e,d(r));return q.__wrap(n)}set_square_outline(t){_.painter_set_square_outline(this.ptr,d(t))}set_outline_width(t){_.painter_set_outline_width(this.ptr,t)}set_draw_outline(t){_.painter_set_draw_outline(this.ptr,t)}reset_dimensions(){_.painter_reset_dimensions(this.ptr)}validate_board_dim(t){return k(t,B),0!==_.painter_validate_board_dim(this.ptr,t.ptr)}draw(t){k(t,B),_.painter_draw(this.ptr,t.ptr)}}class W{static __wrap(t){const e=Object.create(W.prototype);return e.ptr=t,e}__destroy_into_raw(){const t=this.ptr;return this.ptr=0,t}free(){const t=this.__destroy_into_raw();_.__wbg_piece_free(t)}get team(){return _.__wbg_get_piece_team(this.ptr)>>>0}set team(t){_.__wbg_set_piece_team(this.ptr,t)}get strength(){return _.__wbg_get_piece_strength(this.ptr)>>>0}set strength(t){_.__wbg_set_piece_strength(this.ptr,t)}constructor(t,e){var r=_.piece_new(t,e);return W.__wrap(r)}}class A{static __wrap(t){const e=Object.create(A.prototype);return e.ptr=t,e}__destroy_into_raw(){const t=this.ptr;return this.ptr=0,t}free(){const t=this.__destroy_into_raw();_.__wbg_square_free(t)}get occupant(){var t=_.__wbg_get_square_occupant(this.ptr);return 0===t?void 0:W.__wrap(t)}set occupant(t){let e=0;y(t)||(k(t,W),e=t.ptr,t.ptr=0),_.__wbg_set_square_occupant(this.ptr,e)}get state(){return _.__wbg_get_square_state(this.ptr)>>>0}set state(t){_.__wbg_set_square_state(this.ptr,t)}constructor(t,e){let r=0;y(e)||(k(e,W),r=e.ptr,e.ptr=0);var n=_.square_new(t,r);return A.__wrap(n)}static pc(t,e){var r=_.square_pc(t,e);return A.__wrap(r)}static empty(){var t=_.square_empty();return A.__wrap(t)}static unplay(){var t=_.square_unplay();return A.__wrap(t)}}function C(t){!function(t){const e=o(t);(function(t){t<36||(c[t]=i,i=t)})(t)}(t)}function U(t,e){return d(p(t,e))}function R(){return d(new Error)}function $(t,e){var r=w(o(e).stack,_.__wbindgen_malloc,_.__wbindgen_realloc),n=b;v()[t/4+1]=n,v()[t/4+0]=r}function D(t,e){try{console.error(p(t,e))}finally{_.__wbindgen_free(t,e)}}function M(){return T((function(){return d(self.self)}),arguments)}function P(t,e,r){return d(o(t).require(p(e,r)))}function z(t){return d(o(t).crypto)}function F(t){return d(o(t).msCrypto)}function J(t){return void 0===o(t)}function Y(t){return d(o(t).getRandomValues)}function Z(t,e){o(t).getRandomValues(o(e))}function L(t,e,r){var n,_;o(t).randomFillSync((n=e,_=r,l().subarray(n/1,n/1+_)))}function N(){return d(t)}function Q(t){return o(t)instanceof Window}function V(t){var e=o(t).document;return y(e)?0:d(e)}function H(t,e,r){var n=o(t).getElementById(p(e,r));return y(n)?0:d(n)}function X(t){console.error(o(t))}function K(t){console.log(o(t))}function G(t){return o(t)instanceof CanvasRenderingContext2D}function tt(t,e){o(t).strokeStyle=o(e)}function et(t,e){o(t).fillStyle=o(e)}function rt(t,e){o(t).lineWidth=e}function nt(t){o(t).beginPath()}function _t(t){o(t).fill()}function at(t){o(t).stroke()}function ct(){return T((function(t,e,r,n,_,a){o(t).arc(e,r,n,_,a)}),arguments)}function ot(t,e,r,n,_){o(t).fillRect(e,r,n,_)}function it(t,e,r,n,_){o(t).strokeRect(e,r,n,_)}function st(t){return o(t)instanceof HTMLCanvasElement}function ut(t,e){o(t).width=e>>>0}function lt(t,e){o(t).height=e>>>0}function pt(){return T((function(t,e,r){var n=o(t).getContext(p(e,r));return y(n)?0:d(n)}),arguments)}function dt(t,e){return d(new Function(p(t,e)))}function gt(){return T((function(t,e){return d(o(t).call(o(e)))}),arguments)}function bt(){return T((function(){return d(self.self)}),arguments)}function ht(){return T((function(){return d(window.window)}),arguments)}function ft(){return T((function(){return d(globalThis.globalThis)}),arguments)}function wt(){return T((function(){return d(r.g.global)}),arguments)}function mt(t){return d(o(t).buffer)}function vt(t){return d(new Uint8Array(o(t)))}function yt(t,e,r){o(t).set(o(e),r>>>0)}function kt(t){return o(t).length}function xt(t){return d(new Uint8Array(t>>>0))}function Tt(t,e,r){return d(o(t).subarray(e>>>0,r>>>0))}function It(t){return d(o(t))}function Et(t,e){var r=w(g(o(e)),_.__wbindgen_malloc,_.__wbindgen_realloc),n=b;v()[t/4+1]=n,v()[t/4+0]=r}function St(t,e){throw new Error(p(t,e))}function Bt(){return d(_.memory)}}))},813:(t,e,r)=>{"use strict";var n=([n])=>r.v(e,t.id,"1f6adaf6c2dc4c9caead",{"./draught_bg.js":{__wbindgen_object_drop_ref:n.ug,__wbindgen_string_new:n.h4,__wbg_new_59cb74e423758ede:n.h9,__wbg_stack_558ba5917b466edd:n.Dz,__wbg_error_4bb6c2a97407129a:n.kF,__wbg_self_86b4b13392c7af56:n.U5,__wbg_require_f5521a5b85ad2542:n.r2,__wbg_crypto_b8c92eaac23d0d80:n.iY,__wbg_msCrypto_9ad6677321a08dd8:n.mS,__wbindgen_is_undefined:n.XP,__wbg_getRandomValues_dd27e6b0652b3236:n.yX,__wbg_getRandomValues_e57c9b75ddead065:n.ae,__wbg_randomFillSync_d2ba53160aec6aba:n.Os,__wbg_static_accessor_MODULE_452b4680e8614c81:n.DA,__wbg_instanceof_Window_11e25482011fc506:n.s8,__wbg_document_5aff8cd83ef968f5:n.WB,__wbg_getElementById_b180ea4ada06a837:n.cP,__wbg_error_d95afd6217cfd219:n.ck,__wbg_log_9a99fb1af846153b:n.a,__wbg_instanceof_CanvasRenderingContext2d_779e79c4121aa91b:n.l_,__wbg_setstrokeStyle_2939ee453716e462:n.U_,__wbg_setfillStyle_af790b5baf4d3210:n.EN,__wbg_setlineWidth_3e6b1837ae38d099:n.qu,__wbg_beginPath_2378575e37027ad3:n.Wg,__wbg_fill_558339447ed6ad43:n.B3,__wbg_stroke_c1e0313c58997dcf:n.I6,__wbg_arc_fffd87d9113dce32:n.Qb,__wbg_fillRect_46ffc8d2cef7e298:n.cI,__wbg_strokeRect_7ea34fad8a7f0fe2:n.QK,__wbg_instanceof_HtmlCanvasElement_fd3cbbe3906d7792:n.Md,__wbg_setwidth_f3c88eb520ba8d47:n.ox,__wbg_setheight_5a1abba41e35c42a:n.ES,__wbg_getContext_813df131fcbd6e91:n.Ae,__wbg_newnoargs_9fdd8f3961dd1bee:n.UL,__wbg_call_ba36642bd901572b:n.qw,__wbg_self_bb69a836a72ec6e9:n.tS,__wbg_window_3304fc4b414c9693:n.R$,__wbg_globalThis_e0d21cabc6630763:n.md,__wbg_global_8463719227271676:n.IF,__wbg_buffer_9e184d6f785de5ed:n.zP,__wbg_new_e8101319e4cf95fc:n.td,__wbg_set_e8ae7b27314e8b98:n.Ct,__wbg_length_2d56cb37075fcfb1:n.uQ,__wbg_newwithlength_a8d1dbcbe703a5c6:n.RV,__wbg_subarray_901ede8318da52a6:n.sy,__wbindgen_object_clone_ref:n.m_,__wbindgen_debug_string:n.fY,__wbindgen_throw:n.Or,__wbindgen_memory:n.oH}});r.a(t,(t=>{var e=t([r(171)]);return e.then?e.then(n):n(e)}),1)},10:(t,e,r)=>{"use strict";r.a(t,(async t=>{r.r(e);var n=r(171),_=t([n]);n=(_.then?await _:_)[0];var a=8,c=8,o=3,i=4,s=.5;const u="human_turn.thinking",l="human_turn.from_selected";(0,n.wc)(),document.getElementById("status-p");const p=document.getElementById("status-d"),d=document.getElementById("team-p"),g=document.getElementById("node-count"),b=document.getElementById("winning-p");document.getElementById("startBtn").onclick=T;let h=null,f=null,w=function(t,e="danger",r=!0){null!=f&&clearInterval(f),p.className=`alert alert-${e}`,p.innerText=t,p.hidden=!1,r&&(f=setTimeout((()=>{p.hidden=!0}),3e3))},m=u,v=null,y=null,k=[];T();const x=document.getElementById("game-canvas");function T(){v=new n.lA(a,c,o,n.SZ.Black,i),y=new n.Ck(720,720,"game-canvas"),v.set_painter(y),v.draw(),clearInterval(h),I(),E(),k=[],m=u}function I(){switch(v.current_turn()){case n.SZ.White:d.innerText="⚪ White ⚪";break;case n.SZ.Black:d.innerText="🔴 Black 🔴"}}function E(){switch(v.winning()){case void 0:b.innerText="";break;case n.SZ.White:b.innerText="👑 White 👑";break;case n.SZ.Black:b.innerText="👑 Black 👑"}}x.addEventListener("click",(t=>{var e=function(t,e){var r=t.getBoundingClientRect();return{x:e.clientX-r.left,y:e.clientY-r.top}}(x,t);!function(t){switch(m){case u:if(v.current_cell_state(t).state!=n.i0.Occupied)return;if(v.current_cell_state(t).occupant.team!=v.current_turn())return;k.push(t),m=l,v.set_selected(t),v.draw();break;case l:if(!k[0].eq(t)){if(v.current_cell_state(t).state!=n.i0.Empty)return;if(k.push(t),2!=k.length)return w(`Error: wrong number of clicks to process ${k.length}`),void console.error(`Error: wrong number of clicks to process ${k.length}`);switch(v.make_move(k[0],k[1])){case n.Tt.Allowed:q.checked&&void 0===v.has_won()&&(v.ai_move(),g.innerText=`searched ${v.last_node_count.toLocaleString("en-GB")} possible moves`);break;case n.Tt.IllegalTrajectory:w("You can't move like that!");break;case n.Tt.JumpingSameTeam:w("You can't jump your own piece!");break;case n.Tt.NoJumpablePiece:w("There's nothing to jump!");break;case n.Tt.OccupiedDest:w("There's a piece there!");break;case n.Tt.OutOfBounds:w("That square's not on the board! (how have you managed that?)");break;case n.Tt.UnoccupiedSrc:w("There's no piece to move!");break;case n.Tt.Unplayable:w("That's not a playable square!");break;case n.Tt.WrongTeamSrc:w("That's not your piece!")}}v.clear_selected(),v.draw(),k=[],m=u;break;case"ai_turn":console.log("It's the AI's turn!")}I(),E(),function(){switch(v.has_won()){case void 0:break;case n.SZ.White:w("You Lost!"),h=setInterval((()=>{T()}),3e3);break;case n.SZ.Black:w("You Won!","success"),h=setInterval((()=>{T()}),3e3)}}()}(new n.rh(Math.floor(e.y/x.clientHeight*c),Math.floor(e.x/x.clientWidth*a)))}));const S=document.getElementById("width");S.onchange=()=>{a=parseInt(S.value),T()},S.value=8;const B=document.getElementById("height");B.onchange=()=>{c=parseInt(B.value),j.max=c/2-1,T()},B.value=8;const j=document.getElementById("play_rows");j.onchange=()=>{o=parseInt(j.value),T()},j.value=3;const O=document.getElementById("ai_search_depth");O.onchange=()=>{i=parseInt(O.value),v.set_search_depth(i),i>4&&w("This increases thinking time exponentially, be careful (probably don't go past 6)","warning")},O.value=4;const q=document.getElementById("ai-checkbox");q.onchange=()=>{};const W=document.getElementById("ai_difficulty");W.onchange=()=>{s=parseInt(W.value)/100,v.set_perfect_chance(s)},W.value=50}))}}]); //# sourceMappingURL=10.bootstrap.js.map \ No newline at end of file diff --git a/10.bootstrap.js.map b/10.bootstrap.js.map index 0023030..2804a00 100644 --- a/10.bootstrap.js.map +++ b/10.bootstrap.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://draught/../pkg/draught_bg.js","webpack://draught/./index.js"],"names":["heap","Array","fill","undefined","getObject","idx","push","heap_next","length","cachedTextDecoder","TextDecoder","module","require","ignoreBOM","fatal","decode","cachegetUint8Memory0","getUint8Memory0","buffer","Uint8Array","getStringFromWasm0","ptr","len","subarray","addHeapObject","obj","debugString","val","type","description","name","isArray","debug","i","builtInMatches","exec","toString","call","className","JSON","stringify","_","Error","message","stack","WASM_VECTOR_LEN","cachedTextEncoder","TextEncoder","encodeString","encodeInto","arg","view","buf","encode","set","read","written","passStringToWasm0","malloc","realloc","mem","offset","code","charCodeAt","slice","cachegetInt32Memory0","getInt32Memory0","Int32Array","isLikeNone","x","_assertClass","instance","klass","init_wasm","handleError","f","args","apply","this","e","Object","freeze","Move","Jump","Team","Black","White","SquareState","Man","King","Empty","Occupied","Unplayable","Moveable","Allowed","UnoccupiedSrc","OccupiedDest","OutOfBounds","WrongTeamSrc","IllegalTrajectory","NoJumpablePiece","JumpingSameTeam","Board","create","prototype","__destroy_into_raw","arg0","ret","Square","__wrap","square","ptr0","BrdIdx","row","col","from","to","ptr1","from_square_occupant","Piece","ptr2","team","jumpee","from_occ","width","height","current_turn","board","piece_rows","other","Game","search_depth","first_turn","canvas_id","canvas_width","canvas_height","len0","value","Painter","canvas","strength","state","occupant","__wbindgen_object_drop_ref","dropObject","takeObject","__wbindgen_string_new","arg1","__wbg_new_59cb74e423758ede","__wbg_stack_558ba5917b466edd","__wbg_error_4bb6c2a97407129a","console","error","__wbg_self_86b4b13392c7af56","self","arguments","__wbg_require_f5521a5b85ad2542","arg2","__wbg_crypto_b8c92eaac23d0d80","crypto","__wbg_msCrypto_9ad6677321a08dd8","msCrypto","__wbindgen_is_undefined","__wbg_getRandomValues_dd27e6b0652b3236","getRandomValues","__wbg_getRandomValues_e57c9b75ddead065","__wbg_randomFillSync_d2ba53160aec6aba","randomFillSync","__wbg_static_accessor_MODULE_452b4680e8614c81","__wbg_instanceof_Window_11e25482011fc506","Window","__wbg_document_5aff8cd83ef968f5","document","__wbg_getElementById_b180ea4ada06a837","getElementById","__wbg_log_9a99fb1af846153b","log","__wbg_instanceof_CanvasRenderingContext2d_779e79c4121aa91b","CanvasRenderingContext2D","__wbg_setstrokeStyle_2939ee453716e462","strokeStyle","__wbg_setfillStyle_af790b5baf4d3210","fillStyle","__wbg_setlineWidth_3e6b1837ae38d099","lineWidth","__wbg_beginPath_2378575e37027ad3","beginPath","__wbg_fill_558339447ed6ad43","__wbg_stroke_c1e0313c58997dcf","stroke","__wbg_arc_fffd87d9113dce32","arg3","arg4","arg5","arc","__wbg_fillRect_46ffc8d2cef7e298","fillRect","__wbg_strokeRect_7ea34fad8a7f0fe2","strokeRect","__wbg_instanceof_HtmlCanvasElement_fd3cbbe3906d7792","HTMLCanvasElement","__wbg_setwidth_f3c88eb520ba8d47","__wbg_setheight_5a1abba41e35c42a","__wbg_getContext_813df131fcbd6e91","getContext","__wbg_newnoargs_9fdd8f3961dd1bee","Function","__wbg_call_ba36642bd901572b","__wbg_self_bb69a836a72ec6e9","__wbg_window_3304fc4b414c9693","window","__wbg_globalThis_e0d21cabc6630763","globalThis","__wbg_global_8463719227271676","g","global","__wbg_buffer_9e184d6f785de5ed","__wbg_new_e8101319e4cf95fc","__wbg_set_e8ae7b27314e8b98","__wbg_length_2d56cb37075fcfb1","__wbg_newwithlength_a8d1dbcbe703a5c6","__wbg_subarray_901ede8318da52a6","__wbindgen_object_clone_ref","__wbindgen_debug_string","__wbindgen_throw","__wbindgen_memory","BOARD_WIDTH","BOARD_HEIGHT","PIECE_ROWS","SEARCH_DEPTH","GameState","statusAlert","teamText","nodeCountText","winningText","onclick","start_game","wonTimeout","statusTimeout","setStatus","txt","alertType","hide","clearInterval","innerText","hidden","setTimeout","current_state","game","painter","clicks","set_painter","draw","updateTeamText","updateWinningText","winning","addEventListener","event","mousepos","evt","rect","getBoundingClientRect","clientX","left","y","clientY","top","getMousePos","cell_coord","current_cell_state","set_selected","eq","make_move","aiCheckBox","checked","ai_move","last_node_count","toLocaleString","clear_selected","has_won","setInterval","checkWon","process_canvas_click","Math","floor","clientHeight","clientWidth","widthBox","onchange","parseInt","heightBox","pieceRowsBox","max","aiSearchDepthBox","set_search_depth"],"mappings":"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","file":"10.bootstrap.js","sourcesContent":["import * as wasm from './draught_bg.wasm';\n\nconst heap = new Array(32).fill(undefined);\n\nheap.push(undefined, null, true, false);\n\nfunction getObject(idx) { return heap[idx]; }\n\nlet heap_next = heap.length;\n\nfunction dropObject(idx) {\n if (idx < 36) return;\n heap[idx] = heap_next;\n heap_next = idx;\n}\n\nfunction takeObject(idx) {\n const ret = getObject(idx);\n dropObject(idx);\n return ret;\n}\n\nconst lTextDecoder = typeof TextDecoder === 'undefined' ? (0, module.require)('util').TextDecoder : TextDecoder;\n\nlet cachedTextDecoder = new lTextDecoder('utf-8', { ignoreBOM: true, fatal: true });\n\ncachedTextDecoder.decode();\n\nlet cachegetUint8Memory0 = null;\nfunction getUint8Memory0() {\n if (cachegetUint8Memory0 === null || cachegetUint8Memory0.buffer !== wasm.memory.buffer) {\n cachegetUint8Memory0 = new Uint8Array(wasm.memory.buffer);\n }\n return cachegetUint8Memory0;\n}\n\nfunction getStringFromWasm0(ptr, len) {\n return cachedTextDecoder.decode(getUint8Memory0().subarray(ptr, ptr + len));\n}\n\nfunction addHeapObject(obj) {\n if (heap_next === heap.length) heap.push(heap.length + 1);\n const idx = heap_next;\n heap_next = heap[idx];\n\n heap[idx] = obj;\n return idx;\n}\n\nfunction debugString(val) {\n // primitive types\n const type = typeof val;\n if (type == 'number' || type == 'boolean' || val == null) {\n return `${val}`;\n }\n if (type == 'string') {\n return `\"${val}\"`;\n }\n if (type == 'symbol') {\n const description = val.description;\n if (description == null) {\n return 'Symbol';\n } else {\n return `Symbol(${description})`;\n }\n }\n if (type == 'function') {\n const name = val.name;\n if (typeof name == 'string' && name.length > 0) {\n return `Function(${name})`;\n } else {\n return 'Function';\n }\n }\n // objects\n if (Array.isArray(val)) {\n const length = val.length;\n let debug = '[';\n if (length > 0) {\n debug += debugString(val[0]);\n }\n for(let i = 1; i < length; i++) {\n debug += ', ' + debugString(val[i]);\n }\n debug += ']';\n return debug;\n }\n // Test for built-in\n const builtInMatches = /\\[object ([^\\]]+)\\]/.exec(toString.call(val));\n let className;\n if (builtInMatches.length > 1) {\n className = builtInMatches[1];\n } else {\n // Failed to match the standard '[object ClassName]'\n return toString.call(val);\n }\n if (className == 'Object') {\n // we're a user defined class or Object\n // JSON.stringify avoids problems with cycles, and is generally much\n // easier than looping through ownProperties of `val`.\n try {\n return 'Object(' + JSON.stringify(val) + ')';\n } catch (_) {\n return 'Object';\n }\n }\n // errors\n if (val instanceof Error) {\n return `${val.name}: ${val.message}\\n${val.stack}`;\n }\n // TODO we could test for more things here, like `Set`s and `Map`s.\n return className;\n}\n\nlet WASM_VECTOR_LEN = 0;\n\nconst lTextEncoder = typeof TextEncoder === 'undefined' ? (0, module.require)('util').TextEncoder : TextEncoder;\n\nlet cachedTextEncoder = new lTextEncoder('utf-8');\n\nconst encodeString = (typeof cachedTextEncoder.encodeInto === 'function'\n ? function (arg, view) {\n return cachedTextEncoder.encodeInto(arg, view);\n}\n : function (arg, view) {\n const buf = cachedTextEncoder.encode(arg);\n view.set(buf);\n return {\n read: arg.length,\n written: buf.length\n };\n});\n\nfunction passStringToWasm0(arg, malloc, realloc) {\n\n if (realloc === undefined) {\n const buf = cachedTextEncoder.encode(arg);\n const ptr = malloc(buf.length);\n getUint8Memory0().subarray(ptr, ptr + buf.length).set(buf);\n WASM_VECTOR_LEN = buf.length;\n return ptr;\n }\n\n let len = arg.length;\n let ptr = malloc(len);\n\n const mem = getUint8Memory0();\n\n let offset = 0;\n\n for (; offset < len; offset++) {\n const code = arg.charCodeAt(offset);\n if (code > 0x7F) break;\n mem[ptr + offset] = code;\n }\n\n if (offset !== len) {\n if (offset !== 0) {\n arg = arg.slice(offset);\n }\n ptr = realloc(ptr, len, len = offset + arg.length * 3);\n const view = getUint8Memory0().subarray(ptr + offset, ptr + len);\n const ret = encodeString(arg, view);\n\n offset += ret.written;\n }\n\n WASM_VECTOR_LEN = offset;\n return ptr;\n}\n\nlet cachegetInt32Memory0 = null;\nfunction getInt32Memory0() {\n if (cachegetInt32Memory0 === null || cachegetInt32Memory0.buffer !== wasm.memory.buffer) {\n cachegetInt32Memory0 = new Int32Array(wasm.memory.buffer);\n }\n return cachegetInt32Memory0;\n}\n\nfunction isLikeNone(x) {\n return x === undefined || x === null;\n}\n\nfunction _assertClass(instance, klass) {\n if (!(instance instanceof klass)) {\n throw new Error(`expected instance of ${klass.name}`);\n }\n return instance.ptr;\n}\n/**\n*/\nexport function init_wasm() {\n wasm.init_wasm();\n}\n\nfunction handleError(f, args) {\n try {\n return f.apply(this, args);\n } catch (e) {\n wasm.__wbindgen_exn_store(addHeapObject(e));\n }\n}\n\nfunction getArrayU8FromWasm0(ptr, len) {\n return getUint8Memory0().subarray(ptr / 1, ptr / 1 + len);\n}\n/**\n* Move/Jump, for use in Move\n*/\nexport const MoveType = Object.freeze({ Move:0,\"0\":\"Move\",Jump:1,\"1\":\"Jump\", });\n/**\n* Black/White\n*/\nexport const Team = Object.freeze({ Black:0,\"0\":\"Black\",White:1,\"1\":\"White\", });\n/**\n* Man/King\n*/\nexport const Strength = Object.freeze({ Man:0,\"0\":\"Man\",King:1,\"1\":\"King\", });\n/**\n* Model board square as Empty/Occupied/Unplayable\n*/\nexport const SquareState = Object.freeze({ Empty:0,\"0\":\"Empty\",Occupied:1,\"1\":\"Occupied\",Unplayable:2,\"2\":\"Unplayable\", });\n/**\n* Possible outcomes of trying to move\n*/\nexport const Moveable = Object.freeze({ Allowed:0,\"0\":\"Allowed\",UnoccupiedSrc:1,\"1\":\"UnoccupiedSrc\",OccupiedDest:2,\"2\":\"OccupiedDest\",OutOfBounds:3,\"3\":\"OutOfBounds\",Unplayable:4,\"4\":\"Unplayable\",WrongTeamSrc:5,\"5\":\"WrongTeamSrc\",IllegalTrajectory:6,\"6\":\"IllegalTrajectory\",NoJumpablePiece:7,\"7\":\"NoJumpablePiece\",JumpingSameTeam:8,\"8\":\"JumpingSameTeam\", });\n/**\n* Single state of a checkers board\n*/\nexport class Board {\n\n static __wrap(ptr) {\n const obj = Object.create(Board.prototype);\n obj.ptr = ptr;\n\n return obj;\n }\n\n __destroy_into_raw() {\n const ptr = this.ptr;\n this.ptr = 0;\n\n return ptr;\n }\n\n free() {\n const ptr = this.__destroy_into_raw();\n wasm.__wbg_board_free(ptr);\n }\n /**\n * @returns {number}\n */\n get width() {\n var ret = wasm.__wbg_get_board_width(this.ptr);\n return ret >>> 0;\n }\n /**\n * @param {number} arg0\n */\n set width(arg0) {\n wasm.__wbg_set_board_width(this.ptr, arg0);\n }\n /**\n * @returns {number}\n */\n get height() {\n var ret = wasm.__wbg_get_board_height(this.ptr);\n return ret >>> 0;\n }\n /**\n * @param {number} arg0\n */\n set height(arg0) {\n wasm.__wbg_set_board_height(this.ptr, arg0);\n }\n /**\n * @returns {number}\n */\n get current_turn() {\n var ret = wasm.__wbg_get_board_current_turn(this.ptr);\n return ret >>> 0;\n }\n /**\n * @param {number} arg0\n */\n set current_turn(arg0) {\n wasm.__wbg_set_board_current_turn(this.ptr, arg0);\n }\n /**\n * Get a copy of a board square by 1D array index\n * @param {number} idx\n * @returns {Square}\n */\n cell(idx) {\n var ret = wasm.board_cell(this.ptr, idx);\n return Square.__wrap(ret);\n }\n /**\n * Get a copy of a board square by 1D array index\n * @param {number} idx\n * @param {Square} square\n */\n set_cell(idx, square) {\n _assertClass(square, Square);\n var ptr0 = square.ptr;\n square.ptr = 0;\n wasm.board_set_cell(this.ptr, idx, ptr0);\n }\n /**\n * Get a copy of a board square by 2D [`BrdIdx`] index\n * @param {BrdIdx} idx\n * @returns {Square}\n */\n grid_cell(idx) {\n _assertClass(idx, BrdIdx);\n var ptr0 = idx.ptr;\n idx.ptr = 0;\n var ret = wasm.board_grid_cell(this.ptr, ptr0);\n return Square.__wrap(ret);\n }\n /**\n * Transform a 2D row/column board index into a single 1D index for use with [`Board::cells`]\n * @param {number} row\n * @param {number} col\n * @returns {number}\n */\n cell_index(row, col) {\n var ret = wasm.board_cell_index(this.ptr, row, col);\n return ret >>> 0;\n }\n /**\n * Similar to [`Board::cell_index`] but with a [`BrdIdx`] instead of separate indices. Transform a 2D row/column board index into a single 1D index for use with [`Board::cells`]\n * @param {BrdIdx} idx\n * @returns {number}\n */\n cell_idx(idx) {\n _assertClass(idx, BrdIdx);\n var ptr0 = idx.ptr;\n idx.ptr = 0;\n var ret = wasm.board_cell_idx(this.ptr, ptr0);\n return ret >>> 0;\n }\n /**\n * Transform a 1D array index (for [`Board::cells`]) into a 2D game board index (by row/col)\n * @param {number} idx\n * @returns {BrdIdx}\n */\n board_index(idx) {\n var ret = wasm.board_board_index(this.ptr, idx);\n return BrdIdx.__wrap(ret);\n }\n /**\n * Check whether a move given by source and destination indices is legal\n * @param {BrdIdx} from\n * @param {BrdIdx} to\n * @returns {number}\n */\n can_move(from, to) {\n _assertClass(from, BrdIdx);\n var ptr0 = from.ptr;\n from.ptr = 0;\n _assertClass(to, BrdIdx);\n var ptr1 = to.ptr;\n to.ptr = 0;\n var ret = wasm.board_can_move(this.ptr, ptr0, ptr1);\n return ret >>> 0;\n }\n /**\n * Check that given move trajectory is valid for a man piece\n * @param {BrdIdx} from\n * @param {BrdIdx} to\n * @param {Piece} from_square_occupant\n * @returns {number}\n */\n validate_man_move(from, to, from_square_occupant) {\n _assertClass(from, BrdIdx);\n var ptr0 = from.ptr;\n from.ptr = 0;\n _assertClass(to, BrdIdx);\n var ptr1 = to.ptr;\n to.ptr = 0;\n _assertClass(from_square_occupant, Piece);\n var ptr2 = from_square_occupant.ptr;\n from_square_occupant.ptr = 0;\n var ret = wasm.board_validate_man_move(this.ptr, ptr0, ptr1, ptr2);\n return ret >>> 0;\n }\n /**\n * Check that given move trajectory is valid for a king piece\n * @param {BrdIdx} from\n * @param {BrdIdx} to\n * @param {Piece} from_square_occupant\n * @returns {number}\n */\n validate_king_move(from, to, from_square_occupant) {\n _assertClass(from, BrdIdx);\n var ptr0 = from.ptr;\n from.ptr = 0;\n _assertClass(to, BrdIdx);\n var ptr1 = to.ptr;\n to.ptr = 0;\n _assertClass(from_square_occupant, Piece);\n var ptr2 = from_square_occupant.ptr;\n from_square_occupant.ptr = 0;\n var ret = wasm.board_validate_king_move(this.ptr, ptr0, ptr1, ptr2);\n return ret >>> 0;\n }\n /**\n * Get cell index of jumpee square given from and to locations\n * @param {BrdIdx} from\n * @param {BrdIdx} to\n * @returns {number}\n */\n jumpee_idx(from, to) {\n _assertClass(from, BrdIdx);\n var ptr0 = from.ptr;\n from.ptr = 0;\n _assertClass(to, BrdIdx);\n var ptr1 = to.ptr;\n to.ptr = 0;\n var ret = wasm.board_jumpee_idx(this.ptr, ptr0, ptr1);\n return ret >>> 0;\n }\n /**\n * Get a pointer to the backing array of board squares, [`Board::cells`]\n * @returns {number}\n */\n cells() {\n var ret = wasm.board_cells(this.ptr);\n return ret;\n }\n /**\n * Get the number of board squares\n * @returns {number}\n */\n num_cells() {\n var ret = wasm.board_num_cells(this.ptr);\n return ret >>> 0;\n }\n /**\n * Get the number of remaining pieces\n * @returns {number}\n */\n num_pieces() {\n var ret = wasm.board_num_pieces(this.ptr);\n return ret >>> 0;\n }\n /**\n * Get the number of remaining pieces for a player\n * @param {number} team\n * @returns {number}\n */\n num_player(team) {\n var ret = wasm.board_num_player(this.ptr, team);\n return ret >>> 0;\n }\n /**\n * Get the score value, Black - White pieces\n * @returns {number}\n */\n score() {\n var ret = wasm.board_score(this.ptr);\n return ret;\n }\n /**\n * Get the state of a board square by 1D array index\n * @param {number} idx\n * @returns {number}\n */\n cell_state(idx) {\n var ret = wasm.board_cell_state(this.ptr, idx);\n return ret >>> 0;\n }\n /**\n * Get new board derived from current with given move applied\n * @param {BrdIdx} from\n * @param {BrdIdx} to\n * @returns {Board}\n */\n apply_move(from, to) {\n _assertClass(from, BrdIdx);\n var ptr0 = from.ptr;\n from.ptr = 0;\n _assertClass(to, BrdIdx);\n var ptr1 = to.ptr;\n to.ptr = 0;\n var ret = wasm.board_apply_move(this.ptr, ptr0, ptr1);\n return Board.__wrap(ret);\n }\n /**\n * Get new board derived from current with given jump applied\n * @param {BrdIdx} from\n * @param {BrdIdx} to\n * @returns {Board}\n */\n apply_jump(from, to) {\n _assertClass(from, BrdIdx);\n var ptr0 = from.ptr;\n from.ptr = 0;\n _assertClass(to, BrdIdx);\n var ptr1 = to.ptr;\n to.ptr = 0;\n var ret = wasm.board_apply_jump(this.ptr, ptr0, ptr1);\n return Board.__wrap(ret);\n }\n /**\n * Get row index for current team, top row for black, bottom row for white\n * @returns {number}\n */\n king_row_idx() {\n var ret = wasm.board_king_row_idx(this.ptr);\n return ret >>> 0;\n }\n /**\n * Unwrap the jumpee piece from the square and [`Board::check_jumpee_team`] with [`Moveable`] response\n * @param {Square} jumpee\n * @param {Piece} from_occ\n * @returns {number}\n */\n static validate_jumpee(jumpee, from_occ) {\n _assertClass(jumpee, Square);\n var ptr0 = jumpee.ptr;\n jumpee.ptr = 0;\n _assertClass(from_occ, Piece);\n var ptr1 = from_occ.ptr;\n from_occ.ptr = 0;\n var ret = wasm.board_validate_jumpee(ptr0, ptr1);\n return ret >>> 0;\n }\n /**\n * Check that the source piece and the jumpee are of opposing teams\n * @param {Piece} from\n * @param {Piece} jumpee\n * @returns {boolean}\n */\n static check_jumpee_team(from, jumpee) {\n _assertClass(from, Piece);\n var ptr0 = from.ptr;\n from.ptr = 0;\n _assertClass(jumpee, Piece);\n var ptr1 = jumpee.ptr;\n jumpee.ptr = 0;\n var ret = wasm.board_check_jumpee_team(ptr0, ptr1);\n return ret !== 0;\n }\n /**\n * Initialise a game board without game pieces\n * @param {number} width\n * @param {number} height\n * @param {number} current_turn\n */\n constructor(width, height, current_turn) {\n var ret = wasm.board_new(width, height, current_turn);\n return Board.__wrap(ret);\n }\n /**\n * Reset the given board to a starting layout with 3 rows of opposing pieces\n * @param {Board} board\n * @param {number} piece_rows\n * @returns {Board}\n */\n static init_game(board, piece_rows) {\n _assertClass(board, Board);\n var ptr0 = board.ptr;\n board.ptr = 0;\n var ret = wasm.board_init_game(ptr0, piece_rows);\n return Board.__wrap(ret);\n }\n}\n/**\n* Rank 2 tensor index to identify a board square by row and column\n*/\nexport class BrdIdx {\n\n static __wrap(ptr) {\n const obj = Object.create(BrdIdx.prototype);\n obj.ptr = ptr;\n\n return obj;\n }\n\n __destroy_into_raw() {\n const ptr = this.ptr;\n this.ptr = 0;\n\n return ptr;\n }\n\n free() {\n const ptr = this.__destroy_into_raw();\n wasm.__wbg_brdidx_free(ptr);\n }\n /**\n * @returns {number}\n */\n get row() {\n var ret = wasm.__wbg_get_brdidx_row(this.ptr);\n return ret >>> 0;\n }\n /**\n * @param {number} arg0\n */\n set row(arg0) {\n wasm.__wbg_set_brdidx_row(this.ptr, arg0);\n }\n /**\n * @returns {number}\n */\n get col() {\n var ret = wasm.__wbg_get_brdidx_col(this.ptr);\n return ret >>> 0;\n }\n /**\n * @param {number} arg0\n */\n set col(arg0) {\n wasm.__wbg_set_brdidx_col(this.ptr, arg0);\n }\n /**\n * @param {number} row\n * @param {number} col\n */\n constructor(row, col) {\n var ret = wasm.brdidx_from(row, col);\n return BrdIdx.__wrap(ret);\n }\n /**\n * @param {BrdIdx} other\n * @returns {boolean}\n */\n eq(other) {\n _assertClass(other, BrdIdx);\n var ret = wasm.brdidx_eq(this.ptr, other.ptr);\n return ret !== 0;\n }\n}\n/**\n* Root-level structure for managing the game as a collection of board states\n*/\nexport class Game {\n\n static __wrap(ptr) {\n const obj = Object.create(Game.prototype);\n obj.ptr = ptr;\n\n return obj;\n }\n\n __destroy_into_raw() {\n const ptr = this.ptr;\n this.ptr = 0;\n\n return ptr;\n }\n\n free() {\n const ptr = this.__destroy_into_raw();\n wasm.__wbg_game_free(ptr);\n }\n /**\n * @returns {number}\n */\n get last_node_count() {\n var ret = wasm.__wbg_get_game_last_node_count(this.ptr);\n return ret >>> 0;\n }\n /**\n * @param {number} arg0\n */\n set last_node_count(arg0) {\n wasm.__wbg_set_game_last_node_count(this.ptr, arg0);\n }\n /**\n * Get pointer to current board's squares\n * @returns {number}\n */\n current_board_cells() {\n var ret = wasm.game_current_board_cells(this.ptr);\n return ret;\n }\n /**\n * Get pointer to current board's squares\n * @returns {number}\n */\n current_board_len() {\n var ret = wasm.game_current_board_len(this.ptr);\n return ret >>> 0;\n }\n /**\n * Current turn's team\n * @returns {number}\n */\n current_turn() {\n var ret = wasm.game_current_turn(this.ptr);\n return ret >>> 0;\n }\n /**\n * Current board's score\n * @returns {number}\n */\n score() {\n var ret = wasm.game_score(this.ptr);\n return ret;\n }\n /**\n * Get currently winning player\n * @returns {number | undefined}\n */\n winning() {\n var ret = wasm.game_winning(this.ptr);\n return ret === 2 ? undefined : ret;\n }\n /**\n * Check if a player has won\n * @returns {number | undefined}\n */\n has_won() {\n var ret = wasm.game_has_won(this.ptr);\n return ret === 2 ? undefined : ret;\n }\n /**\n * Get square on current board for given index\n * @param {BrdIdx} idx\n * @returns {Square}\n */\n current_cell_state(idx) {\n _assertClass(idx, BrdIdx);\n var ret = wasm.game_current_cell_state(this.ptr, idx.ptr);\n return Square.__wrap(ret);\n }\n /**\n * @param {number} search_depth\n */\n set_search_depth(search_depth) {\n wasm.game_set_search_depth(this.ptr, search_depth);\n }\n /**\n * Set given index as selected piece\n * TODO: Check whether valid square?\n * @param {BrdIdx} idx\n */\n set_selected(idx) {\n _assertClass(idx, BrdIdx);\n wasm.game_set_selected(this.ptr, idx.ptr);\n }\n /**\n * Clear currently selected piece\n */\n clear_selected() {\n wasm.game_clear_selected(this.ptr);\n }\n /**\n * Attempt to make a move given a source and destination index\n * @param {BrdIdx} from\n * @param {BrdIdx} to\n * @returns {number}\n */\n make_move(from, to) {\n _assertClass(from, BrdIdx);\n var ptr0 = from.ptr;\n from.ptr = 0;\n _assertClass(to, BrdIdx);\n var ptr1 = to.ptr;\n to.ptr = 0;\n var ret = wasm.game_make_move(this.ptr, ptr0, ptr1);\n return ret >>> 0;\n }\n /**\n * Update board state with given move and push new board into current state\n * @param {BrdIdx} from\n * @param {BrdIdx} to\n */\n execute_move(from, to) {\n _assertClass(from, BrdIdx);\n var ptr0 = from.ptr;\n from.ptr = 0;\n _assertClass(to, BrdIdx);\n var ptr1 = to.ptr;\n to.ptr = 0;\n wasm.game_execute_move(this.ptr, ptr0, ptr1);\n }\n /**\n * Update board state with given jump move and push new board into current state\n * @param {BrdIdx} from\n * @param {BrdIdx} to\n */\n execute_jump(from, to) {\n _assertClass(from, BrdIdx);\n var ptr0 = from.ptr;\n from.ptr = 0;\n _assertClass(to, BrdIdx);\n var ptr1 = to.ptr;\n to.ptr = 0;\n wasm.game_execute_jump(this.ptr, ptr0, ptr1);\n }\n /**\n * Push current board into the previous turns and set given board to current\n * @param {Board} board\n */\n push_new_board(board) {\n _assertClass(board, Board);\n var ptr0 = board.ptr;\n board.ptr = 0;\n wasm.game_push_new_board(this.ptr, ptr0);\n }\n /**\n * Set current board to given\n * @param {Board} board\n */\n set_current(board) {\n _assertClass(board, Board);\n var ptr0 = board.ptr;\n board.ptr = 0;\n wasm.game_set_current(this.ptr, ptr0);\n }\n /**\n * Get new game without board renderer\n * @param {number} width\n * @param {number} height\n * @param {number} piece_rows\n * @param {number} first_turn\n * @param {number} search_depth\n */\n constructor(width, height, piece_rows, first_turn, search_depth) {\n var ret = wasm.game_new(width, height, piece_rows, first_turn, search_depth);\n return Game.__wrap(ret);\n }\n /**\n * Get a new game with canvas ID and dimensions\n * @param {number} width\n * @param {number} height\n * @param {number} piece_rows\n * @param {number} first_turn\n * @param {number} search_depth\n * @param {string} canvas_id\n * @param {number} canvas_width\n * @param {number} canvas_height\n * @returns {Game}\n */\n static new_with_canvas(width, height, piece_rows, first_turn, search_depth, canvas_id, canvas_width, canvas_height) {\n var ptr0 = passStringToWasm0(canvas_id, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n var len0 = WASM_VECTOR_LEN;\n var ret = wasm.game_new_with_canvas(width, height, piece_rows, first_turn, search_depth, ptr0, len0, canvas_width, canvas_height);\n return Game.__wrap(ret);\n }\n /**\n * Set painter for rendering boards\n * @param {Painter} value\n */\n set_painter(value) {\n _assertClass(value, Painter);\n var ptr0 = value.ptr;\n value.ptr = 0;\n wasm.game_set_painter(this.ptr, ptr0);\n }\n /**\n * Draw current board using painter if exists\n */\n draw() {\n wasm.game_draw(this.ptr);\n }\n /**\n * Create computer, get move from current board and update current board\n */\n ai_move() {\n wasm.game_ai_move(this.ptr);\n }\n}\n/**\n* Used to paint boards onto HTML canvases\n*/\nexport class Painter {\n\n static __wrap(ptr) {\n const obj = Object.create(Painter.prototype);\n obj.ptr = ptr;\n\n return obj;\n }\n\n __destroy_into_raw() {\n const ptr = this.ptr;\n this.ptr = 0;\n\n return ptr;\n }\n\n free() {\n const ptr = this.__destroy_into_raw();\n wasm.__wbg_painter_free(ptr);\n }\n /**\n * Default constructor which queries for canvas by ID\n * @param {number} width\n * @param {number} height\n * @param {string} canvas_id\n */\n constructor(width, height, canvas_id) {\n var ptr0 = passStringToWasm0(canvas_id, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n var len0 = WASM_VECTOR_LEN;\n var ret = wasm.painter_new(width, height, ptr0, len0);\n return Painter.__wrap(ret);\n }\n /**\n * Constructor with given canvas element\n * @param {number} width\n * @param {number} height\n * @param {HTMLCanvasElement} canvas\n * @returns {Painter}\n */\n static new_with_canvas(width, height, canvas) {\n var ret = wasm.painter_new_with_canvas(width, height, addHeapObject(canvas));\n return Painter.__wrap(ret);\n }\n /**\n * Set new square outline colour value\n * @param {any} value\n */\n set_square_outline(value) {\n wasm.painter_set_square_outline(this.ptr, addHeapObject(value));\n }\n /**\n * Set new line width for outlining squares\n * @param {number} value\n */\n set_outline_width(value) {\n wasm.painter_set_outline_width(this.ptr, value);\n }\n /**\n * Set whether squares are outlined\n * @param {boolean} value\n */\n set_draw_outline(value) {\n wasm.painter_set_draw_outline(this.ptr, value);\n }\n /**\n * Reset the canvas dimensions to the given width and height\n */\n reset_dimensions() {\n wasm.painter_reset_dimensions(this.ptr);\n }\n /**\n * Check whether given canvas dimensions divide evenly by given board dimenions\n * @param {Board} board\n * @returns {boolean}\n */\n validate_board_dim(board) {\n _assertClass(board, Board);\n var ret = wasm.painter_validate_board_dim(this.ptr, board.ptr);\n return ret !== 0;\n }\n /**\n * Draw a board onto the canvas\n * @param {Board} board\n */\n draw(board) {\n _assertClass(board, Board);\n wasm.painter_draw(this.ptr, board.ptr);\n }\n}\n/**\n* Game piece given by its team and strength (normal or kinged)\n*/\nexport class Piece {\n\n static __wrap(ptr) {\n const obj = Object.create(Piece.prototype);\n obj.ptr = ptr;\n\n return obj;\n }\n\n __destroy_into_raw() {\n const ptr = this.ptr;\n this.ptr = 0;\n\n return ptr;\n }\n\n free() {\n const ptr = this.__destroy_into_raw();\n wasm.__wbg_piece_free(ptr);\n }\n /**\n * @returns {number}\n */\n get team() {\n var ret = wasm.__wbg_get_piece_team(this.ptr);\n return ret >>> 0;\n }\n /**\n * @param {number} arg0\n */\n set team(arg0) {\n wasm.__wbg_set_piece_team(this.ptr, arg0);\n }\n /**\n * @returns {number}\n */\n get strength() {\n var ret = wasm.__wbg_get_piece_strength(this.ptr);\n return ret >>> 0;\n }\n /**\n * @param {number} arg0\n */\n set strength(arg0) {\n wasm.__wbg_set_piece_strength(this.ptr, arg0);\n }\n /**\n * @param {number} team\n * @param {number} strength\n */\n constructor(team, strength) {\n var ret = wasm.piece_new(team, strength);\n return Piece.__wrap(ret);\n }\n}\n/**\n* Board squares given by a state and a possible occupying game piece\n*/\nexport class Square {\n\n static __wrap(ptr) {\n const obj = Object.create(Square.prototype);\n obj.ptr = ptr;\n\n return obj;\n }\n\n __destroy_into_raw() {\n const ptr = this.ptr;\n this.ptr = 0;\n\n return ptr;\n }\n\n free() {\n const ptr = this.__destroy_into_raw();\n wasm.__wbg_square_free(ptr);\n }\n /**\n * Game piece if square is occupied\n * @returns {Piece | undefined}\n */\n get occupant() {\n var ret = wasm.__wbg_get_square_occupant(this.ptr);\n return ret === 0 ? undefined : Piece.__wrap(ret);\n }\n /**\n * Game piece if square is occupied\n * @param {Piece | undefined} arg0\n */\n set occupant(arg0) {\n let ptr0 = 0;\n if (!isLikeNone(arg0)) {\n _assertClass(arg0, Piece);\n ptr0 = arg0.ptr;\n arg0.ptr = 0;\n }\n wasm.__wbg_set_square_occupant(this.ptr, ptr0);\n }\n /**\n * Description of whether the square is occupied or an unplayable, i.e. off-lattice square\n * @returns {number}\n */\n get state() {\n var ret = wasm.__wbg_get_square_state(this.ptr);\n return ret >>> 0;\n }\n /**\n * Description of whether the square is occupied or an unplayable, i.e. off-lattice square\n * @param {number} arg0\n */\n set state(arg0) {\n wasm.__wbg_set_square_state(this.ptr, arg0);\n }\n /**\n * Standard constructor function to form square from state and occupant\n * @param {number} state\n * @param {Piece | undefined} occupant\n */\n constructor(state, occupant) {\n let ptr0 = 0;\n if (!isLikeNone(occupant)) {\n _assertClass(occupant, Piece);\n ptr0 = occupant.ptr;\n occupant.ptr = 0;\n }\n var ret = wasm.square_new(state, ptr0);\n return Square.__wrap(ret);\n }\n /**\n * Helper function for a well-formed piece square by team and strength\n * @param {number} team\n * @param {number} strength\n * @returns {Square}\n */\n static pc(team, strength) {\n var ret = wasm.square_pc(team, strength);\n return Square.__wrap(ret);\n }\n /**\n * Helper function for a well-formed empty square\n * @returns {Square}\n */\n static empty() {\n var ret = wasm.square_empty();\n return Square.__wrap(ret);\n }\n /**\n * Helper function for a well-formed unplayable square\n * @returns {Square}\n */\n static unplay() {\n var ret = wasm.square_unplay();\n return Square.__wrap(ret);\n }\n}\n\nexport function __wbindgen_object_drop_ref(arg0) {\n takeObject(arg0);\n};\n\nexport function __wbindgen_string_new(arg0, arg1) {\n var ret = getStringFromWasm0(arg0, arg1);\n return addHeapObject(ret);\n};\n\nexport function __wbg_new_59cb74e423758ede() {\n var ret = new Error();\n return addHeapObject(ret);\n};\n\nexport function __wbg_stack_558ba5917b466edd(arg0, arg1) {\n var ret = getObject(arg1).stack;\n var ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n var len0 = WASM_VECTOR_LEN;\n getInt32Memory0()[arg0 / 4 + 1] = len0;\n getInt32Memory0()[arg0 / 4 + 0] = ptr0;\n};\n\nexport function __wbg_error_4bb6c2a97407129a(arg0, arg1) {\n try {\n console.error(getStringFromWasm0(arg0, arg1));\n } finally {\n wasm.__wbindgen_free(arg0, arg1);\n }\n};\n\nexport function __wbg_self_86b4b13392c7af56() { return handleError(function () {\n var ret = self.self;\n return addHeapObject(ret);\n}, arguments) };\n\nexport function __wbg_require_f5521a5b85ad2542(arg0, arg1, arg2) {\n var ret = getObject(arg0).require(getStringFromWasm0(arg1, arg2));\n return addHeapObject(ret);\n};\n\nexport function __wbg_crypto_b8c92eaac23d0d80(arg0) {\n var ret = getObject(arg0).crypto;\n return addHeapObject(ret);\n};\n\nexport function __wbg_msCrypto_9ad6677321a08dd8(arg0) {\n var ret = getObject(arg0).msCrypto;\n return addHeapObject(ret);\n};\n\nexport function __wbindgen_is_undefined(arg0) {\n var ret = getObject(arg0) === undefined;\n return ret;\n};\n\nexport function __wbg_getRandomValues_dd27e6b0652b3236(arg0) {\n var ret = getObject(arg0).getRandomValues;\n return addHeapObject(ret);\n};\n\nexport function __wbg_getRandomValues_e57c9b75ddead065(arg0, arg1) {\n getObject(arg0).getRandomValues(getObject(arg1));\n};\n\nexport function __wbg_randomFillSync_d2ba53160aec6aba(arg0, arg1, arg2) {\n getObject(arg0).randomFillSync(getArrayU8FromWasm0(arg1, arg2));\n};\n\nexport function __wbg_static_accessor_MODULE_452b4680e8614c81() {\n var ret = module;\n return addHeapObject(ret);\n};\n\nexport function __wbg_instanceof_Window_11e25482011fc506(arg0) {\n var ret = getObject(arg0) instanceof Window;\n return ret;\n};\n\nexport function __wbg_document_5aff8cd83ef968f5(arg0) {\n var ret = getObject(arg0).document;\n return isLikeNone(ret) ? 0 : addHeapObject(ret);\n};\n\nexport function __wbg_getElementById_b180ea4ada06a837(arg0, arg1, arg2) {\n var ret = getObject(arg0).getElementById(getStringFromWasm0(arg1, arg2));\n return isLikeNone(ret) ? 0 : addHeapObject(ret);\n};\n\nexport function __wbg_log_9a99fb1af846153b(arg0) {\n console.log(getObject(arg0));\n};\n\nexport function __wbg_instanceof_CanvasRenderingContext2d_779e79c4121aa91b(arg0) {\n var ret = getObject(arg0) instanceof CanvasRenderingContext2D;\n return ret;\n};\n\nexport function __wbg_setstrokeStyle_2939ee453716e462(arg0, arg1) {\n getObject(arg0).strokeStyle = getObject(arg1);\n};\n\nexport function __wbg_setfillStyle_af790b5baf4d3210(arg0, arg1) {\n getObject(arg0).fillStyle = getObject(arg1);\n};\n\nexport function __wbg_setlineWidth_3e6b1837ae38d099(arg0, arg1) {\n getObject(arg0).lineWidth = arg1;\n};\n\nexport function __wbg_beginPath_2378575e37027ad3(arg0) {\n getObject(arg0).beginPath();\n};\n\nexport function __wbg_fill_558339447ed6ad43(arg0) {\n getObject(arg0).fill();\n};\n\nexport function __wbg_stroke_c1e0313c58997dcf(arg0) {\n getObject(arg0).stroke();\n};\n\nexport function __wbg_arc_fffd87d9113dce32() { return handleError(function (arg0, arg1, arg2, arg3, arg4, arg5) {\n getObject(arg0).arc(arg1, arg2, arg3, arg4, arg5);\n}, arguments) };\n\nexport function __wbg_fillRect_46ffc8d2cef7e298(arg0, arg1, arg2, arg3, arg4) {\n getObject(arg0).fillRect(arg1, arg2, arg3, arg4);\n};\n\nexport function __wbg_strokeRect_7ea34fad8a7f0fe2(arg0, arg1, arg2, arg3, arg4) {\n getObject(arg0).strokeRect(arg1, arg2, arg3, arg4);\n};\n\nexport function __wbg_instanceof_HtmlCanvasElement_fd3cbbe3906d7792(arg0) {\n var ret = getObject(arg0) instanceof HTMLCanvasElement;\n return ret;\n};\n\nexport function __wbg_setwidth_f3c88eb520ba8d47(arg0, arg1) {\n getObject(arg0).width = arg1 >>> 0;\n};\n\nexport function __wbg_setheight_5a1abba41e35c42a(arg0, arg1) {\n getObject(arg0).height = arg1 >>> 0;\n};\n\nexport function __wbg_getContext_813df131fcbd6e91() { return handleError(function (arg0, arg1, arg2) {\n var ret = getObject(arg0).getContext(getStringFromWasm0(arg1, arg2));\n return isLikeNone(ret) ? 0 : addHeapObject(ret);\n}, arguments) };\n\nexport function __wbg_newnoargs_9fdd8f3961dd1bee(arg0, arg1) {\n var ret = new Function(getStringFromWasm0(arg0, arg1));\n return addHeapObject(ret);\n};\n\nexport function __wbg_call_ba36642bd901572b() { return handleError(function (arg0, arg1) {\n var ret = getObject(arg0).call(getObject(arg1));\n return addHeapObject(ret);\n}, arguments) };\n\nexport function __wbg_self_bb69a836a72ec6e9() { return handleError(function () {\n var ret = self.self;\n return addHeapObject(ret);\n}, arguments) };\n\nexport function __wbg_window_3304fc4b414c9693() { return handleError(function () {\n var ret = window.window;\n return addHeapObject(ret);\n}, arguments) };\n\nexport function __wbg_globalThis_e0d21cabc6630763() { return handleError(function () {\n var ret = globalThis.globalThis;\n return addHeapObject(ret);\n}, arguments) };\n\nexport function __wbg_global_8463719227271676() { return handleError(function () {\n var ret = global.global;\n return addHeapObject(ret);\n}, arguments) };\n\nexport function __wbg_buffer_9e184d6f785de5ed(arg0) {\n var ret = getObject(arg0).buffer;\n return addHeapObject(ret);\n};\n\nexport function __wbg_new_e8101319e4cf95fc(arg0) {\n var ret = new Uint8Array(getObject(arg0));\n return addHeapObject(ret);\n};\n\nexport function __wbg_set_e8ae7b27314e8b98(arg0, arg1, arg2) {\n getObject(arg0).set(getObject(arg1), arg2 >>> 0);\n};\n\nexport function __wbg_length_2d56cb37075fcfb1(arg0) {\n var ret = getObject(arg0).length;\n return ret;\n};\n\nexport function __wbg_newwithlength_a8d1dbcbe703a5c6(arg0) {\n var ret = new Uint8Array(arg0 >>> 0);\n return addHeapObject(ret);\n};\n\nexport function __wbg_subarray_901ede8318da52a6(arg0, arg1, arg2) {\n var ret = getObject(arg0).subarray(arg1 >>> 0, arg2 >>> 0);\n return addHeapObject(ret);\n};\n\nexport function __wbindgen_object_clone_ref(arg0) {\n var ret = getObject(arg0);\n return addHeapObject(ret);\n};\n\nexport function __wbindgen_debug_string(arg0, arg1) {\n var ret = debugString(getObject(arg1));\n var ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n var len0 = WASM_VECTOR_LEN;\n getInt32Memory0()[arg0 / 4 + 1] = len0;\n getInt32Memory0()[arg0 / 4 + 0] = ptr0;\n};\n\nexport function __wbindgen_throw(arg0, arg1) {\n throw new Error(getStringFromWasm0(arg0, arg1));\n};\n\nexport function __wbindgen_memory() {\n var ret = wasm.memory;\n return addHeapObject(ret);\n};\n\n","import { Game, Board, BrdIdx, Painter, Team, init_wasm, Moveable, SquareState, Square } from \"draught\";\n// import { memory } from \"draught/draught_bg.wasm\";\n\n///////////////////\n// CONSTS\n///////////////////\n\nconst CANVAS_WIDTH = 720;\nconst CANVAS_HEIGHT = 720;\n\nvar BOARD_WIDTH = 8;\nvar BOARD_HEIGHT = 8;\n\nvar PIECE_ROWS = 3;\nvar SEARCH_DEPTH = 4;\n\nconst STATUS_TIMEOUT = 3000;\nconst WON_TIMEOUT = 3000;\n\nconst GameState = {\n HUMAN_TURN: {\n THINKING: \"human_turn.thinking\",\n FROM_SELECTED: \"human_turn.from_selected\"\n },\n AI_TURN: \"ai_turn\"\n}\n\n//////////////////\n// GAME STUFF\n//////////////////\n\ninit_wasm();\n\n// let board = new Board(BOARD_WIDTH, BOARD_HEIGHT, Team.Black);\n\nconst statusText = document.getElementById(\"status-p\");\nconst statusAlert = document.getElementById(\"status-d\");\nconst teamText = document.getElementById(\"team-p\");\nconst nodeCountText = document.getElementById(\"node-count\");\nconst winningText = document.getElementById(\"winning-p\");\n\nconst startBtn = document.getElementById(\"startBtn\");\nstartBtn.onclick = start_game;\n\nlet wonTimeout = null;\nlet statusTimeout = null;\nlet setStatus = setStatusAlert;\n\nlet current_state = GameState.HUMAN_TURN.THINKING;\n\nlet game = null;\nlet painter = null;\n\nlet clicks = [];\n\nstart_game();\n\n/////////////////\n// CANVAS\n/////////////////\n\nconst canvas = document.getElementById(\"game-canvas\");\ncanvas.addEventListener(\"click\", (event) => {\n var mousepos = getMousePos(canvas, event);\n // console.log(mousepos);\n var cell = new BrdIdx(\n Math.floor((mousepos.y / canvas.clientHeight) * BOARD_HEIGHT),\n Math.floor((mousepos.x / canvas.clientWidth) * BOARD_WIDTH),\n );\n // console.log(cell);\n process_canvas_click(cell);\n});\n\n////////////////\n// FUNCS\n////////////////\n\nfunction start_game() {\n game = new Game(BOARD_WIDTH, BOARD_HEIGHT, PIECE_ROWS, Team.Black, SEARCH_DEPTH);\n painter = new Painter(CANVAS_WIDTH, CANVAS_HEIGHT, \"game-canvas\");\n game.set_painter(painter);\n game.draw();\n\n clearInterval(wonTimeout);\n updateTeamText();\n updateWinningText();\n clicks = [];\n current_state = GameState.HUMAN_TURN.THINKING;\n}\n\nfunction process_canvas_click(cell_coord) {\n\n switch(current_state) {\n // first click of a move\n case GameState.HUMAN_TURN.THINKING:\n if (game.current_cell_state(cell_coord).state != SquareState.Occupied ) {\n return;\n }\n\n if (game.current_cell_state(cell_coord).occupant.team != game.current_turn() ) {\n return;\n }\n\n // console.log(\"Your turn, first piece picked\");\n\n clicks.push(cell_coord);\n current_state = GameState.HUMAN_TURN.FROM_SELECTED;\n game.set_selected(cell_coord);\n game.draw();\n \n break;\n \n // second click of a move\n case GameState.HUMAN_TURN.FROM_SELECTED:\n\n // second click is different to first, process as move\n // otherwise, will skip straight to clean up (clear selected and clicks) \n if (!clicks[0].eq(cell_coord)) {\n\n if (game.current_cell_state(cell_coord).state != SquareState.Empty ) {\n return;\n }\n \n // console.log(\"Your turn, first piece already picked, picking second\");\n \n clicks.push(cell_coord);\n \n if (clicks.length != 2) {\n setStatus(`Error: wrong number of clicks to process ${clicks.length}`);\n console.error(`Error: wrong number of clicks to process ${clicks.length}`);\n \n return;\n }\n\n let status = game.make_move(clicks[0], clicks[1]);\n\n switch(status) {\n case Moveable.Allowed:\n\n if (aiCheckBox.checked) {\n game.ai_move();\n nodeCountText.innerText = `searched ${game.last_node_count.toLocaleString(\"en-GB\")} possible moves`;\n }\n\n break;\n case Moveable.IllegalTrajectory:\n setStatus(\"You can't move like that!\");\n break;\n case Moveable.JumpingSameTeam:\n setStatus(\"You can't jump your own piece!\");\n break;\n case Moveable.NoJumpablePiece:\n setStatus(\"There's nothing to jump!\");\n break;\n case Moveable.OccupiedDest:\n setStatus(\"There's a piece there!\");\n break;\n case Moveable.OutOfBounds:\n setStatus(\"That square's not on the board! (how have you managed that?)\");\n break;\n case Moveable.UnoccupiedSrc:\n setStatus(\"There's no piece to move!\");\n break;\n case Moveable.Unplayable:\n setStatus(\"That's not a playable square!\");\n break;\n case Moveable.WrongTeamSrc:\n setStatus(\"That's not your piece!\");\n break;\n }\n \n }\n\n game.clear_selected();\n game.draw();\n clicks = [];\n current_state = GameState.HUMAN_TURN.THINKING;\n \n break;\n case GameState.AI_TURN:\n console.log(\"It's the AI's turn!\");\n break;\n }\n\n updateTeamText();\n updateWinningText();\n checkWon();\n}\n\nfunction getMousePos(canvas, evt) {\n var rect = canvas.getBoundingClientRect();\n return {\n x: evt.clientX - rect.left,\n y: evt.clientY - rect.top\n };\n}\n\nfunction setStatusText(txt, hide = true) {\n if(statusTimeout != null) {\n clearInterval(statusTimeout);\n }\n\n statusText.innerText = txt;\n\n if(hide) {\n statusTimeout = setTimeout(() => {\n statusText.innerText = \"\";\n }, STATUS_TIMEOUT);\n }\n}\n\nfunction setStatusAlert(txt, alertType = \"danger\", hide = true) {\n if(statusTimeout != null) {\n clearInterval(statusTimeout);\n }\n\n statusAlert.className = `alert alert-${alertType}`;\n statusAlert.innerText = txt;\n statusAlert.hidden = false;\n\n if(hide) {\n statusTimeout = setTimeout(() => {\n statusAlert.hidden = true;\n }, STATUS_TIMEOUT);\n }\n}\n\nfunction updateTeamText(){\n let team = game.current_turn();\n switch(team) {\n case Team.White:\n teamText.innerText = \"⚪ White ⚪\";\n break;\n case Team.Black:\n teamText.innerText = \"🔴 Black 🔴\";\n break;\n }\n}\n\nfunction updateWinningText(){\n \n switch(game.winning()) {\n case undefined:\n winningText.innerText = \"\";\n break;\n case Team.White:\n winningText.innerText = \"👑 White 👑\";\n break;\n case Team.Black:\n winningText.innerText = \"👑 Black 👑\";\n break;\n }\n}\n\nfunction checkWon() {\n\n switch(game.has_won()) {\n case undefined:\n break;\n case Team.White:\n setStatus(\"You Lost!\");\n wonTimeout = setInterval(() => {\n start_game();\n }, WON_TIMEOUT);\n break;\n case Team.Black:\n setStatus(\"You Won!\", \"success\");\n wonTimeout = setInterval(() => {\n start_game();\n }, WON_TIMEOUT);\n break;\n }\n}\n\n////////////////\n// UI\n////////////////\n\nconst widthBox = document.getElementById(\"width\");\n/**\n * Handler for width input box change, start a new game\n */\nconst onWidth = () => {\n\n BOARD_WIDTH = parseInt(widthBox.value);\n start_game();\n}\nwidthBox.onchange = onWidth;\nwidthBox.value = 8;\n\nconst heightBox = document.getElementById(\"height\");\n/**\n * Handler for height input box change, start a new game\n */\nconst onHeight = () => {\n\n BOARD_HEIGHT = parseInt(heightBox.value);\n pieceRowsBox.max = (BOARD_HEIGHT / 2) - 1;\n start_game();\n}\nheightBox.onchange = onHeight;\nheightBox.value = 8;\n\nconst pieceRowsBox = document.getElementById(\"play_rows\");\n/**\n * Handler for piece rows input box change, start a new game\n */\nconst onPieceRows = () => {\n\n PIECE_ROWS = parseInt(pieceRowsBox.value);\n start_game();\n}\npieceRowsBox.onchange = onPieceRows;\npieceRowsBox.value = 3;\n\nconst aiSearchDepthBox = document.getElementById(\"ai_search_depth\");\n/**\n * Handler for AI search depth input box change, start a new game\n */\nconst onAISearchDepth = () => {\n\n SEARCH_DEPTH = parseInt(aiSearchDepthBox.value);\n game.set_search_depth(SEARCH_DEPTH);\n\n if(SEARCH_DEPTH > 4) {\n setStatus(\"This increases thinking time exponentially, be careful (probably don't go past 6)\", \"warning\");\n }\n}\naiSearchDepthBox.onchange = onAISearchDepth;\naiSearchDepthBox.value = 4;\n\nconst aiCheckBox = document.getElementById(\"ai-checkbox\");\n/**\n * Handler for height input box change, get a new universe of given size\n */\nconst onAICheck = () => {\n \n}\naiCheckBox.onchange = onAICheck;\n// aiCheckBox.checked = true;"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://draught/../pkg/draught_bg.js","webpack://draught/./index.js"],"names":["heap","Array","fill","undefined","getObject","idx","push","heap_next","length","cachedTextDecoder","TextDecoder","module","require","ignoreBOM","fatal","decode","cachegetUint8Memory0","getUint8Memory0","buffer","Uint8Array","getStringFromWasm0","ptr","len","subarray","addHeapObject","obj","debugString","val","type","description","name","isArray","debug","i","builtInMatches","exec","toString","call","className","JSON","stringify","_","Error","message","stack","WASM_VECTOR_LEN","cachedTextEncoder","TextEncoder","encodeString","encodeInto","arg","view","buf","encode","set","read","written","passStringToWasm0","malloc","realloc","mem","offset","code","charCodeAt","slice","cachegetInt32Memory0","getInt32Memory0","Int32Array","isLikeNone","x","_assertClass","instance","klass","init_wasm","handleError","f","args","apply","this","e","Object","freeze","Move","Jump","Team","Black","White","SquareState","Man","King","Empty","Occupied","Unplayable","Moveable","Allowed","UnoccupiedSrc","OccupiedDest","OutOfBounds","WrongTeamSrc","IllegalTrajectory","NoJumpablePiece","JumpingSameTeam","Board","create","prototype","__destroy_into_raw","arg0","ret","Square","__wrap","square","ptr0","BrdIdx","row","col","from","to","ptr1","from_square_occupant","Piece","ptr2","team","jumpee","from_occ","width","height","current_turn","board","piece_rows","other","Game","search_depth","new_chance","first_turn","canvas_id","canvas_width","canvas_height","len0","value","Painter","canvas","strength","state","occupant","__wbindgen_object_drop_ref","dropObject","takeObject","__wbindgen_string_new","arg1","__wbg_new_59cb74e423758ede","__wbg_stack_558ba5917b466edd","__wbg_error_4bb6c2a97407129a","console","error","__wbg_self_86b4b13392c7af56","self","arguments","__wbg_require_f5521a5b85ad2542","arg2","__wbg_crypto_b8c92eaac23d0d80","crypto","__wbg_msCrypto_9ad6677321a08dd8","msCrypto","__wbindgen_is_undefined","__wbg_getRandomValues_dd27e6b0652b3236","getRandomValues","__wbg_getRandomValues_e57c9b75ddead065","__wbg_randomFillSync_d2ba53160aec6aba","randomFillSync","__wbg_static_accessor_MODULE_452b4680e8614c81","__wbg_instanceof_Window_11e25482011fc506","Window","__wbg_document_5aff8cd83ef968f5","document","__wbg_getElementById_b180ea4ada06a837","getElementById","__wbg_error_d95afd6217cfd219","__wbg_log_9a99fb1af846153b","log","__wbg_instanceof_CanvasRenderingContext2d_779e79c4121aa91b","CanvasRenderingContext2D","__wbg_setstrokeStyle_2939ee453716e462","strokeStyle","__wbg_setfillStyle_af790b5baf4d3210","fillStyle","__wbg_setlineWidth_3e6b1837ae38d099","lineWidth","__wbg_beginPath_2378575e37027ad3","beginPath","__wbg_fill_558339447ed6ad43","__wbg_stroke_c1e0313c58997dcf","stroke","__wbg_arc_fffd87d9113dce32","arg3","arg4","arg5","arc","__wbg_fillRect_46ffc8d2cef7e298","fillRect","__wbg_strokeRect_7ea34fad8a7f0fe2","strokeRect","__wbg_instanceof_HtmlCanvasElement_fd3cbbe3906d7792","HTMLCanvasElement","__wbg_setwidth_f3c88eb520ba8d47","__wbg_setheight_5a1abba41e35c42a","__wbg_getContext_813df131fcbd6e91","getContext","__wbg_newnoargs_9fdd8f3961dd1bee","Function","__wbg_call_ba36642bd901572b","__wbg_self_bb69a836a72ec6e9","__wbg_window_3304fc4b414c9693","window","__wbg_globalThis_e0d21cabc6630763","globalThis","__wbg_global_8463719227271676","g","global","__wbg_buffer_9e184d6f785de5ed","__wbg_new_e8101319e4cf95fc","__wbg_set_e8ae7b27314e8b98","__wbg_length_2d56cb37075fcfb1","__wbg_newwithlength_a8d1dbcbe703a5c6","__wbg_subarray_901ede8318da52a6","__wbindgen_object_clone_ref","__wbindgen_debug_string","__wbindgen_throw","__wbindgen_memory","BOARD_WIDTH","BOARD_HEIGHT","PIECE_ROWS","SEARCH_DEPTH","PERFECT_CHANCE","GameState","statusAlert","teamText","nodeCountText","winningText","onclick","start_game","wonTimeout","statusTimeout","setStatus","txt","alertType","hide","clearInterval","innerText","hidden","setTimeout","current_state","game","painter","clicks","set_painter","draw","updateTeamText","updateWinningText","winning","addEventListener","event","mousepos","evt","rect","getBoundingClientRect","clientX","left","y","clientY","top","getMousePos","cell_coord","current_cell_state","set_selected","eq","make_move","aiCheckBox","checked","has_won","ai_move","last_node_count","toLocaleString","clear_selected","setInterval","checkWon","process_canvas_click","Math","floor","clientHeight","clientWidth","widthBox","onchange","parseInt","heightBox","pieceRowsBox","max","aiSearchDepthBox","set_search_depth","aiPerfectChance","set_perfect_chance"],"mappings":"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","file":"10.bootstrap.js","sourcesContent":["import * as wasm from './draught_bg.wasm';\n\nconst heap = new Array(32).fill(undefined);\n\nheap.push(undefined, null, true, false);\n\nfunction getObject(idx) { return heap[idx]; }\n\nlet heap_next = heap.length;\n\nfunction dropObject(idx) {\n if (idx < 36) return;\n heap[idx] = heap_next;\n heap_next = idx;\n}\n\nfunction takeObject(idx) {\n const ret = getObject(idx);\n dropObject(idx);\n return ret;\n}\n\nconst lTextDecoder = typeof TextDecoder === 'undefined' ? (0, module.require)('util').TextDecoder : TextDecoder;\n\nlet cachedTextDecoder = new lTextDecoder('utf-8', { ignoreBOM: true, fatal: true });\n\ncachedTextDecoder.decode();\n\nlet cachegetUint8Memory0 = null;\nfunction getUint8Memory0() {\n if (cachegetUint8Memory0 === null || cachegetUint8Memory0.buffer !== wasm.memory.buffer) {\n cachegetUint8Memory0 = new Uint8Array(wasm.memory.buffer);\n }\n return cachegetUint8Memory0;\n}\n\nfunction getStringFromWasm0(ptr, len) {\n return cachedTextDecoder.decode(getUint8Memory0().subarray(ptr, ptr + len));\n}\n\nfunction addHeapObject(obj) {\n if (heap_next === heap.length) heap.push(heap.length + 1);\n const idx = heap_next;\n heap_next = heap[idx];\n\n heap[idx] = obj;\n return idx;\n}\n\nfunction debugString(val) {\n // primitive types\n const type = typeof val;\n if (type == 'number' || type == 'boolean' || val == null) {\n return `${val}`;\n }\n if (type == 'string') {\n return `\"${val}\"`;\n }\n if (type == 'symbol') {\n const description = val.description;\n if (description == null) {\n return 'Symbol';\n } else {\n return `Symbol(${description})`;\n }\n }\n if (type == 'function') {\n const name = val.name;\n if (typeof name == 'string' && name.length > 0) {\n return `Function(${name})`;\n } else {\n return 'Function';\n }\n }\n // objects\n if (Array.isArray(val)) {\n const length = val.length;\n let debug = '[';\n if (length > 0) {\n debug += debugString(val[0]);\n }\n for(let i = 1; i < length; i++) {\n debug += ', ' + debugString(val[i]);\n }\n debug += ']';\n return debug;\n }\n // Test for built-in\n const builtInMatches = /\\[object ([^\\]]+)\\]/.exec(toString.call(val));\n let className;\n if (builtInMatches.length > 1) {\n className = builtInMatches[1];\n } else {\n // Failed to match the standard '[object ClassName]'\n return toString.call(val);\n }\n if (className == 'Object') {\n // we're a user defined class or Object\n // JSON.stringify avoids problems with cycles, and is generally much\n // easier than looping through ownProperties of `val`.\n try {\n return 'Object(' + JSON.stringify(val) + ')';\n } catch (_) {\n return 'Object';\n }\n }\n // errors\n if (val instanceof Error) {\n return `${val.name}: ${val.message}\\n${val.stack}`;\n }\n // TODO we could test for more things here, like `Set`s and `Map`s.\n return className;\n}\n\nlet WASM_VECTOR_LEN = 0;\n\nconst lTextEncoder = typeof TextEncoder === 'undefined' ? (0, module.require)('util').TextEncoder : TextEncoder;\n\nlet cachedTextEncoder = new lTextEncoder('utf-8');\n\nconst encodeString = (typeof cachedTextEncoder.encodeInto === 'function'\n ? function (arg, view) {\n return cachedTextEncoder.encodeInto(arg, view);\n}\n : function (arg, view) {\n const buf = cachedTextEncoder.encode(arg);\n view.set(buf);\n return {\n read: arg.length,\n written: buf.length\n };\n});\n\nfunction passStringToWasm0(arg, malloc, realloc) {\n\n if (realloc === undefined) {\n const buf = cachedTextEncoder.encode(arg);\n const ptr = malloc(buf.length);\n getUint8Memory0().subarray(ptr, ptr + buf.length).set(buf);\n WASM_VECTOR_LEN = buf.length;\n return ptr;\n }\n\n let len = arg.length;\n let ptr = malloc(len);\n\n const mem = getUint8Memory0();\n\n let offset = 0;\n\n for (; offset < len; offset++) {\n const code = arg.charCodeAt(offset);\n if (code > 0x7F) break;\n mem[ptr + offset] = code;\n }\n\n if (offset !== len) {\n if (offset !== 0) {\n arg = arg.slice(offset);\n }\n ptr = realloc(ptr, len, len = offset + arg.length * 3);\n const view = getUint8Memory0().subarray(ptr + offset, ptr + len);\n const ret = encodeString(arg, view);\n\n offset += ret.written;\n }\n\n WASM_VECTOR_LEN = offset;\n return ptr;\n}\n\nlet cachegetInt32Memory0 = null;\nfunction getInt32Memory0() {\n if (cachegetInt32Memory0 === null || cachegetInt32Memory0.buffer !== wasm.memory.buffer) {\n cachegetInt32Memory0 = new Int32Array(wasm.memory.buffer);\n }\n return cachegetInt32Memory0;\n}\n\nfunction isLikeNone(x) {\n return x === undefined || x === null;\n}\n\nfunction _assertClass(instance, klass) {\n if (!(instance instanceof klass)) {\n throw new Error(`expected instance of ${klass.name}`);\n }\n return instance.ptr;\n}\n/**\n*/\nexport function init_wasm() {\n wasm.init_wasm();\n}\n\nfunction handleError(f, args) {\n try {\n return f.apply(this, args);\n } catch (e) {\n wasm.__wbindgen_exn_store(addHeapObject(e));\n }\n}\n\nfunction getArrayU8FromWasm0(ptr, len) {\n return getUint8Memory0().subarray(ptr / 1, ptr / 1 + len);\n}\n/**\n* Move/Jump, for use in Move\n*/\nexport const MoveType = Object.freeze({ Move:0,\"0\":\"Move\",Jump:1,\"1\":\"Jump\", });\n/**\n* Black/White\n*/\nexport const Team = Object.freeze({ Black:0,\"0\":\"Black\",White:1,\"1\":\"White\", });\n/**\n* Man/King\n*/\nexport const Strength = Object.freeze({ Man:0,\"0\":\"Man\",King:1,\"1\":\"King\", });\n/**\n* Model board square as Empty/Occupied/Unplayable\n*/\nexport const SquareState = Object.freeze({ Empty:0,\"0\":\"Empty\",Occupied:1,\"1\":\"Occupied\",Unplayable:2,\"2\":\"Unplayable\", });\n/**\n* Possible outcomes of trying to move\n*/\nexport const Moveable = Object.freeze({ Allowed:0,\"0\":\"Allowed\",UnoccupiedSrc:1,\"1\":\"UnoccupiedSrc\",OccupiedDest:2,\"2\":\"OccupiedDest\",OutOfBounds:3,\"3\":\"OutOfBounds\",Unplayable:4,\"4\":\"Unplayable\",WrongTeamSrc:5,\"5\":\"WrongTeamSrc\",IllegalTrajectory:6,\"6\":\"IllegalTrajectory\",NoJumpablePiece:7,\"7\":\"NoJumpablePiece\",JumpingSameTeam:8,\"8\":\"JumpingSameTeam\", });\n/**\n* Single state of a checkers board\n*/\nexport class Board {\n\n static __wrap(ptr) {\n const obj = Object.create(Board.prototype);\n obj.ptr = ptr;\n\n return obj;\n }\n\n __destroy_into_raw() {\n const ptr = this.ptr;\n this.ptr = 0;\n\n return ptr;\n }\n\n free() {\n const ptr = this.__destroy_into_raw();\n wasm.__wbg_board_free(ptr);\n }\n /**\n * @returns {number}\n */\n get width() {\n var ret = wasm.__wbg_get_board_width(this.ptr);\n return ret >>> 0;\n }\n /**\n * @param {number} arg0\n */\n set width(arg0) {\n wasm.__wbg_set_board_width(this.ptr, arg0);\n }\n /**\n * @returns {number}\n */\n get height() {\n var ret = wasm.__wbg_get_board_height(this.ptr);\n return ret >>> 0;\n }\n /**\n * @param {number} arg0\n */\n set height(arg0) {\n wasm.__wbg_set_board_height(this.ptr, arg0);\n }\n /**\n * @returns {number}\n */\n get current_turn() {\n var ret = wasm.__wbg_get_board_current_turn(this.ptr);\n return ret >>> 0;\n }\n /**\n * @param {number} arg0\n */\n set current_turn(arg0) {\n wasm.__wbg_set_board_current_turn(this.ptr, arg0);\n }\n /**\n * Get a copy of a board square by 1D array index\n * @param {number} idx\n * @returns {Square}\n */\n cell(idx) {\n var ret = wasm.board_cell(this.ptr, idx);\n return Square.__wrap(ret);\n }\n /**\n * Get a copy of a board square by 1D array index\n * @param {number} idx\n * @param {Square} square\n */\n set_cell(idx, square) {\n _assertClass(square, Square);\n var ptr0 = square.ptr;\n square.ptr = 0;\n wasm.board_set_cell(this.ptr, idx, ptr0);\n }\n /**\n * Get a copy of a board square by 2D [`BrdIdx`] index\n * @param {BrdIdx} idx\n * @returns {Square}\n */\n grid_cell(idx) {\n _assertClass(idx, BrdIdx);\n var ptr0 = idx.ptr;\n idx.ptr = 0;\n var ret = wasm.board_grid_cell(this.ptr, ptr0);\n return Square.__wrap(ret);\n }\n /**\n * Transform a 2D row/column board index into a single 1D index for use with [`Board::cells`]\n * @param {number} row\n * @param {number} col\n * @returns {number}\n */\n cell_index(row, col) {\n var ret = wasm.board_cell_index(this.ptr, row, col);\n return ret >>> 0;\n }\n /**\n * Similar to [`Board::cell_index`] but with a [`BrdIdx`] instead of separate indices. Transform a 2D row/column board index into a single 1D index for use with [`Board::cells`]\n * @param {BrdIdx} idx\n * @returns {number}\n */\n cell_idx(idx) {\n _assertClass(idx, BrdIdx);\n var ptr0 = idx.ptr;\n idx.ptr = 0;\n var ret = wasm.board_cell_idx(this.ptr, ptr0);\n return ret >>> 0;\n }\n /**\n * Transform a 1D array index (for [`Board::cells`]) into a 2D game board index (by row/col)\n * @param {number} idx\n * @returns {BrdIdx}\n */\n board_index(idx) {\n var ret = wasm.board_board_index(this.ptr, idx);\n return BrdIdx.__wrap(ret);\n }\n /**\n * Check whether a move given by source and destination indices is legal\n * @param {BrdIdx} from\n * @param {BrdIdx} to\n * @returns {number}\n */\n can_move(from, to) {\n _assertClass(from, BrdIdx);\n var ptr0 = from.ptr;\n from.ptr = 0;\n _assertClass(to, BrdIdx);\n var ptr1 = to.ptr;\n to.ptr = 0;\n var ret = wasm.board_can_move(this.ptr, ptr0, ptr1);\n return ret >>> 0;\n }\n /**\n * Check that given move trajectory is valid for a man piece\n * @param {BrdIdx} from\n * @param {BrdIdx} to\n * @param {Piece} from_square_occupant\n * @returns {number}\n */\n validate_man_move(from, to, from_square_occupant) {\n _assertClass(from, BrdIdx);\n var ptr0 = from.ptr;\n from.ptr = 0;\n _assertClass(to, BrdIdx);\n var ptr1 = to.ptr;\n to.ptr = 0;\n _assertClass(from_square_occupant, Piece);\n var ptr2 = from_square_occupant.ptr;\n from_square_occupant.ptr = 0;\n var ret = wasm.board_validate_man_move(this.ptr, ptr0, ptr1, ptr2);\n return ret >>> 0;\n }\n /**\n * Check that given move trajectory is valid for a king piece\n * @param {BrdIdx} from\n * @param {BrdIdx} to\n * @param {Piece} from_square_occupant\n * @returns {number}\n */\n validate_king_move(from, to, from_square_occupant) {\n _assertClass(from, BrdIdx);\n var ptr0 = from.ptr;\n from.ptr = 0;\n _assertClass(to, BrdIdx);\n var ptr1 = to.ptr;\n to.ptr = 0;\n _assertClass(from_square_occupant, Piece);\n var ptr2 = from_square_occupant.ptr;\n from_square_occupant.ptr = 0;\n var ret = wasm.board_validate_king_move(this.ptr, ptr0, ptr1, ptr2);\n return ret >>> 0;\n }\n /**\n * Get cell index of jumpee square given from and to locations\n * @param {BrdIdx} from\n * @param {BrdIdx} to\n * @returns {number}\n */\n jumpee_idx(from, to) {\n _assertClass(from, BrdIdx);\n var ptr0 = from.ptr;\n from.ptr = 0;\n _assertClass(to, BrdIdx);\n var ptr1 = to.ptr;\n to.ptr = 0;\n var ret = wasm.board_jumpee_idx(this.ptr, ptr0, ptr1);\n return ret >>> 0;\n }\n /**\n * Get a pointer to the backing array of board squares, [`Board::cells`]\n * @returns {number}\n */\n cells() {\n var ret = wasm.board_cells(this.ptr);\n return ret;\n }\n /**\n * Get the number of board squares\n * @returns {number}\n */\n num_cells() {\n var ret = wasm.board_num_cells(this.ptr);\n return ret >>> 0;\n }\n /**\n * Get the number of remaining pieces\n * @returns {number}\n */\n num_pieces() {\n var ret = wasm.board_num_pieces(this.ptr);\n return ret >>> 0;\n }\n /**\n * Get the number of remaining pieces for a player\n * @param {number} team\n * @returns {number}\n */\n num_player(team) {\n var ret = wasm.board_num_player(this.ptr, team);\n return ret >>> 0;\n }\n /**\n * Get the score value, Black - White pieces\n * @returns {number}\n */\n score() {\n var ret = wasm.board_score(this.ptr);\n return ret;\n }\n /**\n * Get the state of a board square by 1D array index\n * @param {number} idx\n * @returns {number}\n */\n cell_state(idx) {\n var ret = wasm.board_cell_state(this.ptr, idx);\n return ret >>> 0;\n }\n /**\n * Get new board derived from current with given move applied\n * @param {BrdIdx} from\n * @param {BrdIdx} to\n * @returns {Board}\n */\n apply_move(from, to) {\n _assertClass(from, BrdIdx);\n var ptr0 = from.ptr;\n from.ptr = 0;\n _assertClass(to, BrdIdx);\n var ptr1 = to.ptr;\n to.ptr = 0;\n var ret = wasm.board_apply_move(this.ptr, ptr0, ptr1);\n return Board.__wrap(ret);\n }\n /**\n * Get new board derived from current with given jump applied\n * @param {BrdIdx} from\n * @param {BrdIdx} to\n * @returns {Board}\n */\n apply_jump(from, to) {\n _assertClass(from, BrdIdx);\n var ptr0 = from.ptr;\n from.ptr = 0;\n _assertClass(to, BrdIdx);\n var ptr1 = to.ptr;\n to.ptr = 0;\n var ret = wasm.board_apply_jump(this.ptr, ptr0, ptr1);\n return Board.__wrap(ret);\n }\n /**\n * Get row index for current team, top row for black, bottom row for white\n * @returns {number}\n */\n king_row_idx() {\n var ret = wasm.board_king_row_idx(this.ptr);\n return ret >>> 0;\n }\n /**\n * Unwrap the jumpee piece from the square and [`Board::check_jumpee_team`] with [`Moveable`] response\n * @param {Square} jumpee\n * @param {Piece} from_occ\n * @returns {number}\n */\n static validate_jumpee(jumpee, from_occ) {\n _assertClass(jumpee, Square);\n var ptr0 = jumpee.ptr;\n jumpee.ptr = 0;\n _assertClass(from_occ, Piece);\n var ptr1 = from_occ.ptr;\n from_occ.ptr = 0;\n var ret = wasm.board_validate_jumpee(ptr0, ptr1);\n return ret >>> 0;\n }\n /**\n * Check that the source piece and the jumpee are of opposing teams\n * @param {Piece} from\n * @param {Piece} jumpee\n * @returns {boolean}\n */\n static check_jumpee_team(from, jumpee) {\n _assertClass(from, Piece);\n var ptr0 = from.ptr;\n from.ptr = 0;\n _assertClass(jumpee, Piece);\n var ptr1 = jumpee.ptr;\n jumpee.ptr = 0;\n var ret = wasm.board_check_jumpee_team(ptr0, ptr1);\n return ret !== 0;\n }\n /**\n * Initialise a game board without game pieces\n * @param {number} width\n * @param {number} height\n * @param {number} current_turn\n */\n constructor(width, height, current_turn) {\n var ret = wasm.board_new(width, height, current_turn);\n return Board.__wrap(ret);\n }\n /**\n * Reset the given board to a starting layout with 3 rows of opposing pieces\n * @param {Board} board\n * @param {number} piece_rows\n * @returns {Board}\n */\n static init_game(board, piece_rows) {\n _assertClass(board, Board);\n var ptr0 = board.ptr;\n board.ptr = 0;\n var ret = wasm.board_init_game(ptr0, piece_rows);\n return Board.__wrap(ret);\n }\n}\n/**\n* Rank 2 tensor index to identify a board square by row and column\n*/\nexport class BrdIdx {\n\n static __wrap(ptr) {\n const obj = Object.create(BrdIdx.prototype);\n obj.ptr = ptr;\n\n return obj;\n }\n\n __destroy_into_raw() {\n const ptr = this.ptr;\n this.ptr = 0;\n\n return ptr;\n }\n\n free() {\n const ptr = this.__destroy_into_raw();\n wasm.__wbg_brdidx_free(ptr);\n }\n /**\n * @returns {number}\n */\n get row() {\n var ret = wasm.__wbg_get_brdidx_row(this.ptr);\n return ret >>> 0;\n }\n /**\n * @param {number} arg0\n */\n set row(arg0) {\n wasm.__wbg_set_brdidx_row(this.ptr, arg0);\n }\n /**\n * @returns {number}\n */\n get col() {\n var ret = wasm.__wbg_get_brdidx_col(this.ptr);\n return ret >>> 0;\n }\n /**\n * @param {number} arg0\n */\n set col(arg0) {\n wasm.__wbg_set_brdidx_col(this.ptr, arg0);\n }\n /**\n * @param {number} row\n * @param {number} col\n */\n constructor(row, col) {\n var ret = wasm.brdidx_from(row, col);\n return BrdIdx.__wrap(ret);\n }\n /**\n * @param {BrdIdx} other\n * @returns {boolean}\n */\n eq(other) {\n _assertClass(other, BrdIdx);\n var ret = wasm.brdidx_eq(this.ptr, other.ptr);\n return ret !== 0;\n }\n}\n/**\n* Root-level structure for managing the game as a collection of board states\n*/\nexport class Game {\n\n static __wrap(ptr) {\n const obj = Object.create(Game.prototype);\n obj.ptr = ptr;\n\n return obj;\n }\n\n __destroy_into_raw() {\n const ptr = this.ptr;\n this.ptr = 0;\n\n return ptr;\n }\n\n free() {\n const ptr = this.__destroy_into_raw();\n wasm.__wbg_game_free(ptr);\n }\n /**\n * @returns {number}\n */\n get last_node_count() {\n var ret = wasm.__wbg_get_game_last_node_count(this.ptr);\n return ret >>> 0;\n }\n /**\n * @param {number} arg0\n */\n set last_node_count(arg0) {\n wasm.__wbg_set_game_last_node_count(this.ptr, arg0);\n }\n /**\n * @returns {number}\n */\n get perfect_chance() {\n var ret = wasm.__wbg_get_game_perfect_chance(this.ptr);\n return ret;\n }\n /**\n * @param {number} arg0\n */\n set perfect_chance(arg0) {\n wasm.__wbg_set_game_perfect_chance(this.ptr, arg0);\n }\n /**\n * Get pointer to current board's squares\n * @returns {number}\n */\n current_board_cells() {\n var ret = wasm.game_current_board_cells(this.ptr);\n return ret;\n }\n /**\n * Get pointer to current board's squares\n * @returns {number}\n */\n current_board_len() {\n var ret = wasm.game_current_board_len(this.ptr);\n return ret >>> 0;\n }\n /**\n * Current turn's team\n * @returns {number}\n */\n current_turn() {\n var ret = wasm.game_current_turn(this.ptr);\n return ret >>> 0;\n }\n /**\n * Current board's score\n * @returns {number}\n */\n score() {\n var ret = wasm.game_score(this.ptr);\n return ret;\n }\n /**\n * Get currently winning player\n * @returns {number | undefined}\n */\n winning() {\n var ret = wasm.game_winning(this.ptr);\n return ret === 2 ? undefined : ret;\n }\n /**\n * Check if a player has won\n * @returns {number | undefined}\n */\n has_won() {\n var ret = wasm.game_has_won(this.ptr);\n return ret === 2 ? undefined : ret;\n }\n /**\n * Get square on current board for given index\n * @param {BrdIdx} idx\n * @returns {Square}\n */\n current_cell_state(idx) {\n _assertClass(idx, BrdIdx);\n var ret = wasm.game_current_cell_state(this.ptr, idx.ptr);\n return Square.__wrap(ret);\n }\n /**\n * Set tree depth for AI to search to\n * @param {number} search_depth\n */\n set_search_depth(search_depth) {\n wasm.game_set_search_depth(this.ptr, search_depth);\n }\n /**\n * Set given index as selected piece\n * TODO: Check whether valid square?\n * @param {BrdIdx} idx\n */\n set_selected(idx) {\n _assertClass(idx, BrdIdx);\n wasm.game_set_selected(this.ptr, idx.ptr);\n }\n /**\n * Set proportion of perfect moves from AI\n * @param {number} new_chance\n */\n set_perfect_chance(new_chance) {\n wasm.game_set_perfect_chance(this.ptr, new_chance);\n }\n /**\n * Clear currently selected piece\n */\n clear_selected() {\n wasm.game_clear_selected(this.ptr);\n }\n /**\n * Attempt to make a move given a source and destination index\n * @param {BrdIdx} from\n * @param {BrdIdx} to\n * @returns {number}\n */\n make_move(from, to) {\n _assertClass(from, BrdIdx);\n var ptr0 = from.ptr;\n from.ptr = 0;\n _assertClass(to, BrdIdx);\n var ptr1 = to.ptr;\n to.ptr = 0;\n var ret = wasm.game_make_move(this.ptr, ptr0, ptr1);\n return ret >>> 0;\n }\n /**\n * Update board state with given move and push new board into current state\n * @param {BrdIdx} from\n * @param {BrdIdx} to\n */\n execute_move(from, to) {\n _assertClass(from, BrdIdx);\n var ptr0 = from.ptr;\n from.ptr = 0;\n _assertClass(to, BrdIdx);\n var ptr1 = to.ptr;\n to.ptr = 0;\n wasm.game_execute_move(this.ptr, ptr0, ptr1);\n }\n /**\n * Update board state with given jump move and push new board into current state\n * @param {BrdIdx} from\n * @param {BrdIdx} to\n */\n execute_jump(from, to) {\n _assertClass(from, BrdIdx);\n var ptr0 = from.ptr;\n from.ptr = 0;\n _assertClass(to, BrdIdx);\n var ptr1 = to.ptr;\n to.ptr = 0;\n wasm.game_execute_jump(this.ptr, ptr0, ptr1);\n }\n /**\n * Push current board into the previous turns and set given board to current\n * @param {Board} board\n */\n push_new_board(board) {\n _assertClass(board, Board);\n var ptr0 = board.ptr;\n board.ptr = 0;\n wasm.game_push_new_board(this.ptr, ptr0);\n }\n /**\n * Set current board to given\n * @param {Board} board\n */\n set_current(board) {\n _assertClass(board, Board);\n var ptr0 = board.ptr;\n board.ptr = 0;\n wasm.game_set_current(this.ptr, ptr0);\n }\n /**\n * Get new game without board renderer\n * @param {number} width\n * @param {number} height\n * @param {number} piece_rows\n * @param {number} first_turn\n * @param {number} search_depth\n */\n constructor(width, height, piece_rows, first_turn, search_depth) {\n var ret = wasm.game_new(width, height, piece_rows, first_turn, search_depth);\n return Game.__wrap(ret);\n }\n /**\n * Get a new game with canvas ID and dimensions\n * @param {number} width\n * @param {number} height\n * @param {number} piece_rows\n * @param {number} first_turn\n * @param {number} search_depth\n * @param {string} canvas_id\n * @param {number} canvas_width\n * @param {number} canvas_height\n * @returns {Game}\n */\n static new_with_canvas(width, height, piece_rows, first_turn, search_depth, canvas_id, canvas_width, canvas_height) {\n var ptr0 = passStringToWasm0(canvas_id, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n var len0 = WASM_VECTOR_LEN;\n var ret = wasm.game_new_with_canvas(width, height, piece_rows, first_turn, search_depth, ptr0, len0, canvas_width, canvas_height);\n return Game.__wrap(ret);\n }\n /**\n * Set painter for rendering boards\n * @param {Painter} value\n */\n set_painter(value) {\n _assertClass(value, Painter);\n var ptr0 = value.ptr;\n value.ptr = 0;\n wasm.game_set_painter(this.ptr, ptr0);\n }\n /**\n * Draw current board using painter if exists\n */\n draw() {\n wasm.game_draw(this.ptr);\n }\n /**\n * Create computer, get move from current board and update current board\n */\n ai_move() {\n wasm.game_ai_move(this.ptr);\n }\n}\n/**\n* Used to paint boards onto HTML canvases\n*/\nexport class Painter {\n\n static __wrap(ptr) {\n const obj = Object.create(Painter.prototype);\n obj.ptr = ptr;\n\n return obj;\n }\n\n __destroy_into_raw() {\n const ptr = this.ptr;\n this.ptr = 0;\n\n return ptr;\n }\n\n free() {\n const ptr = this.__destroy_into_raw();\n wasm.__wbg_painter_free(ptr);\n }\n /**\n * Default constructor which queries for canvas by ID\n * @param {number} width\n * @param {number} height\n * @param {string} canvas_id\n */\n constructor(width, height, canvas_id) {\n var ptr0 = passStringToWasm0(canvas_id, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n var len0 = WASM_VECTOR_LEN;\n var ret = wasm.painter_new(width, height, ptr0, len0);\n return Painter.__wrap(ret);\n }\n /**\n * Constructor with given canvas element\n * @param {number} width\n * @param {number} height\n * @param {HTMLCanvasElement} canvas\n * @returns {Painter}\n */\n static new_with_canvas(width, height, canvas) {\n var ret = wasm.painter_new_with_canvas(width, height, addHeapObject(canvas));\n return Painter.__wrap(ret);\n }\n /**\n * Set new square outline colour value\n * @param {any} value\n */\n set_square_outline(value) {\n wasm.painter_set_square_outline(this.ptr, addHeapObject(value));\n }\n /**\n * Set new line width for outlining squares\n * @param {number} value\n */\n set_outline_width(value) {\n wasm.painter_set_outline_width(this.ptr, value);\n }\n /**\n * Set whether squares are outlined\n * @param {boolean} value\n */\n set_draw_outline(value) {\n wasm.painter_set_draw_outline(this.ptr, value);\n }\n /**\n * Reset the canvas dimensions to the given width and height\n */\n reset_dimensions() {\n wasm.painter_reset_dimensions(this.ptr);\n }\n /**\n * Check whether given canvas dimensions divide evenly by given board dimenions\n * @param {Board} board\n * @returns {boolean}\n */\n validate_board_dim(board) {\n _assertClass(board, Board);\n var ret = wasm.painter_validate_board_dim(this.ptr, board.ptr);\n return ret !== 0;\n }\n /**\n * Draw a board onto the canvas\n * @param {Board} board\n */\n draw(board) {\n _assertClass(board, Board);\n wasm.painter_draw(this.ptr, board.ptr);\n }\n}\n/**\n* Game piece given by its team and strength (normal or kinged)\n*/\nexport class Piece {\n\n static __wrap(ptr) {\n const obj = Object.create(Piece.prototype);\n obj.ptr = ptr;\n\n return obj;\n }\n\n __destroy_into_raw() {\n const ptr = this.ptr;\n this.ptr = 0;\n\n return ptr;\n }\n\n free() {\n const ptr = this.__destroy_into_raw();\n wasm.__wbg_piece_free(ptr);\n }\n /**\n * @returns {number}\n */\n get team() {\n var ret = wasm.__wbg_get_piece_team(this.ptr);\n return ret >>> 0;\n }\n /**\n * @param {number} arg0\n */\n set team(arg0) {\n wasm.__wbg_set_piece_team(this.ptr, arg0);\n }\n /**\n * @returns {number}\n */\n get strength() {\n var ret = wasm.__wbg_get_piece_strength(this.ptr);\n return ret >>> 0;\n }\n /**\n * @param {number} arg0\n */\n set strength(arg0) {\n wasm.__wbg_set_piece_strength(this.ptr, arg0);\n }\n /**\n * @param {number} team\n * @param {number} strength\n */\n constructor(team, strength) {\n var ret = wasm.piece_new(team, strength);\n return Piece.__wrap(ret);\n }\n}\n/**\n* Board squares given by a state and a possible occupying game piece\n*/\nexport class Square {\n\n static __wrap(ptr) {\n const obj = Object.create(Square.prototype);\n obj.ptr = ptr;\n\n return obj;\n }\n\n __destroy_into_raw() {\n const ptr = this.ptr;\n this.ptr = 0;\n\n return ptr;\n }\n\n free() {\n const ptr = this.__destroy_into_raw();\n wasm.__wbg_square_free(ptr);\n }\n /**\n * Game piece if square is occupied\n * @returns {Piece | undefined}\n */\n get occupant() {\n var ret = wasm.__wbg_get_square_occupant(this.ptr);\n return ret === 0 ? undefined : Piece.__wrap(ret);\n }\n /**\n * Game piece if square is occupied\n * @param {Piece | undefined} arg0\n */\n set occupant(arg0) {\n let ptr0 = 0;\n if (!isLikeNone(arg0)) {\n _assertClass(arg0, Piece);\n ptr0 = arg0.ptr;\n arg0.ptr = 0;\n }\n wasm.__wbg_set_square_occupant(this.ptr, ptr0);\n }\n /**\n * Description of whether the square is occupied or an unplayable, i.e. off-lattice square\n * @returns {number}\n */\n get state() {\n var ret = wasm.__wbg_get_square_state(this.ptr);\n return ret >>> 0;\n }\n /**\n * Description of whether the square is occupied or an unplayable, i.e. off-lattice square\n * @param {number} arg0\n */\n set state(arg0) {\n wasm.__wbg_set_square_state(this.ptr, arg0);\n }\n /**\n * Standard constructor function to form square from state and occupant\n * @param {number} state\n * @param {Piece | undefined} occupant\n */\n constructor(state, occupant) {\n let ptr0 = 0;\n if (!isLikeNone(occupant)) {\n _assertClass(occupant, Piece);\n ptr0 = occupant.ptr;\n occupant.ptr = 0;\n }\n var ret = wasm.square_new(state, ptr0);\n return Square.__wrap(ret);\n }\n /**\n * Helper function for a well-formed piece square by team and strength\n * @param {number} team\n * @param {number} strength\n * @returns {Square}\n */\n static pc(team, strength) {\n var ret = wasm.square_pc(team, strength);\n return Square.__wrap(ret);\n }\n /**\n * Helper function for a well-formed empty square\n * @returns {Square}\n */\n static empty() {\n var ret = wasm.square_empty();\n return Square.__wrap(ret);\n }\n /**\n * Helper function for a well-formed unplayable square\n * @returns {Square}\n */\n static unplay() {\n var ret = wasm.square_unplay();\n return Square.__wrap(ret);\n }\n}\n\nexport function __wbindgen_object_drop_ref(arg0) {\n takeObject(arg0);\n};\n\nexport function __wbindgen_string_new(arg0, arg1) {\n var ret = getStringFromWasm0(arg0, arg1);\n return addHeapObject(ret);\n};\n\nexport function __wbg_new_59cb74e423758ede() {\n var ret = new Error();\n return addHeapObject(ret);\n};\n\nexport function __wbg_stack_558ba5917b466edd(arg0, arg1) {\n var ret = getObject(arg1).stack;\n var ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n var len0 = WASM_VECTOR_LEN;\n getInt32Memory0()[arg0 / 4 + 1] = len0;\n getInt32Memory0()[arg0 / 4 + 0] = ptr0;\n};\n\nexport function __wbg_error_4bb6c2a97407129a(arg0, arg1) {\n try {\n console.error(getStringFromWasm0(arg0, arg1));\n } finally {\n wasm.__wbindgen_free(arg0, arg1);\n }\n};\n\nexport function __wbg_self_86b4b13392c7af56() { return handleError(function () {\n var ret = self.self;\n return addHeapObject(ret);\n}, arguments) };\n\nexport function __wbg_require_f5521a5b85ad2542(arg0, arg1, arg2) {\n var ret = getObject(arg0).require(getStringFromWasm0(arg1, arg2));\n return addHeapObject(ret);\n};\n\nexport function __wbg_crypto_b8c92eaac23d0d80(arg0) {\n var ret = getObject(arg0).crypto;\n return addHeapObject(ret);\n};\n\nexport function __wbg_msCrypto_9ad6677321a08dd8(arg0) {\n var ret = getObject(arg0).msCrypto;\n return addHeapObject(ret);\n};\n\nexport function __wbindgen_is_undefined(arg0) {\n var ret = getObject(arg0) === undefined;\n return ret;\n};\n\nexport function __wbg_getRandomValues_dd27e6b0652b3236(arg0) {\n var ret = getObject(arg0).getRandomValues;\n return addHeapObject(ret);\n};\n\nexport function __wbg_getRandomValues_e57c9b75ddead065(arg0, arg1) {\n getObject(arg0).getRandomValues(getObject(arg1));\n};\n\nexport function __wbg_randomFillSync_d2ba53160aec6aba(arg0, arg1, arg2) {\n getObject(arg0).randomFillSync(getArrayU8FromWasm0(arg1, arg2));\n};\n\nexport function __wbg_static_accessor_MODULE_452b4680e8614c81() {\n var ret = module;\n return addHeapObject(ret);\n};\n\nexport function __wbg_instanceof_Window_11e25482011fc506(arg0) {\n var ret = getObject(arg0) instanceof Window;\n return ret;\n};\n\nexport function __wbg_document_5aff8cd83ef968f5(arg0) {\n var ret = getObject(arg0).document;\n return isLikeNone(ret) ? 0 : addHeapObject(ret);\n};\n\nexport function __wbg_getElementById_b180ea4ada06a837(arg0, arg1, arg2) {\n var ret = getObject(arg0).getElementById(getStringFromWasm0(arg1, arg2));\n return isLikeNone(ret) ? 0 : addHeapObject(ret);\n};\n\nexport function __wbg_error_d95afd6217cfd219(arg0) {\n console.error(getObject(arg0));\n};\n\nexport function __wbg_log_9a99fb1af846153b(arg0) {\n console.log(getObject(arg0));\n};\n\nexport function __wbg_instanceof_CanvasRenderingContext2d_779e79c4121aa91b(arg0) {\n var ret = getObject(arg0) instanceof CanvasRenderingContext2D;\n return ret;\n};\n\nexport function __wbg_setstrokeStyle_2939ee453716e462(arg0, arg1) {\n getObject(arg0).strokeStyle = getObject(arg1);\n};\n\nexport function __wbg_setfillStyle_af790b5baf4d3210(arg0, arg1) {\n getObject(arg0).fillStyle = getObject(arg1);\n};\n\nexport function __wbg_setlineWidth_3e6b1837ae38d099(arg0, arg1) {\n getObject(arg0).lineWidth = arg1;\n};\n\nexport function __wbg_beginPath_2378575e37027ad3(arg0) {\n getObject(arg0).beginPath();\n};\n\nexport function __wbg_fill_558339447ed6ad43(arg0) {\n getObject(arg0).fill();\n};\n\nexport function __wbg_stroke_c1e0313c58997dcf(arg0) {\n getObject(arg0).stroke();\n};\n\nexport function __wbg_arc_fffd87d9113dce32() { return handleError(function (arg0, arg1, arg2, arg3, arg4, arg5) {\n getObject(arg0).arc(arg1, arg2, arg3, arg4, arg5);\n}, arguments) };\n\nexport function __wbg_fillRect_46ffc8d2cef7e298(arg0, arg1, arg2, arg3, arg4) {\n getObject(arg0).fillRect(arg1, arg2, arg3, arg4);\n};\n\nexport function __wbg_strokeRect_7ea34fad8a7f0fe2(arg0, arg1, arg2, arg3, arg4) {\n getObject(arg0).strokeRect(arg1, arg2, arg3, arg4);\n};\n\nexport function __wbg_instanceof_HtmlCanvasElement_fd3cbbe3906d7792(arg0) {\n var ret = getObject(arg0) instanceof HTMLCanvasElement;\n return ret;\n};\n\nexport function __wbg_setwidth_f3c88eb520ba8d47(arg0, arg1) {\n getObject(arg0).width = arg1 >>> 0;\n};\n\nexport function __wbg_setheight_5a1abba41e35c42a(arg0, arg1) {\n getObject(arg0).height = arg1 >>> 0;\n};\n\nexport function __wbg_getContext_813df131fcbd6e91() { return handleError(function (arg0, arg1, arg2) {\n var ret = getObject(arg0).getContext(getStringFromWasm0(arg1, arg2));\n return isLikeNone(ret) ? 0 : addHeapObject(ret);\n}, arguments) };\n\nexport function __wbg_newnoargs_9fdd8f3961dd1bee(arg0, arg1) {\n var ret = new Function(getStringFromWasm0(arg0, arg1));\n return addHeapObject(ret);\n};\n\nexport function __wbg_call_ba36642bd901572b() { return handleError(function (arg0, arg1) {\n var ret = getObject(arg0).call(getObject(arg1));\n return addHeapObject(ret);\n}, arguments) };\n\nexport function __wbg_self_bb69a836a72ec6e9() { return handleError(function () {\n var ret = self.self;\n return addHeapObject(ret);\n}, arguments) };\n\nexport function __wbg_window_3304fc4b414c9693() { return handleError(function () {\n var ret = window.window;\n return addHeapObject(ret);\n}, arguments) };\n\nexport function __wbg_globalThis_e0d21cabc6630763() { return handleError(function () {\n var ret = globalThis.globalThis;\n return addHeapObject(ret);\n}, arguments) };\n\nexport function __wbg_global_8463719227271676() { return handleError(function () {\n var ret = global.global;\n return addHeapObject(ret);\n}, arguments) };\n\nexport function __wbg_buffer_9e184d6f785de5ed(arg0) {\n var ret = getObject(arg0).buffer;\n return addHeapObject(ret);\n};\n\nexport function __wbg_new_e8101319e4cf95fc(arg0) {\n var ret = new Uint8Array(getObject(arg0));\n return addHeapObject(ret);\n};\n\nexport function __wbg_set_e8ae7b27314e8b98(arg0, arg1, arg2) {\n getObject(arg0).set(getObject(arg1), arg2 >>> 0);\n};\n\nexport function __wbg_length_2d56cb37075fcfb1(arg0) {\n var ret = getObject(arg0).length;\n return ret;\n};\n\nexport function __wbg_newwithlength_a8d1dbcbe703a5c6(arg0) {\n var ret = new Uint8Array(arg0 >>> 0);\n return addHeapObject(ret);\n};\n\nexport function __wbg_subarray_901ede8318da52a6(arg0, arg1, arg2) {\n var ret = getObject(arg0).subarray(arg1 >>> 0, arg2 >>> 0);\n return addHeapObject(ret);\n};\n\nexport function __wbindgen_object_clone_ref(arg0) {\n var ret = getObject(arg0);\n return addHeapObject(ret);\n};\n\nexport function __wbindgen_debug_string(arg0, arg1) {\n var ret = debugString(getObject(arg1));\n var ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n var len0 = WASM_VECTOR_LEN;\n getInt32Memory0()[arg0 / 4 + 1] = len0;\n getInt32Memory0()[arg0 / 4 + 0] = ptr0;\n};\n\nexport function __wbindgen_throw(arg0, arg1) {\n throw new Error(getStringFromWasm0(arg0, arg1));\n};\n\nexport function __wbindgen_memory() {\n var ret = wasm.memory;\n return addHeapObject(ret);\n};\n\n","import { Game, Board, BrdIdx, Painter, Team, init_wasm, Moveable, SquareState, Square } from \"draught\";\n// import { memory } from \"draught/draught_bg.wasm\";\n\n///////////////////\n// CONSTS\n///////////////////\n\nconst CANVAS_WIDTH = 720;\nconst CANVAS_HEIGHT = 720;\n\nvar BOARD_WIDTH = 8;\nvar BOARD_HEIGHT = 8;\n\nvar PIECE_ROWS = 3;\nvar SEARCH_DEPTH = 4;\nvar PERFECT_CHANCE = 0.5;\n\nconst STATUS_TIMEOUT = 3000;\nconst WON_TIMEOUT = 3000;\n\nconst GameState = {\n HUMAN_TURN: {\n THINKING: \"human_turn.thinking\",\n FROM_SELECTED: \"human_turn.from_selected\"\n },\n AI_TURN: \"ai_turn\"\n}\n\n//////////////////\n// GAME STUFF\n//////////////////\n\ninit_wasm();\n\n// let board = new Board(BOARD_WIDTH, BOARD_HEIGHT, Team.Black);\n\nconst statusText = document.getElementById(\"status-p\");\nconst statusAlert = document.getElementById(\"status-d\");\nconst teamText = document.getElementById(\"team-p\");\nconst nodeCountText = document.getElementById(\"node-count\");\nconst winningText = document.getElementById(\"winning-p\");\n\nconst startBtn = document.getElementById(\"startBtn\");\nstartBtn.onclick = start_game;\n\nlet wonTimeout = null;\nlet statusTimeout = null;\nlet setStatus = setStatusAlert;\n\nlet current_state = GameState.HUMAN_TURN.THINKING;\n\nlet game = null;\nlet painter = null;\n\nlet clicks = [];\n\nstart_game();\n\n/////////////////\n// CANVAS\n/////////////////\n\nconst canvas = document.getElementById(\"game-canvas\");\ncanvas.addEventListener(\"click\", (event) => {\n var mousepos = getMousePos(canvas, event);\n // console.log(mousepos);\n var cell = new BrdIdx(\n Math.floor((mousepos.y / canvas.clientHeight) * BOARD_HEIGHT),\n Math.floor((mousepos.x / canvas.clientWidth) * BOARD_WIDTH),\n );\n // console.log(cell);\n process_canvas_click(cell);\n});\n\n////////////////\n// FUNCS\n////////////////\n\nfunction start_game() {\n game = new Game(BOARD_WIDTH, BOARD_HEIGHT, PIECE_ROWS, Team.Black, SEARCH_DEPTH);\n painter = new Painter(CANVAS_WIDTH, CANVAS_HEIGHT, \"game-canvas\");\n game.set_painter(painter);\n game.draw();\n\n clearInterval(wonTimeout);\n updateTeamText();\n updateWinningText();\n clicks = [];\n current_state = GameState.HUMAN_TURN.THINKING;\n}\n\nfunction process_canvas_click(cell_coord) {\n\n switch(current_state) {\n // first click of a move\n case GameState.HUMAN_TURN.THINKING:\n if (game.current_cell_state(cell_coord).state != SquareState.Occupied ) {\n return;\n }\n\n if (game.current_cell_state(cell_coord).occupant.team != game.current_turn() ) {\n return;\n }\n\n // console.log(\"Your turn, first piece picked\");\n\n clicks.push(cell_coord);\n current_state = GameState.HUMAN_TURN.FROM_SELECTED;\n game.set_selected(cell_coord);\n game.draw();\n \n break;\n \n // second click of a move\n case GameState.HUMAN_TURN.FROM_SELECTED:\n\n // second click is different to first, process as move\n // otherwise, will skip straight to clean up (clear selected and clicks) \n if (!clicks[0].eq(cell_coord)) {\n\n if (game.current_cell_state(cell_coord).state != SquareState.Empty ) {\n return;\n }\n \n // console.log(\"Your turn, first piece already picked, picking second\");\n \n clicks.push(cell_coord);\n \n if (clicks.length != 2) {\n setStatus(`Error: wrong number of clicks to process ${clicks.length}`);\n console.error(`Error: wrong number of clicks to process ${clicks.length}`);\n \n return;\n }\n\n let status = game.make_move(clicks[0], clicks[1]);\n\n switch(status) {\n case Moveable.Allowed:\n\n if (aiCheckBox.checked && game.has_won() === undefined) {\n game.ai_move();\n nodeCountText.innerText = `searched ${game.last_node_count.toLocaleString(\"en-GB\")} possible moves`;\n }\n\n break;\n case Moveable.IllegalTrajectory:\n setStatus(\"You can't move like that!\");\n break;\n case Moveable.JumpingSameTeam:\n setStatus(\"You can't jump your own piece!\");\n break;\n case Moveable.NoJumpablePiece:\n setStatus(\"There's nothing to jump!\");\n break;\n case Moveable.OccupiedDest:\n setStatus(\"There's a piece there!\");\n break;\n case Moveable.OutOfBounds:\n setStatus(\"That square's not on the board! (how have you managed that?)\");\n break;\n case Moveable.UnoccupiedSrc:\n setStatus(\"There's no piece to move!\");\n break;\n case Moveable.Unplayable:\n setStatus(\"That's not a playable square!\");\n break;\n case Moveable.WrongTeamSrc:\n setStatus(\"That's not your piece!\");\n break;\n }\n \n }\n\n game.clear_selected();\n game.draw();\n clicks = [];\n current_state = GameState.HUMAN_TURN.THINKING;\n \n break;\n case GameState.AI_TURN:\n console.log(\"It's the AI's turn!\");\n break;\n }\n\n updateTeamText();\n updateWinningText();\n checkWon();\n}\n\nfunction getMousePos(canvas, evt) {\n var rect = canvas.getBoundingClientRect();\n return {\n x: evt.clientX - rect.left,\n y: evt.clientY - rect.top\n };\n}\n\nfunction setStatusText(txt, hide = true) {\n if(statusTimeout != null) {\n clearInterval(statusTimeout);\n }\n\n statusText.innerText = txt;\n\n if(hide) {\n statusTimeout = setTimeout(() => {\n statusText.innerText = \"\";\n }, STATUS_TIMEOUT);\n }\n}\n\nfunction setStatusAlert(txt, alertType = \"danger\", hide = true) {\n if(statusTimeout != null) {\n clearInterval(statusTimeout);\n }\n\n statusAlert.className = `alert alert-${alertType}`;\n statusAlert.innerText = txt;\n statusAlert.hidden = false;\n\n if(hide) {\n statusTimeout = setTimeout(() => {\n statusAlert.hidden = true;\n }, STATUS_TIMEOUT);\n }\n}\n\nfunction updateTeamText(){\n let team = game.current_turn();\n switch(team) {\n case Team.White:\n teamText.innerText = \"⚪ White ⚪\";\n break;\n case Team.Black:\n teamText.innerText = \"🔴 Black 🔴\";\n break;\n }\n}\n\nfunction updateWinningText(){\n \n switch(game.winning()) {\n case undefined:\n winningText.innerText = \"\";\n break;\n case Team.White:\n winningText.innerText = \"👑 White 👑\";\n break;\n case Team.Black:\n winningText.innerText = \"👑 Black 👑\";\n break;\n }\n}\n\nfunction checkWon() {\n\n switch(game.has_won()) {\n case undefined:\n break;\n case Team.White:\n setStatus(\"You Lost!\");\n wonTimeout = setInterval(() => {\n start_game();\n }, WON_TIMEOUT);\n break;\n case Team.Black:\n setStatus(\"You Won!\", \"success\");\n wonTimeout = setInterval(() => {\n start_game();\n }, WON_TIMEOUT);\n break;\n }\n}\n\n////////////////\n// UI\n////////////////\n\nconst widthBox = document.getElementById(\"width\");\n/**\n * Handler for width input box change, start a new game\n */\nconst onWidth = () => {\n\n BOARD_WIDTH = parseInt(widthBox.value);\n start_game();\n}\nwidthBox.onchange = onWidth;\nwidthBox.value = 8;\n\nconst heightBox = document.getElementById(\"height\");\n/**\n * Handler for height input box change, start a new game\n */\nconst onHeight = () => {\n\n BOARD_HEIGHT = parseInt(heightBox.value);\n pieceRowsBox.max = (BOARD_HEIGHT / 2) - 1;\n start_game();\n}\nheightBox.onchange = onHeight;\nheightBox.value = 8;\n\nconst pieceRowsBox = document.getElementById(\"play_rows\");\n/**\n * Handler for piece rows input box change, start a new game\n */\nconst onPieceRows = () => {\n\n PIECE_ROWS = parseInt(pieceRowsBox.value);\n start_game();\n}\npieceRowsBox.onchange = onPieceRows;\npieceRowsBox.value = 3;\n\nconst aiSearchDepthBox = document.getElementById(\"ai_search_depth\");\n/**\n * Handler for AI search depth input box change, start a new game\n */\nconst onAISearchDepth = () => {\n\n SEARCH_DEPTH = parseInt(aiSearchDepthBox.value);\n game.set_search_depth(SEARCH_DEPTH);\n\n if(SEARCH_DEPTH > 4) {\n setStatus(\"This increases thinking time exponentially, be careful (probably don't go past 6)\", \"warning\");\n }\n}\naiSearchDepthBox.onchange = onAISearchDepth;\naiSearchDepthBox.value = 4;\n\nconst aiCheckBox = document.getElementById(\"ai-checkbox\");\n/**\n * Handler for height input box change, get a new universe of given size\n */\nconst onAICheck = () => {\n \n}\naiCheckBox.onchange = onAICheck;\n// aiCheckBox.checked = true;\n\nconst aiPerfectChance = document.getElementById(\"ai_difficulty\");\n/**\n * Handler for piece rows input box change, start a new game\n */\nconst onPerfectChance = () => {\n\n PERFECT_CHANCE = parseInt(aiPerfectChance.value) / 100;\n game.set_perfect_chance(PERFECT_CHANCE);\n}\naiPerfectChance.onchange = onPerfectChance;\naiPerfectChance.value = 50;"],"sourceRoot":""} \ No newline at end of file diff --git a/1f6adaf6c2dc4c9caead.module.wasm b/1f6adaf6c2dc4c9caead.module.wasm new file mode 100644 index 0000000000000000000000000000000000000000..e51c5acc9cd33f26d3a76cd29570fca5a3cc29ed GIT binary patch literal 122931 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 literal 0 HcmV?d00001 diff --git a/a9e080695052ab7978e6.module.wasm b/a9e080695052ab7978e6.module.wasm deleted file mode 100644 index 2c6bc443524e893f6a5eb12a987c38fab707c000..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 120761 zcmd443!G)eUGKXd`_;X7ckg+?4AV2r+KWljyn9~#00Ohx@R$GrJs7#U=kw|GYk)n& zJbQp#hnYr3GBLyugJwKp93u)*P!iEQUh&v5oFhhz6Ge@RiV?44-X{u#&e%AHFeic!{ac!#>mNVV}$6aP;TP`+F|A zbaMaL!P{=19v#2!lIDRmqoa3^-?4l0wyE8td&Zkn6Vs!U`}gb}-9NP>C@ideR$Ju* z)BEq(ecR~nsk?(d-MVSx*w*o(tz(m$wr<%JL<^x= z=RTO&|AD>Jdq&5HCWbdnjg3ug+C14mIn*D-3+u0U_3u3JZSITVvB`mf!NJXR(?2vh zIkfnTRraUx5AL3v+HuG3smaAP-|pJJZEE^E#&%Ecx%0hayADnr7@eHlG&nUd z-aoK))A;61n+M+Vhf`YzCx*udw@yw@jZO0TV&uNf^|;@Zej{I zZye|!o0=FH8y^db3$bvq`;IA}zGGr^Y+_>SzyW6S#+%;toi|)Px&=VD3=H*84GnDE zGBLDq@ig_h@9)@63%e(#_Ust_E-@;XO-v4Lp4u@yFtlUqV(j=qg4U~dP3fDF4{VDxy)LvS0x%GlKA zp~?Q?;h<+B2_&ws@u}PH*nRUDpTHo7whnHc+C135X>e?E^I{zNr7YOQCs@Z@whT^9 z4vbB1S)#UInGOS^6C0=cH*efLv2|#8cyMxJ3Et+XYi$3-=#CvbCWi(mhc|BAJUKD7 zc~j845PDBV0_8izGPexu*fB9QxoKi*$Kcea;h~^=;TH{$TbmI3W^ih3^OhZBlS5;J zJNkD_ZCd=z=0!wt-SnNi9AS7`9NjUwd18EgYV&aaz$BEhX)!f;SfPfyZEkjKo){XM z8sEC9e|&6ca?9Z28TE6+7q?H{AxW`yY~$GY_}G?>Q=7L=Y}vE~oAtwEk$6HK9Rhhf zHg0Aej!zCu4R2h$KzuhykllO6_TP43ba)3GaL4B1fsK=s8^@=n77G?n0uy79!1&na zfq^ZX#wUmSH*Ou=G=9d~2gLgk6vM33fw93&aHXl?#Z1K$%-xQYY~I|zWyi#p@hz~R z;ep}Ji|gk@-nD0ZY}YNf!<(o2CpT@J7#p7$7}(rDIIzSwzK`4Nn^Cv{i*b0%hb~OLdTz;cSZ=-{5GM$-VoI z>D&Eh(A&nz@rm)N!T!x-TPM!Uo(~)xAKSlw>;t3BElR`C=8Z#>V_P?k4J@W2BZ>J6 z%*3ueyQfTpStNhkrRn6<_(AC%Vy}xAL0tpz?M~mmf6v{Et1N4)a_7{Yd-i`ID8=7f zxW5n!2bac{_k^oUu z0zh~M{G-6N2@pXT$244sYhfW+MQg>Nt}gTeZ?s+v3LzEwKOI(zR4(zgjnFq!3_BTm z9G4<8Xdx<<3Nd2}V)~21LOBdN%7QTL;WH(u7Z?2hLY`q935xuGV5`6g1KtaTh;*a6 ztWc<&RXe*eXK*sl*K%#kKNYQBSRabERT?}R`?9%jT4m2g9j+BA@P82* zDYF>%9UPP1D@YzGoHN(5FW56Nad7Y0?&;v^$QP>Vg@vcXvlo3SU2iJ*$=H{)edbDD ziaLEW0_g9<4*#}yBKT5N^Dk3(?w$TX@OYuizaQMach}elf=?Gb_~ZL0@0h&Df&brf zgb9(pK&$wd@_d2Nmj6?Eep~&CJ-dR(^8B{?%KzTD+Ujo4oxzV5I{fR@zTh`QKe6Ko zwn+!iXJfOTZX31sE#KsE@OWNe9kdlZkRxmE3n!0*Pv<3bpZJmw#@?Ko`)1wW^Kn9=&tVT~opH;VM_*uCZNrOhPiFcjiT(30E&D z+9?CnKKpDAL-XLBd#9$X$6pSsuD)P6z`T3NcOSgd06!4?Oza_7maT>Z!TnKt9@I6p zKlr}Lw{&1)&wgOctJvTi`F=Rh8{4~g*9RO>Cvu=%oabbyRYDbi%BV;FV}iUL;cR%Wu!YX{r3dZ$;;{m-=iP zz!V5R6t8YC#QAXdX#U~9MXj>^Q)+nf4h*aVckJ1HAo$c=mn~Xw1Ex~&m9Un#suqK< zhCQC;Fm^Y(e+s=ducaWAjP4pcFg?0^&*aqT#GZpNu_t0*LtQUf1gPSQO(}aHg`+?_?OVV-#&I=^zJ>ogCC1l&1<5K z)IJrSmNOkuCwJ~}zI7fgTHcWW~=wF|oh74c}a!Zoyus?_({KNWRb_MKxpSz=mw ze-}ESr|y}WIH+}}%->m%X*B%1p=)yQ!2`F;|1)Y>3H~swx8U;l3jQLjSf0r1(P(9! zo=00xw|(d5H2C4D!|K}H{=Uc6*c}e2e|OT#>t=Ui3+$N)UW<&vedhitm-{QRk%iAS zvG!+D%YE^$N?)ZEZ23c7BRQMa=8}Sbp?u$PW{cZR|(Pz-;K2!K!{yo6I zqx}1H_*d~~3V%e&KZl=g+N2324{S@E)O!Or(KE}T%3V*@xCksy&ezx#;@h1z9gg+8~G5+o7|0ee%{QD~Z z9^~I=3V+D&!}NKK^gr?Zex4uZ--imf{We7(CHc=}|4w|0|DKD#VE_HPe|{nUz3>a< z{s!-#kN-#fS!(}WH1_?`|BRk0JQY6~eL4PQ{PFmoqmLJUHJ*Gp{F~@>{9ogr1H8{h zFT}3{^3O%D#}7sS5PvQFu78ie62BJyzwv!^_f+Bb_x?cmgV9XkBjLxQA1QSHMH9=RRC&T$#Q4h5P=n)VRvOZ}a7uub=wz&A$9RU%tVYzs;Aw-Is6i zk@(p56y;|>rLeK~*K_@5$t)Le4 z8ihuqQMu7+lp3u@{f-u<+)TW!g-JIP=e02H%G1_NxbkhjJfEp6efc}{nT;Wnq;DX4 zB;xswf#|rN*9=4t>v{P=^pKuC$(7BN!c%&wC+}>geDQ)_RwY+7Q>uSiFP9}(HB-KM zk(cbDxT)Vrzo(*R{TD-O4Ec`E_Z?mAJ6h>GswLZ+DTUV2>LhEXd|@4(lcde`3g6MP zWOFlpr*-tM#hqN>I~n$!ob5Zg$am6}oYzb#v`*F}8=5I!SSP*7+nVW>zLVw2+necC z)`^H^!AL5;lTP2sS-z7CeJAB)OEaaCby7;UHdAU^Cxv97nQrr)#K~YY&8(A=MV(~F z<7Rrb7)7cz{CwQltmkua<2*f|jT;;EoQ)fA)AO0Q@pe5=#*Hm{J{>o<>iJaM7|`>H zxG|{b<1w6s=c6%vgy)GEF2eJX7%sx|;ka?Oo)5*1i#4l$q^tZ$>wcs?exx1A#aaFC zw4<4lW5exE&Q?x$Go`MLxtgTPsWwwuFaweP&t(%(!k^&P)mIsM7TX1eiAgcbXa3%=u$@3`zc zew&(zll9G%8rJa!<&=`7nNr6(K2JI8lSVU5e8-!W(?~Wo(@jeg+Z>rePDW;smysFd zW@HBW8JR&&MrM$gks0J>WCr;enL$oQW{{VW8RTYU2KgD8L00p~46+lM75%uYe%#%D z+#P=07iTrdCAqwrQbPm-Ns-f?T+>XcV?@;l;gQ#8EXgqO4#wM>z z_|74>ht{6b@Eje8Y@M&2spR5tE9WJXTiWTK6`2Qnk4#{?teJ_DISPLBw= zm-x;RZq_*x&pKbJMrz_q)UeLiCKo9WZU(2a&X+-Eu74aoXtm6&JSubvu^R6;vMqb%?mvvl#%*ZJ;)6{t2(qv{_3~pvz z4DMxI3~pvz4DM!J3~pvz4DMxI3~pvz4DM!J3~pvz4DMxI3~pvz4DM!J3~pw^(s3~p zp4T$NIq@Le40({3K@Pcrs3?0a$n~N>jd?{u;&&!&o*xHEbbfqK{cq#sYO=l@HPe{P zLFKFDR5Tbr#3!O5!&goh(2(^2O<51GEY-v5An)OJ_3*BYmD-);9Y8p)1ND^?LO%VF zinV`%Z~x0nwf|D9{ae-kx2gThTJ1w0bM1F}`14stE?N6-Mx*SxrP@E$YX3U5Kce<8 zX|)d-68}3#Gk7t6Td=FCVr!y5JsXW6TeAMCjK3IGVy(SLKx@k$;1!o$;1!q z$;4lvCxnse$;5Bh6RqjpdO{G_gFf^eTXASW$CcD zht`DNY&3ihoQIrqn(1bnyCwJxdX9Cx+;_ZCYZ_DoCeCuLX+Sy4CC>QPI_`(_kcZZ^ z)py(r=OL%JnQpO;p`(TBIQ+#rMgy`DqZ=8zb3XHSHBgW^qlVT80*;)D#2MdO$Bkrz z^3a+Fe8(j?4>_e~I%pk_EbQ3G>gv_qe6EfSTCuElC37MUzCuC;) z2r@H%1eqB>g3NN|-1rP+W_$)RGd=^Ep)DDiiO--5*|^bwY}}BWjl1Z{?E2(dX@02L z)UA?q9s$U2AItn*xJN}Y~h zGp)%wzaTM%9pS|{*7-0*Mdv6lFc|B62&qC2<{qq!&X*uFbRp{)4ahoP?mN!4rt_Iy zn&>jE$vW<1ZplG-@r`x-4(67ezGix%?|4&^DFuB_K=7w zNw%p81QRu_>CE)l{l)PIx%aV&sKd{c%GPmTRM`3K+G^}Q-$U$qu7H6uKATxxvb&Sxq zj+ZYWGgGp=Waz)$kJ_~6<+AqQ=0|-gghw~%Q5$^6Yn;}M)^whAyaYGPm2+gHb-a+w zwyVj4TnCOXMXYjiD)KDkylcI)e6SN?qc-9)i;r69QLs@)yfm4aP=w4HA_vIK$O|$v za)Zm|WM)DTE@oO0WM^*7^GBYwpNScs^%y5315JmX5Y`~nG zAqb7k5RtaL-XX2;9m&Pb6vBJa7MyafNiae9#%B6*i~TaxP9VvjEgOHwAvBTn)5lonNmyLkU9DiP|N| zELYAUFPm)yp>>Riw2t4cCWfUW!*H!*Ge6EwE;Jv9b!=9`MRGOJnst1EzPcbmXgX25 z1ew9LjJ_c+>li_39U~&GL1;Q2 zxFnf*Ub9Y5h`=2>Or2Rf)zq9uHto=S`zt8h4QZk5h zvdD=cCxM|RQcZrzHvN0sPOp9sIrTf&iy^cz8DFS%k|T%pEdfa>1UaK&e6|m{q*SPvgBMnRwe87s3)dSRXufdcEb z^g#%NcUa3>Jz*_IMX(m5A|#;c`LL!-RSs+F*Av#1>;3EX4r?=32WvA{2W#7u+?X9{ zrZ;v4RRTKa$4TQRJ^C6qgP-TaW&*bjNIpjrHml^bB;l`0K0^{YpyWxC2mmFYCJE

>8mI5^I<)anh){J9>jXY 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

List of all items[] -

Structs

Enums

Macros

Functions

Constants

+

Structs

Enums

Macros

Functions

Constants

\ No newline at end of file diff --git a/doc/draught/comp/index.html b/doc/draught/comp/index.html index e3540fa..e39fd3c 100644 --- a/doc/draught/comp/index.html +++ b/doc/draught/comp/index.html @@ -1,7 +1,7 @@ draught::comp - Rust

Module draught::comp[][src]

AI player logic

+ Change settings

Module draught::comp[][src]

AI player logic

Structs

BoardNode

For storing boards in the AI tree, stores board with score for comparisons

Computer

Root-level structure for managing the game as a collection of board states

diff --git a/doc/draught/comp/struct.BoardNode.html b/doc/draught/comp/struct.BoardNode.html index 48dbcb4..1909936 100644 --- a/doc/draught/comp/struct.BoardNode.html +++ b/doc/draught/comp/struct.BoardNode.html @@ -1,18 +1,18 @@ BoardNode in draught::comp - Rust

Struct draught::comp::BoardNode[][src]

pub struct BoardNode {
+                Change settings

Struct draught::comp::BoardNode[][src]

pub struct BoardNode {
     pub board: Board,
     pub score: isize,
 }

For storing boards in the AI tree, stores board with score for comparisons

- Fields

board: Boardscore: isize

Implementations

impl BoardNode[src]

pub fn new(board: Board, score: isize) -> BoardNode[src]

pub fn brd(board: Board) -> BoardNode[src]

Trait Implementations

impl Clone for BoardNode[src]

paint

Components for painting board states onto HTML canvases

utils

Macros

log

Wrap the web_sys access to the browser console in a macro for easy logging

-

Functions

+log_error

Functions

__wasm_bindgen_generated_init_wasm
init_wasm
\ No newline at end of file diff --git a/doc/draught/macro.log_error!.html b/doc/draught/macro.log_error!.html new file mode 100644 index 0000000..9c19de2 --- /dev/null +++ b/doc/draught/macro.log_error!.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to macro.log_error.html...

+ + + \ No newline at end of file diff --git a/doc/draught/macro.log_error.html b/doc/draught/macro.log_error.html new file mode 100644 index 0000000..1942507 --- /dev/null +++ b/doc/draught/macro.log_error.html @@ -0,0 +1,9 @@ +log_error in draught - Rust + +

Macro draught::log_error[][src]

+macro_rules! log_error {
+    ( $( $t:tt )* ) => { ... };
+}
+
+ \ No newline at end of file diff --git a/doc/draught/paint/constant.OUTLINE_WIDTH.html b/doc/draught/paint/constant.OUTLINE_WIDTH.html index 27b0b9f..900c588 100644 --- a/doc/draught/paint/constant.OUTLINE_WIDTH.html +++ b/doc/draught/paint/constant.OUTLINE_WIDTH.html @@ -1,6 +1,6 @@ -OUTLINE_WIDTH in draught::paint - Rust +OUTLINE_WIDTH in draught::paint - Rust

Constant draught::paint::OUTLINE_WIDTH[][src]

const OUTLINE_WIDTH: f64 = 3.0;

Line width when outlining black squares

+ Change settings

Constant draught::paint::OUTLINE_WIDTH[][src]

const OUTLINE_WIDTH: f64 = 0.05;

Line width when outlining black squares as proportion of min cell dimension

\ No newline at end of file diff --git a/doc/draught/paint/constant.PIECE_MARGIN.html b/doc/draught/paint/constant.PIECE_MARGIN.html deleted file mode 100644 index 16dacc3..0000000 --- a/doc/draught/paint/constant.PIECE_MARGIN.html +++ /dev/null @@ -1,6 +0,0 @@ -PIECE_MARGIN in draught::paint - Rust - -

Constant draught::paint::PIECE_MARGIN[][src]

const PIECE_MARGIN: f64 = 14.0;

Margin from square to define piece radius

-
- \ No newline at end of file diff --git a/doc/draught/paint/constant.PIECE_OUTLINE_PROPORTION.html b/doc/draught/paint/constant.PIECE_OUTLINE_PROPORTION.html new file mode 100644 index 0000000..f25071f --- /dev/null +++ b/doc/draught/paint/constant.PIECE_OUTLINE_PROPORTION.html @@ -0,0 +1,6 @@ +PIECE_OUTLINE_PROPORTION in draught::paint - Rust + +

Constant draught::paint::PIECE_OUTLINE_PROPORTION[][src]

const PIECE_OUTLINE_PROPORTION: f64 = 0.25;

Line width for outlining pieces as proportion of piece radius

+
+ \ No newline at end of file diff --git a/doc/draught/paint/constant.PIECE_OUTLINE_WIDTH.html b/doc/draught/paint/constant.PIECE_OUTLINE_WIDTH.html deleted file mode 100644 index ff14cbf..0000000 --- a/doc/draught/paint/constant.PIECE_OUTLINE_WIDTH.html +++ /dev/null @@ -1,6 +0,0 @@ -PIECE_OUTLINE_WIDTH in draught::paint - Rust - -

Constant draught::paint::PIECE_OUTLINE_WIDTH[][src]

const PIECE_OUTLINE_WIDTH: f64 = 6.0;

Line width for outlining pieces

-
- \ No newline at end of file diff --git a/doc/draught/paint/constant.PIECE_PROPORTION.html b/doc/draught/paint/constant.PIECE_PROPORTION.html new file mode 100644 index 0000000..eed5ea9 --- /dev/null +++ b/doc/draught/paint/constant.PIECE_PROPORTION.html @@ -0,0 +1,6 @@ +PIECE_PROPORTION in draught::paint - Rust + +

Constant draught::paint::PIECE_PROPORTION[][src]

const PIECE_PROPORTION: f64 = 0.6;

Proportion of square that piece fills as proportion of min cell dimension

+
+ \ No newline at end of file diff --git a/doc/draught/paint/index.html b/doc/draught/paint/index.html index 10064b5..98c0054 100644 --- a/doc/draught/paint/index.html +++ b/doc/draught/paint/index.html @@ -1,7 +1,7 @@ draught::paint - Rust

Module draught::paint[][src]

Components for painting board states onto HTML canvases

+ Change settings

Module draught::paint[][src]

Components for painting board states onto HTML canvases

Structs

Painter

Used to paint boards onto HTML canvases

Constants

@@ -11,9 +11,9 @@ DRAW_OUTLINE

Whether to outline black squares

DRAW_PIECE_OUTLINES

Whether to outline pieces

KING_OUTLINE

Default hex colour value for black piece outline

-OUTLINE_WIDTH

Line width when outlining black squares

-PIECE_MARGIN

Margin from square to define piece radius

-PIECE_OUTLINE_WIDTH

Line width for outlining pieces

+OUTLINE_WIDTH

Line width when outlining black squares as proportion of min cell dimension

+PIECE_OUTLINE_PROPORTION

Line width for outlining pieces as proportion of piece radius

+PIECE_PROPORTION

Proportion of square that piece fills as proportion of min cell dimension

SELECTED_PIECE

Default hex colour value for selected piece

SELECTED_PIECE_OUTLINE

Default hex colour value for selected piece outline

SQUARE_OUTLINE

Default hex colour value for outline of black squares

diff --git a/doc/draught/paint/sidebar-items.js b/doc/draught/paint/sidebar-items.js index 0c761e8..dc59e1f 100644 --- a/doc/draught/paint/sidebar-items.js +++ b/doc/draught/paint/sidebar-items.js @@ -1 +1 @@ -initSidebarItems({"constant":[["BLACK_PIECE","Default hex colour value for black pieces"],["BLACK_PIECE_OUTLINE","Default hex colour value for black piece outline"],["BLACK_SQUARE","Default hex colour value for black square background"],["DRAW_OUTLINE","Whether to outline black squares"],["DRAW_PIECE_OUTLINES","Whether to outline pieces"],["KING_OUTLINE","Default hex colour value for black piece outline"],["OUTLINE_WIDTH","Line width when outlining black squares"],["PIECE_MARGIN","Margin from square to define piece radius"],["PIECE_OUTLINE_WIDTH","Line width for outlining pieces"],["SELECTED_PIECE","Default hex colour value for selected piece"],["SELECTED_PIECE_OUTLINE","Default hex colour value for selected piece outline"],["SQUARE_OUTLINE","Default hex colour value for outline of black squares"],["WHITE_PIECE","Default hex colour value for white pieces"],["WHITE_PIECE_OUTLINE","Default hex colour value for white piece outline"],["WHITE_SQUARE","Default hex colour value for white square background"]],"struct":[["Painter","Used to paint boards onto HTML canvases"]]}); \ No newline at end of file +initSidebarItems({"constant":[["BLACK_PIECE","Default hex colour value for black pieces"],["BLACK_PIECE_OUTLINE","Default hex colour value for black piece outline"],["BLACK_SQUARE","Default hex colour value for black square background"],["DRAW_OUTLINE","Whether to outline black squares"],["DRAW_PIECE_OUTLINES","Whether to outline pieces"],["KING_OUTLINE","Default hex colour value for black piece outline"],["OUTLINE_WIDTH","Line width when outlining black squares as proportion of min cell dimension"],["PIECE_OUTLINE_PROPORTION","Line width for outlining pieces as proportion of piece radius"],["PIECE_PROPORTION","Proportion of square that piece fills as proportion of min cell dimension"],["SELECTED_PIECE","Default hex colour value for selected piece"],["SELECTED_PIECE_OUTLINE","Default hex colour value for selected piece outline"],["SQUARE_OUTLINE","Default hex colour value for outline of black squares"],["WHITE_PIECE","Default hex colour value for white pieces"],["WHITE_PIECE_OUTLINE","Default hex colour value for white piece outline"],["WHITE_SQUARE","Default hex colour value for white square background"]],"struct":[["Painter","Used to paint boards onto HTML canvases"]]}); \ No newline at end of file diff --git a/doc/draught/paint/struct.Painter.html b/doc/draught/paint/struct.Painter.html index 30c4f87..8e9a187 100644 --- a/doc/draught/paint/struct.Painter.html +++ b/doc/draught/paint/struct.Painter.html @@ -1,6 +1,6 @@ Painter in draught::paint - Rust -