X-Git-Url: https://git.auder.net/?a=blobdiff_plain;f=client%2Fsrc%2Fcomponents%2FComputerGame.vue;h=44bfb6a6259333be28465b69618ebaaf8f81ac67;hb=07052665845283c65b50a76537669d0602ba436b;hp=aee1f70ef7fcedc4cdb87c0eeb352c833bc3000e;hpb=e71161fbfffe53b0f4b174e0467cdd98cc70b7b0;p=vchess.git diff --git a/client/src/components/ComputerGame.vue b/client/src/components/ComputerGame.vue index aee1f70e..44bfb6a6 100644 --- a/client/src/components/ComputerGame.vue +++ b/client/src/components/ComputerGame.vue @@ -3,7 +3,6 @@ BaseGame( ref="basegame" :game="game" @newmove="processMove" - @gameover="gameOver" ) @@ -11,6 +10,7 @@ BaseGame( import BaseGame from "@/components/BaseGame.vue"; import { store } from "@/store"; import { CompgameStorage } from "@/utils/compgameStorage"; +import { getScoreMessage } from "@/utils/scoring"; import { playMove, getFilteredMove } from "@/utils/playUndo"; import Worker from "worker-loader!@/playCompMove"; export default { @@ -38,7 +38,8 @@ export default { this.compWorker.onmessage = e => { let compMove = e.data; // Small delay for the bot to appear "more human" - const delay = Math.max(500 - (Date.now() - this.timeStart), 0); + const minDelay = this.gameInfo.mode == "versus" ? 500 : 1000; + const delay = Math.max(minDelay - (Date.now() - this.timeStart), 0); let self = this; setTimeout(() => { if (this.currentUrl != document.location.href) return; //page change @@ -57,22 +58,23 @@ export default { if (!game) { game = { vname: this.gameInfo.vname, - fenStart: V.GenRandInitFen(), + fenStart: V.GenRandInitFen(this.st.settings.randomness), moves: [] }; game.fen = game.fenStart; if (this.gameInfo.mode == "versus") CompgameStorage.add(game); } - if (this.gameInfo.mode == "versus" && !game.mycolor) - game.mycolor = Math.random() < 0.5 ? "w" : "b"; + if (!game.mycolor) game.mycolor = (Math.random() < 0.5 ? "w" : "b"); this.compWorker.postMessage(["init", game.fen]); this.vr = new V(game.fen); game.players = [{ name: "Myself" }, { name: "Computer" }]; - if (game.myColor == "b") game.players = game.players.reverse(); + if (game.mycolor == "b") game.players = game.players.reverse(); game.score = "*"; //finished games are removed + game.mode = this.gameInfo.mode; this.currentUrl = document.location.href; //to avoid playing outside page this.game = game; + this.$refs["basegame"].re_setVariables(game); this.compWorker.postMessage(["init", game.fen]); if (this.gameInfo.mode == "auto" || game.mycolor != this.vr.turn) this.playComputerMove(); @@ -84,11 +86,16 @@ export default { this.compThink = true; this.compWorker.postMessage(["askmove"]); }, - processMove: function(move) { + processMove: function(move, scoreObj) { playMove(move, this.vr); - // This move could have ended the game: if this is the case, - // the game is already removed from storage (if mode == 'versus') - if (this.game.score != "*") return; + // This move could have ended the game: + if (scoreObj.score != "*") { + this.gameOver(scoreObj.score); + return; + } + if (this.game.score != "*") + // The game already ended, probably because of a user action + return; // Send the move to web worker (including his own moves) this.compWorker.postMessage(["newmove", move]); if (this.gameInfo.mode == "auto" || this.vr.turn != this.game.mycolor) @@ -101,10 +108,11 @@ export default { }); } }, - gameOver: function(score, scoreMsg) { + gameOver: function(score) { this.game.score = score; - this.game.scoreMsg = scoreMsg; - if (!this.compThink) this.$emit("game-stopped"); //otherwise wait for comp + this.game.scoreMsg = getScoreMessage(score); + // If comp is thinking, let him finish: + if (!this.compThink) this.$emit("game-stopped"); } } };