X-Git-Url: https://git.auder.net/?p=vchess.git;a=blobdiff_plain;f=client%2Fsrc%2Fcomponents%2FComputerGame.vue;h=402bc7fa8bc846a19043a1ec922e53995327f771;hp=3bbdc0467fd0c9b7128fa8344835cfeec3f46d9a;hb=6808d7a16ec1e761c6a2dffec2281c96953e4d89;hpb=ae2c49bb0bbaac3953f63be5b720e9c6835f00b6 diff --git a/client/src/components/ComputerGame.vue b/client/src/components/ComputerGame.vue index 3bbdc046..402bc7fa 100644 --- a/client/src/components/ComputerGame.vue +++ b/client/src/components/ComputerGame.vue @@ -9,7 +9,7 @@ import Worker from "worker-loader!@/playCompMove"; export default { name: "my-computer-game", components: { - BaseGame, + BaseGame }, // gameInfo: fen + mode + vname // mode: "auto" (game comp vs comp) or "versus" (normal) @@ -22,7 +22,7 @@ export default { // Web worker to play computer moves without freezing interface: timeStart: undefined, //time when computer starts thinking compThink: false, //avoid asking a new move while one is being searched - compWorker: null, + compWorker: null }; }, watch: { @@ -30,13 +30,11 @@ export default { this.launchGame(); }, "gameInfo.score": function(newScore) { - if (newScore != "*") - { + if (newScore != "*") { this.game.score = newScore; //user action - if (!this.compThink) - this.$emit("game-stopped"); //otherwise wait for comp + if (!this.compThink) this.$emit("game-stopped"); //otherwise wait for comp } - }, + } }, // Modal end of game, and then sub-components created: function() { @@ -44,60 +42,51 @@ export default { this.compWorker = new Worker(); this.compWorker.onmessage = e => { let compMove = e.data; - if (!compMove) - { + if (!compMove) { this.compThink = false; this.$emit("game-stopped"); //no more moves: mate or stalemate return; //after game ends, no more moves, nothing to do } - if (!Array.isArray(compMove)) - compMove = [compMove]; //to deal with MarseilleRules + if (!Array.isArray(compMove)) compMove = [compMove]; //to deal with MarseilleRules // Small delay for the bot to appear "more human" - const delay = Math.max(500-(Date.now()-this.timeStart), 0); + const delay = Math.max(500 - (Date.now() - this.timeStart), 0); setTimeout(() => { - if (this.currentUrl != document.location.href) - return; //page change + if (this.currentUrl != document.location.href) return; //page change // NOTE: Dark and 2-moves are incompatible - const animate = (this.gameInfo.vname != "Dark"); - const animDelay = (animate ? 250 : 0); + const animate = this.gameInfo.vname != "Dark"; + const animDelay = animate ? 250 : 0; let moveIdx = 0; let self = this; (function executeMove() { self.$set(self.game, "moveToPlay", compMove[moveIdx++]); - if (moveIdx >= compMove.length) - { + if (moveIdx >= compMove.length) { self.compThink = false; - if (self.game.score != "*") //user action + if (self.game.score != "*") + //user action self.$emit("game-stopped"); - } - else - setTimeout(executeMove, 500 + animDelay); + } else setTimeout(executeMove, 500 + animDelay); })(); }, delay); - } - if (!!this.gameInfo.fen) - this.launchGame(); + }; + if (this.gameInfo.fen) this.launchGame(); }, methods: { launchGame: function() { - this.compWorker.postMessage(["scripts",this.gameInfo.vname]); - this.compWorker.postMessage(["init",this.gameInfo.fen]); + this.compWorker.postMessage(["scripts", this.gameInfo.vname]); + this.compWorker.postMessage(["init", this.gameInfo.fen]); this.vr = new V(this.gameInfo.fen); - const mycolor = (Math.random() < 0.5 ? "w" : "b"); - let players = [{name:"Myself"},{name:"Computer"}]; - if (mycolor == "b") - players = players.reverse(); + const mycolor = Math.random() < 0.5 ? "w" : "b"; + let players = [{ name: "Myself" }, { name: "Computer" }]; + if (mycolor == "b") players = players.reverse(); this.currentUrl = document.location.href; //to avoid playing outside page // NOTE: fen and fenStart are redundant in game object - this.game = Object.assign({}, - this.gameInfo, - { - fenStart: this.gameInfo.fen, - players: players, - mycolor: mycolor, - score: "*", - }); - this.compWorker.postMessage(["init",this.gameInfo.fen]); + this.game = Object.assign({}, this.gameInfo, { + fenStart: this.gameInfo.fen, + players: players, + mycolor: mycolor, + score: "*" + }); + this.compWorker.postMessage(["init", this.gameInfo.fen]); if (mycolor != "w" || this.gameInfo.mode == "auto") this.playComputerMove(); }, @@ -107,14 +96,14 @@ export default { this.compWorker.postMessage(["askmove"]); }, processMove: function(move) { - if (this.game.score != "*") - return; + if (this.game.score != "*") return; // Send the move to web worker (including his own moves) - this.compWorker.postMessage(["newmove",move]); + this.compWorker.postMessage(["newmove", move]); // subTurn condition for Marseille (and Avalanche) rules - if ((!this.vr.subTurn || this.vr.subTurn <= 1) - && (this.gameInfo.mode == "auto" || this.vr.turn != this.game.mycolor)) - { + if ( + (!this.vr.subTurn || this.vr.subTurn <= 1) && + (this.gameInfo.mode == "auto" || this.vr.turn != this.game.mycolor) + ) { this.playComputerMove(); } }, @@ -122,7 +111,7 @@ export default { this.game.score = score; this.game.scoreMsg = scoreMsg; this.$emit("game-over", score); //bubble up to Rules.vue - }, - }, + } + } };