backgammon
Version:
a clean api for building a backgammon game
3 lines (2 loc) • 5.45 kB
JavaScript
"use strict";function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function t(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),Object.defineProperty(t,"prototype",{writable:!1}),t}function n(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function r(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(r)return(r=r.call(e)).next.bind(r);if(Array.isArray(e)||(r=function(e,t){if(e){if("string"==typeof e)return n(e,void 0);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?n(e,void 0):void 0}}(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var i=0;return function(){return i>=e.length?{done:!0}:{done:!1,value:e[i++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}Object.defineProperty(exports,"__esModule",{value:!0});var i,o,s,u=function(){function e(e,t){void 0===t&&(t=[]),this.position=e,this.checkers=t}var n=e.prototype;return n.relativePositionFromHome=function(e){return e.color===i.white?this.position:e.home.position-this.position},n.isHouse=function(){return this.checkers.length>1},n.isSingle=function(){return 1===this.checkers.length},n.includesCheckerOf=function(e){return!!this.checkers.length&&!!this.checkers.find((function(t){return t.color===e.color}))},n.isAvailableFor=function(e){return!(!this.includesCheckerOf(e)&&this.isHouse())},e.getPointRefByPosition=function(e,t){return t.find((function(t){return t.position===e}))},t(e,[{key:"oppisetPosition",get:function(){return 25-this.position}}]),e}();!function(e){e.black="black",e.white="white"}(i||(i={})),function(e){e[e.white=0]="white",e[e.black=25]="black"}(o||(o={})),function(e){e[e.white=25]="white",e[e.black=0]="black"}(s||(s={}));var c=function(e){this.home=new u(o[e]),this.prison=new u(s[e]),this.color=e},h=function(){function e(e,t,n){this.white=e,this.black=t,this._current=n}return e.prototype.toggle=function(){return this._current=this.second,this.current},t(e,[{key:"current",get:function(){return this._current}},{key:"second",get:function(){return this.current===this.white?this.black:this.white}},{key:"White",get:function(){return this.white}},{key:"Black",get:function(){return this.black}}]),e}(),a=function(){function e(t){var n;this.numbers=t,this.isDouble=!1,e.dicesAreDouble(this)&&(this.isDouble=!0,(n=this.numbers).push.apply(n,this.numbers))}return e.roll1Dice=function(){return Math.floor(6*Math.random()+1)},e.roll2Dices=function(){return new e([this.roll1Dice(),this.roll1Dice()])},e.dicesAreDouble=function(e){var t=e.numbers;return t[0]===t[1]},e.getStarterDices=function(){var t;do{t=new e([this.roll1Dice(),this.roll1Dice()])}while(this.dicesAreDouble(t));return t},e}(),l=function(e){this.color=e},f=[new u(1,p(2,i.black)),new u(2),new u(3),new u(4),new u(5),new u(6,p(5,i.white)),new u(7),new u(8,p(3,i.white)),new u(9),new u(10),new u(11),new u(12,p(5,i.black)),new u(13,p(5,i.white)),new u(14),new u(15),new u(16),new u(17,p(3,i.black)),new u(18),new u(19,p(5,i.black)),new u(20),new u(21),new u(22),new u(23),new u(24,p(2,i.white))];function p(e,t){for(var n=[],r=0;r<e;r++)n.push(new l(i[t]));return n}exports.Board=function(){function e(){this.points=f;var e=new c(i.white),t=new c(i.black),n=a.getStarterDices(),r=n.numbers[0]>n.numbers[1]?e:t;this.players=new h(e,t,r),this.currentTurn={player:r,dices:n,possibleMoves:this.getAllMovePaths(n,r)}}var t=e.prototype;return t.submitMove=function(e){this.generateNextMove()},t.generateNextMove=function(){var e=a.roll2Dices(),t=this.players.toggle(),n=this.getAllMovePaths(e,t);this.currentTurn={dices:e,player:t,possibleMoves:n}},t.PlayerInPrison=function(e){return void 0===e&&(e=this.players.current),e.prison.checkers.length>0},t.currentPlayerCanBearOff=function(){var e=this;return!this.PlayerInPrison()&&this.getPlayersPoints().every((function(t){return t.relativePositionFromHome(e.players.current)<=6}))},t.getPlayersPoints=function(e){return void 0===e&&(e=this.players.current),this.points.filter((function(t){return t.includesCheckerOf(e)}))},t.score=function(e){var t=this.getPlayersPoints(e);this.PlayerInPrison(e)&&t.push(e.prison);for(var n,i=0,o=r(t);!(n=o()).done;){var s=n.value;i+=s.relativePositionFromHome(e)*s.checkers.length}return i},t.getTargetPoint=function(e,t,n){var r=n.color===i.white?Math.max(e.position-t,n.home.position):Math.min(e.position+t,n.home.position);return u.getPointRefByPosition(r,this.points)},t.getMovePathsForPoint=function(e,t,n){var i=this,o=[];return t.numbers.forEach((function(s){!function(t){for(var s,u=[],c=0,h=e,a=r(t);!(s=a()).done;){var l=s.value,f=i.getTargetPoint(e,c+l,n);if(!f||!f.isAvailableFor(n))break;u.push({from:h,to:f,uses:l}),c+=l,h=f}u.length>0&&o.push(u)}(function(e,t){var n=e.indexOf(t);if(n>-1&&n<e.length){var r=e.splice(n,1);e.unshift(r[0])}return e}(t.numbers,s))})),o},t.getAllMovePaths=function(e,t){void 0===t&&(t=this.players.current);for(var n,i=[],o=r(this.getPlayersPoints(t));!(n=o()).done;){var s=this.getMovePathsForPoint(n.value,e,t);s.length>0&&i.push.apply(i,s)}return i},e}();
//# sourceMappingURL=backgammon.cjs.production.min.js.map