From 2c7854f2d25a28d5e7bdd3922a8e3af910a1f8d9 Mon Sep 17 00:00:00 2001 From: yukirij Date: Thu, 23 Jan 2025 00:39:58 -0800 Subject: [PATCH] Add cpu auto to checkmate trials. --- www/js/game_config.js | 1 + www/js/game_config_const.js | 18 ++++++++++++------ www/js/interface.js | 33 +++++++++++++++++++++------------ 3 files changed, 34 insertions(+), 18 deletions(-) diff --git a/www/js/game_config.js b/www/js/game_config.js index a34ce86..6b6ce80 100644 --- a/www/js/game_config.js +++ b/www/js/game_config.js @@ -11,6 +11,7 @@ class GameConfig { this.rules = { reverse:0, turn:true, + cpu:false, }; //this.actions = [ ]; diff --git a/www/js/game_config_const.js b/www/js/game_config_const.js index 6b24d17..8b5a1bd 100644 --- a/www/js/game_config_const.js +++ b/www/js/game_config_const.js @@ -337,7 +337,8 @@ const GAME_CONFIGS = { .add_piece(0, 1, false, new MATH.Vec2(4, 4)) .add_piece(2, 1, false, new MATH.Vec2(5, 6)) - ), + ) + .set_rule("cpu", true), Guide_Check2: new GameConfig() .set_pieces(CONFIG_PIECES_STANDARD) .set_pool(new Uint8Array([1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])) @@ -349,7 +350,8 @@ const GAME_CONFIGS = { .add_piece(1, 1, false, new MATH.Vec2(4, 4)) .add_piece(6, 1, true, new MATH.Vec2(7, 3)) .add_piece(1, 1, true, new MATH.Vec2(2, 0)) - ), + ) + .set_rule("cpu", true), Guide_Check3: new GameConfig() .set_pieces(CONFIG_PIECES_STANDARD) .set_pool(new Uint8Array([1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])) @@ -361,7 +363,8 @@ const GAME_CONFIGS = { .add_piece(5, 1, false, new MATH.Vec2(1, 4)) .add_piece(1, 1, false, new MATH.Vec2(5, 5)) .add_piece(6, 1, true, new MATH.Vec2(4, 4)) - ), + ) + .set_rule("cpu", true), // Checkmate Guide_Checkmate: new GameConfig() @@ -388,7 +391,8 @@ const GAME_CONFIGS = { .add_piece(3, 0, true, new MATH.Vec2(2, 6)) .add_piece(6, 0, true, new MATH.Vec2(1, 5)) .add_piece(2, 0, true, new MATH.Vec2(7, 7)) - ), + ) + .set_rule("cpu", true), Guide_Trial2: new GameConfig() .set_pieces(CONFIG_PIECES_STANDARD) @@ -402,7 +406,8 @@ const GAME_CONFIGS = { .add_piece(2, 0, true, new MATH.Vec2(6, 7)) .add_piece(6, 0, false, new MATH.Vec2(4, 4)) .add_piece(5, 0, false, new MATH.Vec2(4, 2)) - ), + ) + .set_rule("cpu", true), Guide_Trial3: new GameConfig() .set_pieces(CONFIG_PIECES_STANDARD) @@ -429,5 +434,6 @@ const GAME_CONFIGS = { .add_piece(2, 0, false, new MATH.Vec2(6, 5)) .add_piece(0, 1, false, new MATH.Vec2(1, 4)) .add_piece(2, 0, true, new MATH.Vec2(0, 3)) - ), + ) + .set_rule("cpu", true), }; diff --git a/www/js/interface.js b/www/js/interface.js index ade79de..2046b43 100644 --- a/www/js/interface.js +++ b/www/js/interface.js @@ -1405,7 +1405,7 @@ const INTERFACE = { board_state: [ ], history: [ ], history_begin: [ ], - auto: 0, + auto: false, }, Ui: { @@ -1497,7 +1497,7 @@ const INTERFACE = { }, reset() { - INTERFACE_DATA.Game.auto = 0; + INTERFACE_DATA.Game.auto = (GAME_DATA.config.rules.cpu)? 2 : false; INTERFACE_DATA.Game.history = [ ]; for(let i = 0; i < INTERFACE_DATA.Game.history_begin.length; ++i) { @@ -1511,12 +1511,20 @@ const INTERFACE = { undo() { switch(INTERFACE_DATA.mode) { case INTERFACE.Mode.Local: { - INTERFACE_DATA.Game.auto = 0; - if(INTERFACE_DATA.Game.history.length > 0) { - INTERFACE_DATA.Replay.turn = INTERFACE_DATA.Game.history.length + 1; - INTERFACE_DATA.Game.history.pop(); - INTERFACE.replay_jump(INTERFACE_DATA.Game.history.length, false); + let back = 1; + + if(INTERFACE_DATA.Game.auto != 0 && INTERFACE_DATA.rotate != INTERFACE_DATA.Game.auto) { + back = 2; } + + for(let i = 0; i < back; ++i) { + if(INTERFACE_DATA.Game.history.length > 0) { + INTERFACE_DATA.Replay.turn = INTERFACE_DATA.Game.history.length + 1; + INTERFACE_DATA.Game.history.pop(); + } + } + + INTERFACE.replay_jump(INTERFACE_DATA.Game.history.length, false); } break; case INTERFACE.Mode.Player: { @@ -1982,21 +1990,22 @@ const INTERFACE = { } // Get move scores. - for(let i = 0; i < moves.length; ++i) { + for(let mv = 0; mv < moves.length; ++mv) { let st = state.clone(); - st.process(moves[i].play); - moves[i].score = state_score(st, player); + st.process(moves[mv].play); + moves[mv].score = state_score(st, player); } // Select move. if(moves.length > 0) { moves.sort((a, b) => { return b.score - a.score }); - if(depth == 0) { + /*if(depth == 0) { // Get move scores for search player. for(let i = 0; i < moves.length; ++i) { let st = state.clone(); st.process(moves[i].play); + console.log("B"); moves[i].score = state_score(st, search_player); } } else { @@ -2009,7 +2018,7 @@ const INTERFACE = { moves[i].score = result.score; } } - } + }*/ // Select random from ties. let selection = 0;