From 40f5c8bfabc517d0449443166cfed691a1b9e0f1 Mon Sep 17 00:00:00 2001 From: Sarsoo Date: Mon, 12 Jul 2021 22:48:29 +0000 Subject: [PATCH] deploy: d922c0f345fdf0173f3b04c477344b6455bdfdce --- 10.bootstrap.js | 2 +- 10.bootstrap.js.map | 2 +- 406c9aebd9f4530de773.module.wasm | Bin 0 -> 121732 bytes cc96734576b00860ab91.module.wasm | Bin 124071 -> 0 bytes doc/draught/all.html | 2 +- doc/draught/board/enums/enum.MoveType.html | 4 +- doc/draught/board/enums/enum.Moveable.html | 4 +- doc/draught/board/enums/enum.SquareState.html | 4 +- doc/draught/board/enums/enum.Strength.html | 4 +- doc/draught/board/enums/enum.Team.html | 4 +- doc/draught/board/index.html | 2 +- .../board/iter/struct.PieceIterator.html | 8 +- .../board/iter/struct.RowIndexIterator.html | 8 +- .../board/iter/struct.RowSquareIterator.html | 8 +- doc/draught/board/struct.Board.html | 24 +- doc/draught/board/struct.BrdIdx.html | 4 +- doc/draught/board/struct.Direction.html | 4 +- doc/draught/board/struct.Piece.html | 4 +- doc/draught/board/struct.Square.html | 4 +- doc/draught/comp/index.html | 4 +- doc/draught/comp/sidebar-items.js | 2 +- doc/draught/comp/struct.BoardNode.html | 28 + doc/draught/comp/struct.Computer.html | 21 +- doc/draught/comp/struct.Move.html | 16 +- doc/draught/game/index.html | 2 +- doc/draught/game/struct.Game.html | 63 ++- doc/draught/paint/constant.PIECE_MARGIN.html | 2 +- .../paint/constant.PIECE_OUTLINE_WIDTH.html | 2 +- doc/draught/paint/index.html | 2 +- doc/draught/paint/struct.Painter.html | 54 +- doc/draught/player/struct.Player.html | 4 +- doc/implementors/core/clone/trait.Clone.js | 2 +- doc/implementors/core/cmp/trait.Eq.js | 2 +- doc/implementors/core/cmp/trait.PartialEq.js | 2 +- doc/implementors/core/fmt/trait.Debug.js | 2 +- doc/implementors/core/marker/trait.Freeze.js | 2 +- doc/implementors/core/marker/trait.Send.js | 2 +- .../core/marker/trait.StructuralEq.js | 2 +- .../core/marker/trait.StructuralPartialEq.js | 2 +- doc/implementors/core/marker/trait.Sync.js | 2 +- doc/implementors/core/marker/trait.Unpin.js | 2 +- .../std/panic/trait.RefUnwindSafe.js | 2 +- .../std/panic/trait.UnwindSafe.js | 2 +- doc/search-index.js | 2 +- doc/src/draught/board/mod.rs.html | 12 + doc/src/draught/comp/mod.rs.html | 526 ++++++++++++++++-- doc/src/draught/game/mod.rs.html | 64 ++- doc/src/draught/lib.rs.html | 6 +- doc/src/draught/paint.rs.html | 6 +- index.html | 87 ++- 50 files changed, 835 insertions(+), 184 deletions(-) create mode 100644 406c9aebd9f4530de773.module.wasm delete mode 100644 cc96734576b00860ab91.module.wasm create mode 100644 doc/draught/comp/struct.BoardNode.html diff --git a/10.bootstrap.js b/10.bootstrap.js index 99dc4a4..df15377 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:()=>j,i0:()=>O,Tt:()=>E,rh:()=>q,lA:()=>B,Ck:()=>I,ug:()=>C,h4:()=>U,h9:()=>$,Dz:()=>M,kF:()=>D,s8:()=>J,WB:()=>P,cP:()=>R,a:()=>z,l_:()=>F,U_:()=>N,EN:()=>Y,qu:()=>K,Wg:()=>L,B3:()=>Q,I6:()=>Z,Qb:()=>X,cI:()=>H,QK:()=>G,Md:()=>V,ox:()=>tt,ES:()=>et,Ae:()=>rt,UL:()=>nt,qw:()=>_t,tS:()=>at,R$:()=>ct,md:()=>it,IF:()=>ot,XP:()=>st,m_:()=>ut,fY:()=>pt,Or:()=>lt});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 i(t){return c[t]}c.push(void 0,null,!0,!1);let o=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 p(){return null!==u&&u.buffer===_.memory.buffer||(u=new Uint8Array(_.memory.buffer)),u}function l(t,e){return s.decode(p().subarray(t,t+e))}function d(t){o===c.length&&c.push(c.length+1);const e=o;return o=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,w=new("undefined"==typeof TextEncoder?(0,t.require)("util").TextEncoder:TextEncoder)("utf-8");const h="function"==typeof w.encodeInto?function(t,e){return w.encodeInto(t,e)}:function(t,e){const r=w.encode(t);return e.set(r),{read:t.length,written:r.length}};function f(t,e,r){if(void 0===r){const r=w.encode(t),n=e(r.length);return p().subarray(n,n+r.length).set(r),g=r.length,n}let n=t.length,_=e(n);const a=p();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=p().subarray(_+c,_+n);c+=h(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 j=Object.freeze({Black:0,0:"Black",White:1,1:"White"}),O=(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 S{static __wrap(t){const e=Object.create(S.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,q);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,q);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 q.__wrap(e)}can_move(t,e){k(t,q);var r=t.ptr;t.ptr=0,k(e,q);var n=e.ptr;return e.ptr=0,_.board_can_move(this.ptr,r,n)>>>0}validate_man_move(t,e,r){k(t,q);var n=t.ptr;t.ptr=0,k(e,q);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,q);var n=t.ptr;t.ptr=0,k(e,q);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,q);var r=t.ptr;t.ptr=0,k(e,q);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,q);var r=t.ptr;t.ptr=0,k(e,q);var n=e.ptr;e.ptr=0;var a=_.board_apply_move(this.ptr,r,n);return S.__wrap(a)}apply_jump(t,e){k(t,q);var r=t.ptr;t.ptr=0,k(e,q);var n=e.ptr;e.ptr=0;var a=_.board_apply_jump(this.ptr,r,n);return S.__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 S.__wrap(n)}static init_game(t,e){k(t,S);var r=t.ptr;t.ptr=0;var n=_.board_init_game(r,e);return S.__wrap(n)}}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_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 q.__wrap(r)}eq(t){return k(t,q),0!==_.brdidx_eq(this.ptr,t.ptr)}}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_game_free(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}current_cell_state(t){k(t,q);var e=_.game_current_cell_state(this.ptr,t.ptr);return A.__wrap(e)}set_selected(t){k(t,q),_.game_set_selected(this.ptr,t.ptr)}clear_selected(){_.game_clear_selected(this.ptr)}make_move(t,e){k(t,q);var r=t.ptr;t.ptr=0,k(e,q);var n=e.ptr;return e.ptr=0,_.game_make_move(this.ptr,r,n)>>>0}execute_move(t,e){k(t,q);var r=t.ptr;t.ptr=0,k(e,q);var n=e.ptr;e.ptr=0,_.game_execute_move(this.ptr,r,n)}execute_jump(t,e){k(t,q);var r=t.ptr;t.ptr=0,k(e,q);var n=e.ptr;e.ptr=0,_.game_execute_jump(this.ptr,r,n)}push_new_board(t){k(t,S);var e=t.ptr;t.ptr=0,_.game_push_new_board(this.ptr,e)}set_current(t){k(t,S);var e=t.ptr;t.ptr=0,_.game_set_current(this.ptr,e)}constructor(t,e,r,n){var a=_.game_new(t,e,r,n);return B.__wrap(a)}static new_with_canvas(t,e,r,n,a,c,i){var o=f(a,_.__wbindgen_malloc,_.__wbindgen_realloc),s=g,u=_.game_new_with_canvas(t,e,r,n,o,s,c,i);return B.__wrap(u)}set_painter(t){k(t,I);var e=t.ptr;t.ptr=0,_.game_set_painter(this.ptr,e)}draw(){_.game_draw(this.ptr)}}class I{static __wrap(t){const e=Object.create(I.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 I.__wrap(c)}static new_with_canvas(t,e,r){var n=_.painter_new_with_canvas(t,e,d(r));return I.__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,S),0!==_.painter_validate_board_dim(this.ptr,t.ptr)}draw(t){k(t,S),_.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=i(t);(function(t){t<36||(c[t]=o,o=t)})(t)}(t)}function U(t,e){return d(l(t,e))}function $(){return d(new Error)}function M(t,e){var r=f(i(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(l(t,e))}finally{_.__wbindgen_free(t,e)}}function J(t){return i(t)instanceof Window}function P(t){var e=i(t).document;return y(e)?0:d(e)}function R(t,e,r){var n=i(t).getElementById(l(e,r));return y(n)?0:d(n)}function z(t){console.log(i(t))}function F(t){return i(t)instanceof CanvasRenderingContext2D}function N(t,e){i(t).strokeStyle=i(e)}function Y(t,e){i(t).fillStyle=i(e)}function K(t,e){i(t).lineWidth=e}function L(t){i(t).beginPath()}function Q(t){i(t).fill()}function Z(t){i(t).stroke()}function X(){return T((function(t,e,r,n,_,a){i(t).arc(e,r,n,_,a)}),arguments)}function H(t,e,r,n,_){i(t).fillRect(e,r,n,_)}function G(t,e,r,n,_){i(t).strokeRect(e,r,n,_)}function V(t){return i(t)instanceof HTMLCanvasElement}function tt(t,e){i(t).width=e>>>0}function et(t,e){i(t).height=e>>>0}function rt(){return T((function(t,e,r){var n=i(t).getContext(l(e,r));return y(n)?0:d(n)}),arguments)}function nt(t,e){return d(new Function(l(t,e)))}function _t(){return T((function(t,e){return d(i(t).call(i(e)))}),arguments)}function at(){return T((function(){return d(self.self)}),arguments)}function ct(){return T((function(){return d(window.window)}),arguments)}function it(){return T((function(){return d(globalThis.globalThis)}),arguments)}function ot(){return T((function(){return d(r.g.global)}),arguments)}function st(t){return void 0===i(t)}function ut(t){return d(i(t))}function pt(t,e){var r=f(b(i(e)),_.__wbindgen_malloc,_.__wbindgen_realloc),n=g;v()[t/4+1]=n,v()[t/4+0]=r}function lt(t,e){throw new Error(l(t,e))}}))},813:(t,e,r)=>{"use strict";var n=([n])=>r.v(e,t.id,"cc96734576b00860ab91",{"./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_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,__wbindgen_is_undefined:n.XP,__wbindgen_object_clone_ref:n.m_,__wbindgen_debug_string:n.fY,__wbindgen_throw:n.Or}});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];const a="human_turn.thinking",c="human_turn.from_selected";(0,n.wc)(),document.getElementById("status-p");const i=document.getElementById("status-d"),o=document.getElementById("team-p");document.getElementById("startBtn").onclick=w;let s=null,u=function(t,e="danger",r=!0){null!=s&&clearInterval(s),i.className=`alert alert-${e}`,i.innerText=t,i.hidden=!1,r&&(s=setTimeout((()=>{i.hidden=!0}),3e3))},p=a,l=null,d=null,b=[];w();const g=document.getElementById("game-canvas");function w(){l=new n.lA(8,8,3,n.SZ.Black),d=new n.Ck(480,480,"game-canvas"),l.set_painter(d),l.draw(),h(),p=a}function h(){switch(l.current_turn()){case n.SZ.White:o.innerText="⚪ White ⚪";break;case n.SZ.Black:o.innerText="🔴 Black 🔴"}}g.addEventListener("click",(t=>{var e=function(t,e){var r=t.getBoundingClientRect();return{x:e.clientX-r.left,y:e.clientY-r.top}}(g,t);!function(t){switch(p){case a:if(l.current_cell_state(t).state!=n.i0.Occupied)return;if(l.current_cell_state(t).occupant.team!=l.current_turn())return;b.push(t),p=c,l.set_selected(t),l.draw();break;case c:if(!b[0].eq(t)){if(l.current_cell_state(t).state!=n.i0.Empty)return;if(b.push(t),2!=b.length)return u(`Error: wrong number of clicks to process ${b.length}`),void console.error(`Error: wrong number of clicks to process ${b.length}`);switch(l.make_move(b[0],b[1])){case n.Tt.Allowed:break;case n.Tt.IllegalTrajectory:u("You can't move like that!");break;case n.Tt.JumpingSameTeam:u("You can't jump your own piece!");break;case n.Tt.NoJumpablePiece:u("There's nothing to jump!");break;case n.Tt.OccupiedDest:u("There's a piece there!");break;case n.Tt.OutOfBounds:u("That square's not on the board! (how have you managed that?)");break;case n.Tt.UnoccupiedSrc:u("There's no piece to move!");break;case n.Tt.Unplayable:u("That's not a playable square!");break;case n.Tt.WrongTeamSrc:u("That's not your piece!")}}l.clear_selected(),l.draw(),b=[],p=a;break;case"ai_turn":console.log("It's the AI's turn!")}h()}(new n.rh(Math.floor(e.y/480*8),Math.floor(e.x/480*8)))}))}))}}]); +(self.webpackChunkdraught=self.webpackChunkdraught||[]).push([[10],{171:(t,e,r)=>{"use strict";r.a(t,(async n=>{r.d(e,{wc:()=>x,SZ:()=>j,i0:()=>E,Tt:()=>I,rh:()=>S,lA:()=>B,Ck:()=>q,ug:()=>U,h4:()=>W,h9:()=>$,Dz:()=>R,kF:()=>D,U5:()=>M,r2:()=>P,iY:()=>z,mS:()=>F,XP:()=>J,yX:()=>N,ae:()=>Y,Os:()=>L,DA:()=>Q,s8:()=>V,WB:()=>H,cP:()=>X,a:()=>K,l_:()=>Z,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:()=>ft,IF:()=>ht,zP:()=>wt,td:()=>mt,Ct:()=>vt,uQ:()=>yt,RV:()=>kt,sy:()=>xt,m_:()=>Tt,fY:()=>jt,Or:()=>Et,oH:()=>It});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,f=new("undefined"==typeof TextEncoder?(0,t.require)("util").TextEncoder:TextEncoder)("utf-8");const h="function"==typeof f.encodeInto?function(t,e){return f.encodeInto(t,e)}:function(t,e){const r=f.encode(t);return e.set(r),{read:t.length,written:r.length}};function w(t,e,r){if(void 0===r){const r=f.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+=h(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 j=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"})),I=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 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_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 C.__wrap(e)}set_cell(t,e){k(e,C);var r=e.ptr;e.ptr=0,_.board_set_cell(this.ptr,t,r)}grid_cell(t){k(t,S);var e=t.ptr;t.ptr=0;var r=_.board_grid_cell(this.ptr,e);return C.__wrap(r)}cell_index(t,e){return _.board_cell_index(this.ptr,t,e)>>>0}cell_idx(t){k(t,S);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 S.__wrap(e)}can_move(t,e){k(t,S);var r=t.ptr;t.ptr=0,k(e,S);var n=e.ptr;return e.ptr=0,_.board_can_move(this.ptr,r,n)>>>0}validate_man_move(t,e,r){k(t,S);var n=t.ptr;t.ptr=0,k(e,S);var a=e.ptr;e.ptr=0,k(r,A);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,S);var n=t.ptr;t.ptr=0,k(e,S);var a=e.ptr;e.ptr=0,k(r,A);var c=r.ptr;return r.ptr=0,_.board_validate_king_move(this.ptr,n,a,c)>>>0}jumpee_idx(t,e){k(t,S);var r=t.ptr;t.ptr=0,k(e,S);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,S);var r=t.ptr;t.ptr=0,k(e,S);var n=e.ptr;e.ptr=0;var a=_.board_apply_move(this.ptr,r,n);return O.__wrap(a)}apply_jump(t,e){k(t,S);var r=t.ptr;t.ptr=0,k(e,S);var n=e.ptr;e.ptr=0;var a=_.board_apply_jump(this.ptr,r,n);return O.__wrap(a)}king_row_idx(){return _.board_king_row_idx(this.ptr)>>>0}static validate_jumpee(t,e){k(t,C);var r=t.ptr;t.ptr=0,k(e,A);var n=e.ptr;return e.ptr=0,_.board_validate_jumpee(r,n)>>>0}static check_jumpee_team(t,e){k(t,A);var r=t.ptr;t.ptr=0,k(e,A);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 O.__wrap(n)}static init_game(t,e){k(t,O);var r=t.ptr;t.ptr=0;var n=_.board_init_game(r,e);return O.__wrap(n)}}class S{static __wrap(t){const e=Object.create(S.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 S.__wrap(r)}eq(t){return k(t,S),0!==_.brdidx_eq(this.ptr,t.ptr)}}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_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)}current_cell_state(t){k(t,S);var e=_.game_current_cell_state(this.ptr,t.ptr);return C.__wrap(e)}set_search_depth(t){_.game_set_search_depth(this.ptr,t)}set_selected(t){k(t,S),_.game_set_selected(this.ptr,t.ptr)}clear_selected(){_.game_clear_selected(this.ptr)}make_move(t,e){k(t,S);var r=t.ptr;t.ptr=0,k(e,S);var n=e.ptr;return e.ptr=0,_.game_make_move(this.ptr,r,n)>>>0}execute_move(t,e){k(t,S);var r=t.ptr;t.ptr=0,k(e,S);var n=e.ptr;e.ptr=0,_.game_execute_move(this.ptr,r,n)}execute_jump(t,e){k(t,S);var r=t.ptr;t.ptr=0,k(e,S);var n=e.ptr;e.ptr=0,_.game_execute_jump(this.ptr,r,n)}push_new_board(t){k(t,O);var e=t.ptr;t.ptr=0,_.game_push_new_board(this.ptr,e)}set_current(t){k(t,O);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 B.__wrap(c)}static new_with_canvas(t,e,r,n,a,c,o,i){var s=w(c,_.__wbindgen_malloc,_.__wbindgen_realloc),u=g,l=_.game_new_with_canvas(t,e,r,n,a,s,u,o,i);return B.__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=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,O),0!==_.painter_validate_board_dim(this.ptr,t.ptr)}draw(t){k(t,O),_.painter_draw(this.ptr,t.ptr)}}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_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 A.__wrap(r)}}class C{static __wrap(t){const e=Object.create(C.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:A.__wrap(t)}set occupant(t){let e=0;y(t)||(k(t,A),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,A),r=e.ptr,e.ptr=0);var n=_.square_new(t,r);return C.__wrap(n)}static pc(t,e){var r=_.square_pc(t,e);return C.__wrap(r)}static empty(){var t=_.square_empty();return C.__wrap(t)}static unplay(){var t=_.square_unplay();return C.__wrap(t)}}function U(t){!function(t){const e=o(t);(function(t){t<36||(c[t]=i,i=t)})(t)}(t)}function W(t,e){return d(p(t,e))}function $(){return d(new Error)}function R(t,e){var r=w(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 N(t){return d(o(t).getRandomValues)}function Y(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 Q(){return d(t)}function V(t){return o(t)instanceof Window}function H(t){var e=o(t).document;return y(e)?0:d(e)}function X(t,e,r){var n=o(t).getElementById(p(e,r));return y(n)?0:d(n)}function K(t){console.log(o(t))}function Z(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 ft(){return T((function(){return d(globalThis.globalThis)}),arguments)}function ht(){return T((function(){return d(r.g.global)}),arguments)}function wt(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 jt(t,e){var r=w(b(o(e)),_.__wbindgen_malloc,_.__wbindgen_realloc),n=g;v()[t/4+1]=n,v()[t/4+0]=r}function Et(t,e){throw new Error(p(t,e))}function It(){return d(_.memory)}}))},813:(t,e,r)=>{"use strict";var n=([n])=>r.v(e,t.id,"406c9aebd9f4530de773",{"./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");document.getElementById("startBtn").onclick=y;let b=null,g=function(t,e="danger",r=!0){null!=b&&clearInterval(b),l.className=`alert alert-${e}`,l.innerText=t,l.hidden=!1,r&&(b=setTimeout((()=>{l.hidden=!0}),3e3))},f=s,h=null,w=null,m=[];y();const v=document.getElementById("game-canvas");function y(){h=new n.lA(a,c,o,n.SZ.Black,i),w=new n.Ck(720,720,"game-canvas"),h.set_painter(w),h.draw(),k(),m=[],f=s}function k(){switch(h.current_turn()){case n.SZ.White:p.innerText="⚪ White ⚪";break;case n.SZ.Black:p.innerText="🔴 Black 🔴"}}v.addEventListener("click",(t=>{var e=function(t,e){var r=t.getBoundingClientRect();return{x:e.clientX-r.left,y:e.clientY-r.top}}(v,t);!function(t){switch(f){case s:if(h.current_cell_state(t).state!=n.i0.Occupied)return;if(h.current_cell_state(t).occupant.team!=h.current_turn())return;m.push(t),f=u,h.set_selected(t),h.draw();break;case u:if(!m[0].eq(t)){if(h.current_cell_state(t).state!=n.i0.Empty)return;if(m.push(t),2!=m.length)return g(`Error: wrong number of clicks to process ${m.length}`),void console.error(`Error: wrong number of clicks to process ${m.length}`);switch(h.make_move(m[0],m[1])){case n.Tt.Allowed:console.log(`Score after your turn: ${h.score()}`),I.checked&&(h.ai_move(),d.innerText=`searched ${h.last_node_count.toLocaleString("en-GB")} possible moves`,console.log(`Score after the AI's turn: ${h.score()}`));break;case n.Tt.IllegalTrajectory:g("You can't move like that!");break;case n.Tt.JumpingSameTeam:g("You can't jump your own piece!");break;case n.Tt.NoJumpablePiece:g("There's nothing to jump!");break;case n.Tt.OccupiedDest:g("There's a piece there!");break;case n.Tt.OutOfBounds:g("That square's not on the board! (how have you managed that?)");break;case n.Tt.UnoccupiedSrc:g("There's no piece to move!");break;case n.Tt.Unplayable:g("That's not a playable square!");break;case n.Tt.WrongTeamSrc:g("That's not your piece!")}}h.clear_selected(),h.draw(),m=[],f=s;break;case"ai_turn":console.log("It's the AI's turn!")}k()}(new n.rh(Math.floor(e.y/v.clientHeight*c),Math.floor(e.x/v.clientWidth*a)))}));const x=document.getElementById("width");x.onchange=()=>{a=parseInt(x.value),y()},x.value=8;const T=document.getElementById("height");T.onchange=()=>{c=parseInt(T.value),j.max=c/2-1,y()},T.value=8;const j=document.getElementById("play_rows");j.onchange=()=>{o=parseInt(j.value),console.log(typeof o),y()},j.value=3;const E=document.getElementById("ai_search_depth");E.onchange=()=>{i=parseInt(E.value),h.set_search_depth(i)},E.value=4;const I=document.getElementById("ai-checkbox");I.onchange=()=>{console.log(I.checked)}}))}}]); //# sourceMappingURL=10.bootstrap.js.map \ No newline at end of file diff --git a/10.bootstrap.js.map b/10.bootstrap.js.map index cc31d1c..580a514 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","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_instanceof_Window_11e25482011fc506","Window","__wbg_document_5aff8cd83ef968f5","document","__wbg_getElementById_b180ea4ada06a837","arg2","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","arguments","__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","self","__wbg_window_3304fc4b414c9693","window","__wbg_globalThis_e0d21cabc6630763","globalThis","__wbg_global_8463719227271676","g","global","__wbindgen_is_undefined","__wbindgen_object_clone_ref","__wbindgen_debug_string","__wbindgen_throw","GameState","statusAlert","teamText","onclick","start_game","statusTimeout","setStatus","txt","alertType","hide","clearInterval","innerText","hidden","setTimeout","current_state","game","painter","clicks","set_painter","draw","updateTeamText","addEventListener","event","mousepos","evt","rect","getBoundingClientRect","clientX","left","y","clientY","top","getMousePos","cell_coord","current_cell_state","set_selected","eq","make_move","clear_selected","process_canvas_click","Math","floor"],"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/**\n*/\nexport const MoveType = Object.freeze({ Move:0,\"0\":\"Move\",Jump:1,\"1\":\"Jump\", });\n/**\n*/\nexport const Team = Object.freeze({ Black:0,\"0\":\"Black\",White:1,\"1\":\"White\", });\n/**\n*/\nexport const Strength = Object.freeze({ Man:0,\"0\":\"Man\",King:1,\"1\":\"King\", });\n/**\n*/\nexport const SquareState = Object.freeze({ Empty:0,\"0\":\"Empty\",Occupied:1,\"1\":\"Occupied\",Unplayable:2,\"2\":\"Unplayable\", });\n/**\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 * @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 * @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 * 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 * 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 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 * @param {number} width\n * @param {number} height\n * @param {number} piece_rows\n * @param {number} first_turn\n */\n constructor(width, height, piece_rows, first_turn) {\n var ret = wasm.game_new(width, height, piece_rows, first_turn);\n return Game.__wrap(ret);\n }\n /**\n * @param {number} width\n * @param {number} height\n * @param {number} piece_rows\n * @param {number} first_turn\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, 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, ptr0, len0, canvas_width, canvas_height);\n return Game.__wrap(ret);\n }\n /**\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 */\n draw() {\n wasm.game_draw(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*/\nexport class Player {\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_player_free(ptr);\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_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 __wbindgen_is_undefined(arg0) {\n var ret = getObject(arg0) === undefined;\n return 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\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 = 480;\nconst CANVAS_HEIGHT = 480;\n\nconst BOARD_WIDTH = 8;\nconst BOARD_HEIGHT = 8;\n\nconst PIECE_ROWS = 3;\n\nconst STATUS_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\");\n\nconst startBtn = document.getElementById(\"startBtn\");\nstartBtn.onclick = start_game;\n\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_HEIGHT) * BOARD_HEIGHT),\n Math.floor((mousepos.x / CANVAS_WIDTH) * 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);\n painter = new Painter(CANVAS_WIDTH, CANVAS_HEIGHT, \"game-canvas\");\n game.set_painter(painter);\n game.draw();\n\n updateTeamText();\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 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}\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"],"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","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","onclick","start_game","statusTimeout","setStatus","txt","alertType","hide","clearInterval","innerText","hidden","setTimeout","current_state","game","painter","clicks","set_painter","draw","updateTeamText","addEventListener","event","mousepos","evt","rect","getBoundingClientRect","clientX","left","y","clientY","top","getMousePos","cell_coord","current_cell_state","set_selected","eq","make_move","score","aiCheckBox","checked","ai_move","last_node_count","toLocaleString","clear_selected","process_canvas_click","Math","floor","clientHeight","clientWidth","widthBox","onchange","parseInt","heightBox","pieceRowsBox","max","aiSearchDepthBox","set_search_depth"],"mappings":"gsBAEA,MAAMA,EAAO,IAAIC,MAAM,IAAIC,UAAKC,GAIhC,SAASC,EAAUC,GAAO,OAAOL,EAAKK,GAFtCL,EAAKM,UAAKH,EAAW,MAAM,GAAM,GAIjC,IAAII,EAAYP,EAAKQ,OAgBrB,IAAIC,EAAoB,IAFoB,oBAAhBC,aAA8B,EAAIC,EAAOC,SAAS,QAAQF,YAAcA,aAE3D,QAAS,CAAEG,WAAW,EAAMC,OAAO,IAE5EL,EAAkBM,SAElB,IAAIC,EAAuB,KAC3B,SAASC,IAIL,OAH6B,OAAzBD,GAAiCA,EAAqBE,SAAW,kBACjEF,EAAuB,IAAIG,WAAW,kBAEnCH,EAGX,SAASI,EAAmBC,EAAKC,GAC7B,OAAOb,EAAkBM,OAAOE,IAAkBM,SAASF,EAAKA,EAAMC,IAG1E,SAASE,EAAcC,GACflB,IAAcP,EAAKQ,QAAQR,EAAKM,KAAKN,EAAKQ,OAAS,GACvD,MAAMH,EAAME,EAIZ,OAHAA,EAAYP,EAAKK,GAEjBL,EAAKK,GAAOoB,EACLpB,EAGX,SAASqB,EAAYC,GAEjB,MAAMC,SAAcD,EACpB,GAAY,UAARC,GAA4B,WAARA,GAA4B,MAAPD,EACzC,MAAQ,GAAGA,IAEf,GAAY,UAARC,EACA,MAAO,IAAID,KAEf,GAAY,UAARC,EAAkB,CAClB,MAAMC,EAAcF,EAAIE,YACxB,OAAmB,MAAfA,EACO,SAEA,UAAUA,KAGzB,GAAY,YAARD,EAAoB,CACpB,MAAME,EAAOH,EAAIG,KACjB,MAAmB,iBAARA,GAAoBA,EAAKtB,OAAS,EAClC,YAAYsB,KAEZ,WAIf,GAAI7B,MAAM8B,QAAQJ,GAAM,CACpB,MAAMnB,EAASmB,EAAInB,OACnB,IAAIwB,EAAQ,IACRxB,EAAS,IACTwB,GAASN,EAAYC,EAAI,KAE7B,IAAI,IAAIM,EAAI,EAAGA,EAAIzB,EAAQyB,IACvBD,GAAS,KAAON,EAAYC,EAAIM,IAGpC,OADAD,GAAS,IACFA,EAGX,MAAME,EAAiB,sBAAsBC,KAAKC,SAASC,KAAKV,IAChE,IAAIW,EACJ,KAAIJ,EAAe1B,OAAS,GAIxB,OAAO4B,SAASC,KAAKV,GAEzB,GALIW,EAAYJ,EAAe,GAKd,UAAbI,EAIA,IACI,MAAO,UAAYC,KAAKC,UAAUb,GAAO,IAC3C,MAAOc,GACL,MAAO,SAIf,OAAId,aAAee,MACR,GAAGf,EAAIG,SAASH,EAAIgB,YAAYhB,EAAIiB,QAGxCN,EAGX,IAAIO,EAAkB,EAIlBC,EAAoB,IAFoB,oBAAhBC,aAA8B,EAAIpC,EAAOC,SAAS,QAAQmC,YAAcA,aAE3D,SAEzC,MAAMC,EAAwD,mBAAjCF,EAAkBG,WACzC,SAAUC,EAAKC,GACjB,OAAOL,EAAkBG,WAAWC,EAAKC,IAEvC,SAAUD,EAAKC,GACjB,MAAMC,EAAMN,EAAkBO,OAAOH,GAErC,OADAC,EAAKG,IAAIF,GACF,CACHG,KAAML,EAAI1C,OACVgD,QAASJ,EAAI5C,SAIrB,SAASiD,EAAkBP,EAAKQ,EAAQC,GAEpC,QAAgBxD,IAAZwD,EAAuB,CACvB,MAAMP,EAAMN,EAAkBO,OAAOH,GAC/B7B,EAAMqC,EAAON,EAAI5C,QAGvB,OAFAS,IAAkBM,SAASF,EAAKA,EAAM+B,EAAI5C,QAAQ8C,IAAIF,GACtDP,EAAkBO,EAAI5C,OACfa,EAGX,IAAIC,EAAM4B,EAAI1C,OACVa,EAAMqC,EAAOpC,GAEjB,MAAMsC,EAAM3C,IAEZ,IAAI4C,EAAS,EAEb,KAAOA,EAASvC,EAAKuC,IAAU,CAC3B,MAAMC,EAAOZ,EAAIa,WAAWF,GAC5B,GAAIC,EAAO,IAAM,MACjBF,EAAIvC,EAAMwC,GAAUC,EAGxB,GAAID,IAAWvC,EAAK,CACD,IAAXuC,IACAX,EAAMA,EAAIc,MAAMH,IAEpBxC,EAAMsC,EAAQtC,EAAKC,EAAKA,EAAMuC,EAAsB,EAAbX,EAAI1C,QAC3C,MAAM2C,EAAOlC,IAAkBM,SAASF,EAAMwC,EAAQxC,EAAMC,GAG5DuC,GAFYb,EAAaE,EAAKC,GAEhBK,QAIlB,OADAX,EAAkBgB,EACXxC,EAGX,IAAI4C,EAAuB,KAC3B,SAASC,IAIL,OAH6B,OAAzBD,GAAiCA,EAAqB/C,SAAW,kBACjE+C,EAAuB,IAAIE,WAAW,kBAEnCF,EAGX,SAASG,EAAWC,GAChB,OAAOA,QAGX,SAASC,EAAaC,EAAUC,GAC5B,KAAMD,aAAoBC,GACtB,MAAM,IAAI9B,MAAM,wBAAwB8B,EAAM1C,QAElD,OAAOyC,EAASlD,IAIb,SAASoD,IACZ,cAGJ,SAASC,EAAYC,EAAGC,GACpB,IACI,OAAOD,EAAEE,MAAMC,KAAMF,GACvB,MAAOG,GACL,uBAA0BvD,EAAcuD,KASxBC,OAAOC,OAAO,CAAEC,KAAK,EAAE,EAAI,OAAOC,KAAK,EAAE,EAAI,SAA9D,MAGMC,EAAOJ,OAAOC,OAAO,CAAEI,MAAM,EAAE,EAAI,QAAQC,MAAM,EAAE,EAAI,UAMvDC,GAHWP,OAAOC,OAAO,CAAEO,IAAI,EAAE,EAAI,MAAMC,KAAK,EAAE,EAAI,SAGxCT,OAAOC,OAAO,CAAES,MAAM,EAAE,EAAI,QAAQC,SAAS,EAAE,EAAI,WAAWC,WAAW,EAAE,EAAI,gBAG7FC,EAAWb,OAAOC,OAAO,CAAEa,QAAQ,EAAE,EAAI,UAAUC,cAAc,EAAE,EAAI,gBAAgBC,aAAa,EAAE,EAAI,eAAeC,YAAY,EAAE,EAAI,cAAcL,WAAW,EAAE,EAAI,aAAaM,aAAa,EAAE,EAAI,eAAeC,kBAAkB,EAAE,EAAI,oBAAoBC,gBAAgB,EAAE,EAAI,kBAAkBC,gBAAgB,EAAE,EAAI,oBAIzU,MAAMC,EAET,cAAcjF,GACV,MAAMI,EAAMuD,OAAOuB,OAAOD,EAAME,WAGhC,OAFA/E,EAAIJ,IAAMA,EAEHI,EAGX,qBACI,MAAMJ,EAAMyD,KAAKzD,IAGjB,OAFAyD,KAAKzD,IAAM,EAEJA,EAGX,OACI,MAAMA,EAAMyD,KAAK2B,qBACjB,mBAAsBpF,GAK1B,YAEI,OADU,wBAA2ByD,KAAKzD,OAC3B,EAKnB,UAAUqF,GACN,wBAA2B5B,KAAKzD,IAAKqF,GAKzC,aAEI,OADU,yBAA4B5B,KAAKzD,OAC5B,EAKnB,WAAWqF,GACP,yBAA4B5B,KAAKzD,IAAKqF,GAK1C,mBAEI,OADU,+BAAkC5B,KAAKzD,OAClC,EAKnB,iBAAiBqF,GACb,+BAAkC5B,KAAKzD,IAAKqF,GAOhD,KAAKrG,GACD,IAAIsG,EAAM,aAAgB7B,KAAKzD,IAAKhB,GACpC,OAAOuG,EAAOC,OAAOF,GAOzB,SAAStG,EAAKyG,GACVxC,EAAawC,EAAQF,GACrB,IAAIG,EAAOD,EAAOzF,IAClByF,EAAOzF,IAAM,EACb,iBAAoByD,KAAKzD,IAAKhB,EAAK0G,GAOvC,UAAU1G,GACNiE,EAAajE,EAAK2G,GAClB,IAAID,EAAO1G,EAAIgB,IACfhB,EAAIgB,IAAM,EACV,IAAIsF,EAAM,kBAAqB7B,KAAKzD,IAAK0F,GACzC,OAAOH,EAAOC,OAAOF,GAQzB,WAAWM,EAAKC,GAEZ,OADU,mBAAsBpC,KAAKzD,IAAK4F,EAAKC,KAChC,EAOnB,SAAS7G,GACLiE,EAAajE,EAAK2G,GAClB,IAAID,EAAO1G,EAAIgB,IAGf,OAFAhB,EAAIgB,IAAM,EACA,iBAAoByD,KAAKzD,IAAK0F,KACzB,EAOnB,YAAY1G,GACR,IAAIsG,EAAM,oBAAuB7B,KAAKzD,IAAKhB,GAC3C,OAAO2G,EAAOH,OAAOF,GAQzB,SAASQ,EAAMC,GACX9C,EAAa6C,EAAMH,GACnB,IAAID,EAAOI,EAAK9F,IAChB8F,EAAK9F,IAAM,EACXiD,EAAa8C,EAAIJ,GACjB,IAAIK,EAAOD,EAAG/F,IAGd,OAFA+F,EAAG/F,IAAM,EACC,iBAAoByD,KAAKzD,IAAK0F,EAAMM,KAC/B,EAQnB,kBAAkBF,EAAMC,EAAIE,GACxBhD,EAAa6C,EAAMH,GACnB,IAAID,EAAOI,EAAK9F,IAChB8F,EAAK9F,IAAM,EACXiD,EAAa8C,EAAIJ,GACjB,IAAIK,EAAOD,EAAG/F,IACd+F,EAAG/F,IAAM,EACTiD,EAAagD,EAAsBC,GACnC,IAAIC,EAAOF,EAAqBjG,IAGhC,OAFAiG,EAAqBjG,IAAM,EACjB,0BAA6ByD,KAAKzD,IAAK0F,EAAMM,EAAMG,KAC9C,EAQnB,mBAAmBL,EAAMC,EAAIE,GACzBhD,EAAa6C,EAAMH,GACnB,IAAID,EAAOI,EAAK9F,IAChB8F,EAAK9F,IAAM,EACXiD,EAAa8C,EAAIJ,GACjB,IAAIK,EAAOD,EAAG/F,IACd+F,EAAG/F,IAAM,EACTiD,EAAagD,EAAsBC,GACnC,IAAIC,EAAOF,EAAqBjG,IAGhC,OAFAiG,EAAqBjG,IAAM,EACjB,2BAA8ByD,KAAKzD,IAAK0F,EAAMM,EAAMG,KAC/C,EAQnB,WAAWL,EAAMC,GACb9C,EAAa6C,EAAMH,GACnB,IAAID,EAAOI,EAAK9F,IAChB8F,EAAK9F,IAAM,EACXiD,EAAa8C,EAAIJ,GACjB,IAAIK,EAAOD,EAAG/F,IAGd,OAFA+F,EAAG/F,IAAM,EACC,mBAAsByD,KAAKzD,IAAK0F,EAAMM,KACjC,EAMnB,QAEI,OADU,cAAiBvC,KAAKzD,KAOpC,YAEI,OADU,kBAAqByD,KAAKzD,OACrB,EAMnB,aAEI,OADU,mBAAsByD,KAAKzD,OACtB,EAOnB,WAAWoG,GAEP,OADU,mBAAsB3C,KAAKzD,IAAKoG,KAC3B,EAMnB,QAEI,OADU,cAAiB3C,KAAKzD,KAQpC,WAAWhB,GAEP,OADU,mBAAsByE,KAAKzD,IAAKhB,KAC3B,EAQnB,WAAW8G,EAAMC,GACb9C,EAAa6C,EAAMH,GACnB,IAAID,EAAOI,EAAK9F,IAChB8F,EAAK9F,IAAM,EACXiD,EAAa8C,EAAIJ,GACjB,IAAIK,EAAOD,EAAG/F,IACd+F,EAAG/F,IAAM,EACT,IAAIsF,EAAM,mBAAsB7B,KAAKzD,IAAK0F,EAAMM,GAChD,OAAOf,EAAMO,OAAOF,GAQxB,WAAWQ,EAAMC,GACb9C,EAAa6C,EAAMH,GACnB,IAAID,EAAOI,EAAK9F,IAChB8F,EAAK9F,IAAM,EACXiD,EAAa8C,EAAIJ,GACjB,IAAIK,EAAOD,EAAG/F,IACd+F,EAAG/F,IAAM,EACT,IAAIsF,EAAM,mBAAsB7B,KAAKzD,IAAK0F,EAAMM,GAChD,OAAOf,EAAMO,OAAOF,GAMxB,eAEI,OADU,qBAAwB7B,KAAKzD,OACxB,EAQnB,uBAAuBqG,EAAQC,GAC3BrD,EAAaoD,EAAQd,GACrB,IAAIG,EAAOW,EAAOrG,IAClBqG,EAAOrG,IAAM,EACbiD,EAAaqD,EAAUJ,GACvB,IAAIF,EAAOM,EAAStG,IAGpB,OAFAsG,EAAStG,IAAM,EACL,wBAA2B0F,EAAMM,KAC5B,EAQnB,yBAAyBF,EAAMO,GAC3BpD,EAAa6C,EAAMI,GACnB,IAAIR,EAAOI,EAAK9F,IAChB8F,EAAK9F,IAAM,EACXiD,EAAaoD,EAAQH,GACrB,IAAIF,EAAOK,EAAOrG,IAGlB,OAFAqG,EAAOrG,IAAM,EAEE,IADL,0BAA6B0F,EAAMM,GASjD,YAAYO,EAAOC,EAAQC,GACvB,IAAInB,EAAM,YAAeiB,EAAOC,EAAQC,GACxC,OAAOxB,EAAMO,OAAOF,GAQxB,iBAAiBoB,EAAOC,GACpB1D,EAAayD,EAAOzB,GACpB,IAAIS,EAAOgB,EAAM1G,IACjB0G,EAAM1G,IAAM,EACZ,IAAIsF,EAAM,kBAAqBI,EAAMiB,GACrC,OAAO1B,EAAMO,OAAOF,IAMrB,MAAMK,EAET,cAAc3F,GACV,MAAMI,EAAMuD,OAAOuB,OAAOS,EAAOR,WAGjC,OAFA/E,EAAIJ,IAAMA,EAEHI,EAGX,qBACI,MAAMJ,EAAMyD,KAAKzD,IAGjB,OAFAyD,KAAKzD,IAAM,EAEJA,EAGX,OACI,MAAMA,EAAMyD,KAAK2B,qBACjB,oBAAuBpF,GAK3B,UAEI,OADU,uBAA0ByD,KAAKzD,OAC1B,EAKnB,QAAQqF,GACJ,uBAA0B5B,KAAKzD,IAAKqF,GAKxC,UAEI,OADU,uBAA0B5B,KAAKzD,OAC1B,EAKnB,QAAQqF,GACJ,uBAA0B5B,KAAKzD,IAAKqF,GAMxC,YAAYO,EAAKC,GACb,IAAIP,EAAM,cAAiBM,EAAKC,GAChC,OAAOF,EAAOH,OAAOF,GAMzB,GAAGsB,GAGC,OAFA3D,EAAa2D,EAAOjB,GAEL,IADL,YAAelC,KAAKzD,IAAK4G,EAAM5G,MAO1C,MAAM6G,EAET,cAAc7G,GACV,MAAMI,EAAMuD,OAAOuB,OAAO2B,EAAK1B,WAG/B,OAFA/E,EAAIJ,IAAMA,EAEHI,EAGX,qBACI,MAAMJ,EAAMyD,KAAKzD,IAGjB,OAFAyD,KAAKzD,IAAM,EAEJA,EAGX,OACI,MAAMA,EAAMyD,KAAK2B,qBACjB,kBAAqBpF,GAKzB,sBAEI,OADU,iCAAoCyD,KAAKzD,OACpC,EAKnB,oBAAoBqF,GAChB,iCAAoC5B,KAAKzD,IAAKqF,GAMlD,sBAEI,OADU,2BAA8B5B,KAAKzD,KAOjD,oBAEI,OADU,yBAA4ByD,KAAKzD,OAC5B,EAMnB,eAEI,OADU,oBAAuByD,KAAKzD,OACvB,EAMnB,QAEI,OADU,aAAgByD,KAAKzD,KAQnC,mBAAmBhB,GACfiE,EAAajE,EAAK2G,GAClB,IAAIL,EAAM,0BAA6B7B,KAAKzD,IAAKhB,EAAIgB,KACrD,OAAOuF,EAAOC,OAAOF,GAKzB,iBAAiBwB,GACb,wBAA2BrD,KAAKzD,IAAK8G,GAOzC,aAAa9H,GACTiE,EAAajE,EAAK2G,GAClB,oBAAuBlC,KAAKzD,IAAKhB,EAAIgB,KAKzC,iBACI,sBAAyByD,KAAKzD,KAQlC,UAAU8F,EAAMC,GACZ9C,EAAa6C,EAAMH,GACnB,IAAID,EAAOI,EAAK9F,IAChB8F,EAAK9F,IAAM,EACXiD,EAAa8C,EAAIJ,GACjB,IAAIK,EAAOD,EAAG/F,IAGd,OAFA+F,EAAG/F,IAAM,EACC,iBAAoByD,KAAKzD,IAAK0F,EAAMM,KAC/B,EAOnB,aAAaF,EAAMC,GACf9C,EAAa6C,EAAMH,GACnB,IAAID,EAAOI,EAAK9F,IAChB8F,EAAK9F,IAAM,EACXiD,EAAa8C,EAAIJ,GACjB,IAAIK,EAAOD,EAAG/F,IACd+F,EAAG/F,IAAM,EACT,oBAAuByD,KAAKzD,IAAK0F,EAAMM,GAO3C,aAAaF,EAAMC,GACf9C,EAAa6C,EAAMH,GACnB,IAAID,EAAOI,EAAK9F,IAChB8F,EAAK9F,IAAM,EACXiD,EAAa8C,EAAIJ,GACjB,IAAIK,EAAOD,EAAG/F,IACd+F,EAAG/F,IAAM,EACT,oBAAuByD,KAAKzD,IAAK0F,EAAMM,GAM3C,eAAeU,GACXzD,EAAayD,EAAOzB,GACpB,IAAIS,EAAOgB,EAAM1G,IACjB0G,EAAM1G,IAAM,EACZ,sBAAyByD,KAAKzD,IAAK0F,GAMvC,YAAYgB,GACRzD,EAAayD,EAAOzB,GACpB,IAAIS,EAAOgB,EAAM1G,IACjB0G,EAAM1G,IAAM,EACZ,mBAAsByD,KAAKzD,IAAK0F,GASpC,YAAYa,EAAOC,EAAQG,EAAYI,EAAYD,GAC/C,IAAIxB,EAAM,WAAciB,EAAOC,EAAQG,EAAYI,EAAYD,GAC/D,OAAOD,EAAKrB,OAAOF,GAavB,uBAAuBiB,EAAOC,EAAQG,EAAYI,EAAYD,EAAcE,EAAWC,EAAcC,GACjG,IAAIxB,EAAOtD,EAAkB4E,EAAW,oBAAwB,sBAC5DG,EAAO3F,EACP8D,EAAM,uBAA0BiB,EAAOC,EAAQG,EAAYI,EAAYD,EAAcpB,EAAMyB,EAAMF,EAAcC,GACnH,OAAOL,EAAKrB,OAAOF,GAKvB,YAAY8B,GACRnE,EAAamE,EAAOC,GACpB,IAAI3B,EAAO0B,EAAMpH,IACjBoH,EAAMpH,IAAM,EACZ,mBAAsByD,KAAKzD,IAAK0F,GAIpC,OACI,YAAejC,KAAKzD,KAIxB,UACI,eAAkByD,KAAKzD,MAMxB,MAAMqH,EAET,cAAcrH,GACV,MAAMI,EAAMuD,OAAOuB,OAAOmC,EAAQlC,WAGlC,OAFA/E,EAAIJ,IAAMA,EAEHI,EAGX,qBACI,MAAMJ,EAAMyD,KAAKzD,IAGjB,OAFAyD,KAAKzD,IAAM,EAEJA,EAGX,OACI,MAAMA,EAAMyD,KAAK2B,qBACjB,qBAAwBpF,GAQ5B,YAAYuG,EAAOC,EAAQQ,GACvB,IAAItB,EAAOtD,EAAkB4E,EAAW,oBAAwB,sBAC5DG,EAAO3F,EACP8D,EAAM,cAAiBiB,EAAOC,EAAQd,EAAMyB,GAChD,OAAOE,EAAQ7B,OAAOF,GAS1B,uBAAuBiB,EAAOC,EAAQc,GAClC,IAAIhC,EAAM,0BAA6BiB,EAAOC,EAAQrG,EAAcmH,IACpE,OAAOD,EAAQ7B,OAAOF,GAM1B,mBAAmB8B,GACf,6BAAgC3D,KAAKzD,IAAKG,EAAciH,IAM5D,kBAAkBA,GACd,4BAA+B3D,KAAKzD,IAAKoH,GAM7C,iBAAiBA,GACb,2BAA8B3D,KAAKzD,IAAKoH,GAK5C,mBACI,2BAA8B3D,KAAKzD,KAOvC,mBAAmB0G,GAGf,OAFAzD,EAAayD,EAAOzB,GAEL,IADL,6BAAgCxB,KAAKzD,IAAK0G,EAAM1G,KAO9D,KAAK0G,GACDzD,EAAayD,EAAOzB,GACpB,eAAkBxB,KAAKzD,IAAK0G,EAAM1G,MAMnC,MAAMkG,EAET,cAAclG,GACV,MAAMI,EAAMuD,OAAOuB,OAAOgB,EAAMf,WAGhC,OAFA/E,EAAIJ,IAAMA,EAEHI,EAGX,qBACI,MAAMJ,EAAMyD,KAAKzD,IAGjB,OAFAyD,KAAKzD,IAAM,EAEJA,EAGX,OACI,MAAMA,EAAMyD,KAAK2B,qBACjB,mBAAsBpF,GAK1B,WAEI,OADU,uBAA0ByD,KAAKzD,OAC1B,EAKnB,SAASqF,GACL,uBAA0B5B,KAAKzD,IAAKqF,GAKxC,eAEI,OADU,2BAA8B5B,KAAKzD,OAC9B,EAKnB,aAAaqF,GACT,2BAA8B5B,KAAKzD,IAAKqF,GAM5C,YAAYe,EAAMmB,GACd,IAAIjC,EAAM,YAAec,EAAMmB,GAC/B,OAAOrB,EAAMV,OAAOF,IAsBrB,MAAMC,EAET,cAAcvF,GACV,MAAMI,EAAMuD,OAAOuB,OAAOK,EAAOJ,WAGjC,OAFA/E,EAAIJ,IAAMA,EAEHI,EAGX,qBACI,MAAMJ,EAAMyD,KAAKzD,IAGjB,OAFAyD,KAAKzD,IAAM,EAEJA,EAGX,OACI,MAAMA,EAAMyD,KAAK2B,qBACjB,oBAAuBpF,GAM3B,eACI,IAAIsF,EAAM,4BAA+B7B,KAAKzD,KAC9C,OAAe,IAARsF,OAAYxG,EAAYoH,EAAMV,OAAOF,GAMhD,aAAaD,GACT,IAAIK,EAAO,EACN3C,EAAWsC,KACZpC,EAAaoC,EAAMa,GACnBR,EAAOL,EAAKrF,IACZqF,EAAKrF,IAAM,GAEf,4BAA+ByD,KAAKzD,IAAK0F,GAM7C,YAEI,OADU,yBAA4BjC,KAAKzD,OAC5B,EAMnB,UAAUqF,GACN,yBAA4B5B,KAAKzD,IAAKqF,GAO1C,YAAYmC,EAAOC,GACf,IAAI/B,EAAO,EACN3C,EAAW0E,KACZxE,EAAawE,EAAUvB,GACvBR,EAAO+B,EAASzH,IAChByH,EAASzH,IAAM,GAEnB,IAAIsF,EAAM,aAAgBkC,EAAO9B,GACjC,OAAOH,EAAOC,OAAOF,GAQzB,UAAUc,EAAMmB,GACZ,IAAIjC,EAAM,YAAec,EAAMmB,GAC/B,OAAOhC,EAAOC,OAAOF,GAMzB,eACI,IAAIA,EAAM,iBACV,OAAOC,EAAOC,OAAOF,GAMzB,gBACI,IAAIA,EAAM,kBACV,OAAOC,EAAOC,OAAOF,IAItB,SAASoC,EAA2BrC,IApkC3C,SAAoBrG,GAChB,MAAMsG,EAAMvG,EAAUC,IAP1B,SAAoBA,GACZA,EAAM,KACVL,EAAKK,GAAOE,EACZA,EAAYF,IAKZ2I,CAAW3I,GAmkCX4I,CAAWvC,GAGR,SAASwC,EAAsBxC,EAAMyC,GAExC,OAAO3H,EADGJ,EAAmBsF,EAAMyC,IAIhC,SAASC,IAEZ,OAAO5H,EADG,IAAIkB,OAIX,SAAS2G,EAA6B3C,EAAMyC,GAC/C,IACIpC,EAAOtD,EADDrD,EAAU+I,GAAMvG,MACQ,oBAAwB,sBACtD4F,EAAO3F,EACXqB,IAAkBwC,EAAO,EAAI,GAAK8B,EAClCtE,IAAkBwC,EAAO,EAAI,GAAKK,EAG/B,SAASuC,EAA6B5C,EAAMyC,GAC/C,IACII,QAAQC,MAAMpI,EAAmBsF,EAAMyC,IACzC,QACE,kBAAqBzC,EAAMyC,IAI5B,SAASM,IAAgC,OAAO/E,GAAY,WAE/D,OAAOlD,EADGkI,KAAKA,QAEhBC,WAEI,SAASC,EAA+BlD,EAAMyC,EAAMU,GAEvD,OAAOrI,EADGpB,EAAUsG,GAAM9F,QAAQQ,EAAmB+H,EAAMU,KAIxD,SAASC,EAA8BpD,GAE1C,OAAOlF,EADGpB,EAAUsG,GAAMqD,QAIvB,SAASC,EAAgCtD,GAE5C,OAAOlF,EADGpB,EAAUsG,GAAMuD,UAIvB,SAASC,EAAwBxD,GAEpC,YAD8BvG,IAApBC,EAAUsG,GAIjB,SAASyD,EAAuCzD,GAEnD,OAAOlF,EADGpB,EAAUsG,GAAM0D,iBAIvB,SAASC,EAAuC3D,EAAMyC,GACzD/I,EAAUsG,GAAM0D,gBAAgBhK,EAAU+I,IAGvC,SAASmB,EAAsC5D,EAAMyC,EAAMU,GAz8BlE,IAA6BxI,EAAKC,EA08B9BlB,EAAUsG,GAAM6D,gBA18BSlJ,EA08B0B8H,EA18BrB7H,EA08B2BuI,EAz8BlD5I,IAAkBM,SAASF,EAAM,EAAGA,EAAM,EAAIC,KA48BlD,SAASkJ,IAEZ,OAAOhJ,EADGb,GAIP,SAAS8J,EAAyC/D,GAErD,OADUtG,EAAUsG,aAAiBgE,OAIlC,SAASC,EAAgCjE,GAC5C,IAAIC,EAAMvG,EAAUsG,GAAMkE,SAC1B,OAAOxG,EAAWuC,GAAO,EAAInF,EAAcmF,GAGxC,SAASkE,EAAsCnE,EAAMyC,EAAMU,GAC9D,IAAIlD,EAAMvG,EAAUsG,GAAMoE,eAAe1J,EAAmB+H,EAAMU,IAClE,OAAOzF,EAAWuC,GAAO,EAAInF,EAAcmF,GAGxC,SAASoE,EAA2BrE,GACvC6C,QAAQyB,IAAI5K,EAAUsG,IAGnB,SAASuE,EAA2DvE,GAEvE,OADUtG,EAAUsG,aAAiBwE,yBAIlC,SAASC,EAAsCzE,EAAMyC,GACxD/I,EAAUsG,GAAM0E,YAAchL,EAAU+I,GAGrC,SAASkC,GAAoC3E,EAAMyC,GACtD/I,EAAUsG,GAAM4E,UAAYlL,EAAU+I,GAGnC,SAASoC,GAAoC7E,EAAMyC,GACtD/I,EAAUsG,GAAM8E,UAAYrC,EAGzB,SAASsC,GAAiC/E,GAC7CtG,EAAUsG,GAAMgF,YAGb,SAASC,GAA4BjF,GACxCtG,EAAUsG,GAAMxG,OAGb,SAAS0L,GAA8BlF,GAC1CtG,EAAUsG,GAAMmF,SAGb,SAASC,KAA+B,OAAOpH,GAAY,SAAUgC,EAAMyC,EAAMU,EAAMkC,EAAMC,EAAMC,GACtG7L,EAAUsG,GAAMwF,IAAI/C,EAAMU,EAAMkC,EAAMC,EAAMC,KAC7CtC,WAEI,SAASwC,GAAgCzF,EAAMyC,EAAMU,EAAMkC,EAAMC,GACpE5L,EAAUsG,GAAM0F,SAASjD,EAAMU,EAAMkC,EAAMC,GAGxC,SAASK,GAAkC3F,EAAMyC,EAAMU,EAAMkC,EAAMC,GACtE5L,EAAUsG,GAAM4F,WAAWnD,EAAMU,EAAMkC,EAAMC,GAG1C,SAASO,GAAoD7F,GAEhE,OADUtG,EAAUsG,aAAiB8F,kBAIlC,SAASC,GAAgC/F,EAAMyC,GAClD/I,EAAUsG,GAAMkB,MAAQuB,IAAS,EAG9B,SAASuD,GAAiChG,EAAMyC,GACnD/I,EAAUsG,GAAMmB,OAASsB,IAAS,EAG/B,SAASwD,KAAsC,OAAOjI,GAAY,SAAUgC,EAAMyC,EAAMU,GAC3F,IAAIlD,EAAMvG,EAAUsG,GAAMkG,WAAWxL,EAAmB+H,EAAMU,IAC9D,OAAOzF,EAAWuC,GAAO,EAAInF,EAAcmF,KAC5CgD,WAEI,SAASkD,GAAiCnG,EAAMyC,GAEnD,OAAO3H,EADG,IAAIsL,SAAS1L,EAAmBsF,EAAMyC,KAI7C,SAAS4D,KAAgC,OAAOrI,GAAY,SAAUgC,EAAMyC,GAE/E,OAAO3H,EADGpB,EAAUsG,GAAMrE,KAAKjC,EAAU+I,OAE1CQ,WAEI,SAASqD,KAAgC,OAAOtI,GAAY,WAE/D,OAAOlD,EADGkI,KAAKA,QAEhBC,WAEI,SAASsD,KAAkC,OAAOvI,GAAY,WAEjE,OAAOlD,EADG0L,OAAOA,UAElBvD,WAEI,SAASwD,KAAsC,OAAOzI,GAAY,WAErE,OAAOlD,EADG4L,WAAWA,cAEtBzD,WAEI,SAAS0D,KAAkC,OAAO3I,GAAY,WAEjE,OAAOlD,EADG,EAAA8L,EAAOC,UAElB5D,WAEI,SAAS6D,GAA8B9G,GAE1C,OAAOlF,EADGpB,EAAUsG,GAAMxF,QAIvB,SAASuM,GAA2B/G,GAEvC,OAAOlF,EADG,IAAIL,WAAWf,EAAUsG,KAIhC,SAASgH,GAA2BhH,EAAMyC,EAAMU,GACnDzJ,EAAUsG,GAAMpD,IAAIlD,EAAU+I,GAAOU,IAAS,GAG3C,SAAS8D,GAA8BjH,GAE1C,OADUtG,EAAUsG,GAAMlG,OAIvB,SAASoN,GAAqClH,GAEjD,OAAOlF,EADG,IAAIL,WAAWuF,IAAS,IAI/B,SAASmH,GAAgCnH,EAAMyC,EAAMU,GAExD,OAAOrI,EADGpB,EAAUsG,GAAMnF,SAAS4H,IAAS,EAAGU,IAAS,IAIrD,SAASiE,GAA4BpH,GAExC,OAAOlF,EADGpB,EAAUsG,IAIjB,SAASqH,GAAwBrH,EAAMyC,GAC1C,IACIpC,EAAOtD,EADD/B,EAAYtB,EAAU+I,IACE,oBAAwB,sBACtDX,EAAO3F,EACXqB,IAAkBwC,EAAO,EAAI,GAAK8B,EAClCtE,IAAkBwC,EAAO,EAAI,GAAKK,EAG/B,SAASiH,GAAiBtH,EAAMyC,GACnC,MAAM,IAAIzG,MAAMtB,EAAmBsF,EAAMyC,IAGtC,SAAS8E,KAEZ,OAAOzM,EADG,e,g/DC9yCd,IAAI0M,EAAc,EACdC,EAAe,EAEfC,EAAa,EACbC,EAAe,EAEnB,MAEMC,EAEY,sBAFZA,EAGiB,4BASvB,UAImB1D,SAASE,eAAe,YAA3C,MACMyD,EAAc3D,SAASE,eAAe,YACtC0D,EAAW5D,SAASE,eAAe,UACnC2D,EAAgB7D,SAASE,eAAe,cAE7BF,SAASE,eAAe,YAChC4D,QAAUC,EAEnB,IAAIC,EAAgB,KAChBC,EAmKJ,SAAwBC,EAAKC,EAAY,SAAUC,GAAO,GAClC,MAAjBJ,GACCK,cAAcL,GAGlBL,EAAYjM,UAAY,eAAeyM,IACvCR,EAAYW,UAAYJ,EACxBP,EAAYY,QAAS,EAElBH,IACCJ,EAAgBQ,YAAW,KACvBb,EAAYY,QAAS,IAzMV,OA6BnBE,EAAgBf,EAEhBgB,EAAO,KACPC,EAAU,KAEVC,EAAS,GAEbb,IAMA,MAAMhG,EAASiC,SAASE,eAAe,eAgBvC,SAAS6D,IACLW,EAAO,IAAI,KAAKpB,EAAaC,EAAcC,EAAY,WAAYC,GACnEkB,EAAU,IAAI,KArEG,IACC,IAoEiC,eACnDD,EAAKG,YAAYF,GACjBD,EAAKI,OAELC,IACAH,EAAS,GACTH,EAAgBf,EA4IpB,SAASqB,IAEL,OADWL,EAAKxH,gBAEZ,KAAK,WACD0G,EAASU,UAAY,YACrB,MACJ,KAAK,WACDV,EAASU,UAAY,eA1KjCvG,EAAOiH,iBAAiB,SAAUC,IAC9B,IAAIC,EA4HR,SAAqBnH,EAAQoH,GACzB,IAAIC,EAAOrH,EAAOsH,wBAClB,MAAO,CACH5L,EAAG0L,EAAIG,QAAUF,EAAKG,KACtBC,EAAGL,EAAIM,QAAUL,EAAKM,KAhIXC,CAAY5H,EAAQkH,IAyBvC,SAA8BW,GAE1B,OAAOnB,GAEH,KAAKf,EACD,GAAIgB,EAAKmB,mBAAmBD,GAAY3H,OAAS,cAC7C,OAGJ,GAAIyG,EAAKmB,mBAAmBD,GAAY1H,SAASrB,MAAQ6H,EAAKxH,eAC1D,OAKJ0H,EAAOlP,KAAKkQ,GACZnB,EAAgBf,EAChBgB,EAAKoB,aAAaF,GAClBlB,EAAKI,OAEL,MAGJ,KAAKpB,EAID,IAAKkB,EAAO,GAAGmB,GAAGH,GAAa,CAE3B,GAAIlB,EAAKmB,mBAAmBD,GAAY3H,OAAS,WAC7C,OAOJ,GAFA2G,EAAOlP,KAAKkQ,GAES,GAAjBhB,EAAOhP,OAIP,OAHAqO,EAAU,4CAA4CW,EAAOhP,eAC7D+I,QAAQC,MAAM,4CAA4CgG,EAAOhP,UAOrE,OAFa8O,EAAKsB,UAAUpB,EAAO,GAAIA,EAAO,KAG1C,KAAK,aACDjG,QAAQyB,IAAI,0BAA0BsE,EAAKuB,WAEvCC,EAAWC,UACXzB,EAAK0B,UACLvC,EAAcS,UAAY,YAAYI,EAAK2B,gBAAgBC,eAAe,0BAC1E3H,QAAQyB,IAAI,8BAA8BsE,EAAKuB,YAGnD,MACJ,KAAK,uBACDhC,EAAU,6BACV,MACJ,KAAK,qBACDA,EAAU,kCACV,MACJ,KAAK,qBACDA,EAAU,4BACV,MACJ,KAAK,kBACDA,EAAU,0BACV,MACJ,KAAK,iBACDA,EAAU,gEACV,MACJ,KAAK,mBACDA,EAAU,6BACV,MACJ,KAAK,gBACDA,EAAU,iCACV,MACJ,KAAK,kBACDA,EAAU,2BAMtBS,EAAK6B,iBACL7B,EAAKI,OACLF,EAAS,GACTH,EAAgBf,EAEhB,MACJ,IAzJK,UA0JD/E,QAAQyB,IAAI,uBAIpB2E,IAlHAyB,CALW,IAAI,KACXC,KAAKC,MAAOxB,EAASM,EAAIzH,EAAO4I,aAAgBpD,GAChDkD,KAAKC,MAAOxB,EAASzL,EAAIsE,EAAO6I,YAAetD,QA8KvD,MAAMuD,EAAW7G,SAASE,eAAe,SASzC2G,EAASC,SALO,KAEZxD,EAAcyD,SAASF,EAAShJ,OAChCkG,KAGJ8C,EAAShJ,MAAQ,EAEjB,MAAMmJ,EAAYhH,SAASE,eAAe,UAU1C8G,EAAUF,SANO,KAEbvD,EAAewD,SAASC,EAAUnJ,OAClCoJ,EAAaC,IAAQ3D,EAAe,EAAK,EACzCQ,KAGJiD,EAAUnJ,MAAQ,EAElB,MAAMoJ,EAAejH,SAASE,eAAe,aAU7C+G,EAAaH,SANO,KAEhBtD,EAAauD,SAASE,EAAapJ,OACnCc,QAAQyB,WAAU,GAClB2D,KAGJkD,EAAapJ,MAAQ,EAErB,MAAMsJ,EAAmBnH,SAASE,eAAe,mBASjDiH,EAAiBL,SALO,KAEpBrD,EAAesD,SAASI,EAAiBtJ,OACzC6G,EAAK0C,iBAAiB3D,IAG1B0D,EAAiBtJ,MAAQ,EAEzB,MAAMqI,EAAalG,SAASE,eAAe,eAO3CgG,EAAWY,SAHO,KACdnI,QAAQyB,IAAI8F,EAAWC","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*/\nexport const MoveType = Object.freeze({ Move:0,\"0\":\"Move\",Jump:1,\"1\":\"Jump\", });\n/**\n*/\nexport const Team = Object.freeze({ Black:0,\"0\":\"Black\",White:1,\"1\":\"White\", });\n/**\n*/\nexport const Strength = Object.freeze({ Man:0,\"0\":\"Man\",King:1,\"1\":\"King\", });\n/**\n*/\nexport const SquareState = Object.freeze({ Empty:0,\"0\":\"Empty\",Occupied:1,\"1\":\"Occupied\",Unplayable:2,\"2\":\"Unplayable\", });\n/**\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 * @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 * @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 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 * @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 * @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 * @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 */\n draw() {\n wasm.game_draw(this.ptr);\n }\n /**\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*/\nexport class Player {\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_player_free(ptr);\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;\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\");\n\nconst startBtn = document.getElementById(\"startBtn\");\nstartBtn.onclick = start_game;\n\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 updateTeamText();\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 console.log(`Score after your turn: ${game.score()}`);\n\n if (aiCheckBox.checked) {\n game.ai_move();\n nodeCountText.innerText = `searched ${game.last_node_count.toLocaleString(\"en-GB\")} possible moves`;\n console.log(`Score after the AI's turn: ${game.score()}`);\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}\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\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 console.log(typeof(PIECE_ROWS));\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}\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 console.log(aiCheckBox.checked);\n}\naiCheckBox.onchange = onAICheck;\n// aiCheckBox.checked = true;"],"sourceRoot":""} \ No newline at end of file diff --git a/406c9aebd9f4530de773.module.wasm b/406c9aebd9f4530de773.module.wasm new file mode 100644 index 0000000000000000000000000000000000000000..fe6b4da1e1ef203727186c7f7b219da0a8b90c98 GIT binary patch literal 121732 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 sC)=V; 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¥HbGrVf-C5wS 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 F{V#dG^uYiC literal 0 HcmV?d00001 diff --git a/cc96734576b00860ab91.module.wasm b/cc96734576b00860ab91.module.wasm deleted file mode 100644 index 61670624b02aaaa324e467c7d94f8d71c3741e7f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 124071 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

+0tOwU_%P|UFS5~8Q)SO^vv%!XQ>V?nXhGuW z2`ATxr*7;Y=B(=SRqrt6tn4VNqb8VHm(!|KsT^T|>3rfXbDXCw@+5$Nnxk^JWPj6X z&K=@}9il}zg-E{a^Dk4mTYH*$fslWj$NCb%|7q>KV&k~3Fs$$}h7Bt($yz&8lX6V2n2ADK$xl(zy^x4!#BF5I=%Padyk#odv|*8J#l($%O&5rb7yzB zJHuVt1O#v??!8m*xu^X9e@4q$3G?H(piV25RM5yP=@0G-C}1P9osgv}L8pWyQX~Ah zTNYZnCFASUR~^~zT6GAeL}Ver>bWRN=GCnWbKtQf7rZJ-WjOo1Do%Ra!s(v$YCj&V z|1T{K&Y>4zZL=(gN5TDy^79L44)91k6&3HTB{qj8O2H)?WeDgKE_`tN?1BgAW`}Ak zSz^?*AX(ip&)vhZfmvG7xe0++1UBwmIBef3vl-mAaKHAiwxF;hHhpAv=>~}X7$g^| zDyqQ)H3$j^kz5P{;r`V#zK=>a`oJ2{tV)skZWUf9-G;-2 z%fLJER0y28=7PEu9B;x)tSHRMCyJ?S*yU6{VGTG60PiQsLz*?!Y_rQI1Rh^*rzZr~ z7!4GV;u$#&e2XVbwUS$JF z*ebjp2e>?eV);~Qsq{?`GceDQcc_|SR3!>!RYIN%o+kcy$oP{zW^+hnXV9q`0B~2I z!VRyNIjlvgMHp)PzPb(M0G=*Z702B5>F8ORjHiammKdU->SR3N3JG~HF5GAAJ(Tw8 zqoKIoD3qlh^2zKErSnW_EO${0&OJ+R-oIRLoxYot$?dmgwLiBz>ol+2e*dg}e=$pv zBrY{EmE<4d@$r~Ieh=`=VaGjN)(+BovVyGzJzLA45235Vd#BE%!Z8Ac`^0DD_z-&Wsn@y!eBky^V zm=MwcAoN`_Jp+m>RaNWw`dahxBc)fx0GPbzOOFen`A&QQ-V#$`^r)t@ zWPE?%zCb!ta@G{At|B{NXpz7Sv|a)`l(Vd=@P+c|vEdkhvg6d=ceurM;F?>%I1fXL zr9g_&ekrIQy{OwNjk1GVT3s7zN)VnUAz6$#L7Ki;_M=OJl)A?^M6pV`_z1r2T!=!|Z-wCE@!PLlnBC@2eGDz;uTt6I(241y36XjKU9H%W{5Wpa5d zpJ*u1Mz*RQ4Ys$aT12V^&mqqZ@PeiXKxadi!^uymfN)d~I2C$lmPr}DN@k)|P}@O>i#jjv zJUo~D)w73?(^vU4X{)TzBUYAZXx@RN!3TM?T-Z=XtP_Bd`mnp1U z)#QUW9k>Zs7)}imQR72Ih9iMwgEngkyf@E2!vKL^TH(OdgvUjy>@9Ld&n7cvX=kas z552@C%rAlg)mtA)@3+ch@A2G?dixL(GS(9IFpjGOF7Iu#ua(#sD3#H|CNlQQx6dBp zXY^+vzyzU`F*bUKOi59js+X!zpISR-v``8#_XQG=w5~-fFb>}--fo|T_Yk8|_i7sv zPFeOO3&MgpLb)gJk_YV`1XP7X;3Dvxv6I|Z+Ma;$MD5#o_v{Nv10DeXQW$SB1p4;~ zV%Q{i+S**y(z^FS3_5JPj0OM-wHWyC6>q#HjXyP;Q;ppW(3p>qNTz5QMR<U>ehoC(1~=7s>l286RQ%X|!vpxH>rYO%-!05h|hRfEWhh28x~^m@!r_zFJ9D zIe$o~z{aCm(jj)(4?ZZq-MQ?K+EiFznz0^?3PVV?0b19XO&n|ILvkTc_w*@JV>gIT zgwqmYY;QUmcNs|$P}bb*JuHIONlPa|tjM2(skY(Q*y9(_Wx13Z*EzIqTsHi|Qz7V12-7d|P)0Uo4w=Q#|d zBUKcFE=bOpnEq38e9|d8*(R)vJS2T~KqV2TXBILXV64dtXwRys%0DeOvuEc5^9pE? z6>ZX`nss9k*=1DC$+V*OQ=lL88M&DEv%yz>wtIcpb-b~1?kvgH3TKmpFCg5v5 z$sNrs?IJFdbEUpe(a$aAW0HJ*-hmp&1h5$?*_R=g{SA5GWC3falH(M-sbb`4?N-S* zCEUGr)%#tIl{WhwefD^|_@^Y<3aF((Gb7*omRJ#cn^X99_tS1wDy(iTBJycKxt$xG zP$rCTnmG^_)|H$=<|If3mxW@6L2Q)YX_k~JD%zq}t?Ia1o;{nM*3*VnOcO;m=?Ikp z@E+e4i(i-?WRUbmsS`m8aE~!{OzeF@H2FPo+nn=s4UFq$YuoG#TiY8{OHADb#sdQO zlq2A)WAeW*7md_Ee$ev-AF42zc3zJN#&-r3G=Q`b-iJTz894RM@Msc`v=7&buv_K- zXx@RennA0LWE$05z{ly2=N%YRwj6MCREm+fAp6NY_Xtt(5;d8Cm<4YB;HPtpVLt&< zrR3lcNI>ZPY>qLe@l8&0mnB@l68pIvtt-)+>u70UpHuufwUfvc0r%AAAz?@+G5Ccj zqFo`elE)rA5V`IU5n=2|PG$pO&j zC!nqX^#J7>TIl>*_DurWEJ;#u5}-&5?Zk*dR)N>_H*%tN5hk6oJcCbS%63S<>U{#u zgZ6o(54?mB;r~`1c6X*@CV0JUEM5+_ngmMf{!W(nJ5!F-TbUzq6W+86tEIN-%pkLY~wJ@DyqPMt0>7`@e@9SRs@9(R&CQ3PxPSY!Q`{>W_20 z$R6^%yhJ|TAE;}k!JnGF&zdjgvejY>y7L+79|y973&ET`TbhOqogwHlWah9$+ z$P}P~cC%RS@I04aPs1!RwvJv>SQi+`d6NHKuAhON>}e;XgbxbSeLa9R%~&%bTjUZh zWA|@p=mxxfJW^V~L}4`ehcsG19nS!-SZ@U6ZSoE-BuO+yd^h{2SVmpPjp#o?l~B{! zpjH6SiDOj?LXyV&mprcbkxc@Kny>>--~@~X3%_Ze8rlrleK5-iQImAY|GmdcTOW7A zCqFT639Y9KBsc*1qCI?KJj3EYV%4cSFMcG!Z(svDJ_0Qg<24afAXDzS{}tQ)p<}#h zDPd2C>uKX+^)XN^gJh8VsVcI?>Hoyy6uM?=JinT=t0xk`QB5R70MER?Pr3ZkH3imuFtoeuk2s2dU~T;2fX{ z(m!+%-7)WZ00~McaMQ(tYB3)0o%0SvK96=B=sdvoMY+_yYux%v4;-xCv|ws;#jsV_g2R?e}KCb`b*A{ zOG0{wVwRHZ2x4vSF(*3a#+P1jRl360E^wCIWXU

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/board/enums/enum.MoveType.html b/doc/draught/board/enums/enum.MoveType.html index d699618..6e13972 100644 --- a/doc/draught/board/enums/enum.MoveType.html +++ b/doc/draught/board/enums/enum.MoveType.html @@ -1,6 +1,6 @@ MoveType in draught::board::enums - Rust -