UNPKG

mau-mau

Version:

Card game for 2 or more players, popular in Czech Republic, Germany and other lands

171 lines (134 loc) 5.4 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); var _Game = require('./Game'); var _Game2 = _interopRequireDefault(_Game); var _Human = require('../players/Human'); var _Human2 = _interopRequireDefault(_Human); var _PoorComputer = require('../players/PoorComputer'); var _PoorComputer2 = _interopRequireDefault(_PoorComputer); var _AverageComputer = require('../players/AverageComputer'); var _AverageComputer2 = _interopRequireDefault(_AverageComputer); var _SmartComputer = require('../players/SmartComputer'); var _SmartComputer2 = _interopRequireDefault(_SmartComputer); var _i18n = require('../misc/i18n'); var _i18n2 = _interopRequireDefault(_i18n); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var _marked = [generateComputers].map(regeneratorRuntime.mark); function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } // Creates a new game using options with properties of primitive types. var Organizer = function () { function Organizer() { _classCallCheck(this, Organizer); } _createClass(Organizer, null, [{ key: 'createGame', value: function createGame(options) { options || (options = {}); options.players = createPlayers(options); return new _Game2.default(options); } }]); return Organizer; }(); function createPlayers(options) { var playerCount; if (options.players == null) { playerCount = 2 + Math.trunc(Math.random() * 3); } else { playerCount = parseInt(options.players, 10); } if (isNaN(playerCount)) { return createSpecificPlayers(options.players, options.human); } return createRandomPlayers(playerCount, options.human); } function createSpecificPlayers(players, human) { var playerClasses = { human: _Human2.default, smart: _SmartComputer2.default, average: _AverageComputer2.default, poor: _PoorComputer2.default }, players = players.split(',').map(function (player) { player = player.trim().toLowerCase(); var PlayerClass = playerClasses[player]; if (!PlayerClass) { throw new Error(_i18n2.default.translate('Invalid player: "$[1]".', player)); } return new PlayerClass(); }), humanIndex = parseHumanIndex(human, players.length + 1); if (humanIndex) { players.splice(humanIndex - 1, 0, new _Human2.default()); } if (players.length < 2) { throw new Error(_i18n2.default.translate('Two players are the minimum.')); } return players; } function createRandomPlayers(count, human) { if (count < 2) { throw new Error(_i18n2.default.translate('Two players are the minimum.')); } var humanIndex = parseHumanIndex(human, count), computers = generateComputers(); return [].concat(_toConsumableArray(Array(count).keys())).map(function (index) { return index + 1 === humanIndex ? new _Human2.default() : computers.next().value; }); } function parseHumanIndex(human, playerCount) { if (human === 'random') { return 1 + Math.trunc(Math.random() * playerCount); } if (human != null) { var humanIndex = parseInt(human, 10); if (isNaN(humanIndex)) { throw new Error(_i18n2.default.translate('Invalid human player index.')); } if (humanIndex < 1 || humanIndex > playerCount) { throw new Error(_i18n2.default.translate('Index of the human player out of range.')); } return humanIndex; } } function generateComputers() { var which; return regeneratorRuntime.wrap(function generateComputers$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: which = Math.trunc(Math.random() * 3); _context.t0 = which; _context.next = _context.t0 === 0 ? 4 : _context.t0 === 1 ? 7 : _context.t0 === 2 ? 10 : 13; break; case 4: _context.next = 6; return new _SmartComputer2.default(); case 6: return _context.abrupt('break', 13); case 7: _context.next = 9; return new _AverageComputer2.default(); case 9: return _context.abrupt('break', 13); case 10: _context.next = 12; return new _PoorComputer2.default(); case 12: return _context.abrupt('break', 13); case 13: _context.next = 0; break; case 15: case 'end': return _context.stop(); } } }, _marked[0], this); } exports.default = Organizer; //# sourceMappingURL=Organizer.js.map