UNPKG

pokie

Version:

A server-side video slot game logic framework for JavaScript and TypeScript.

92 lines 4.14 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.SymbolsCombinationsAnalyzer = void 0; class SymbolsCombinationsAnalyzer { static getSymbolsForDefinition(symbols, definition) { return definition.map((col, index) => symbols[index][col]); } static getSymbolsMatchingPattern(symbols, pattern) { return symbols.filter((_, i) => pattern[i] === 1); } static isMatchPattern(symbols, pattern, wildSymbols) { const symbolsByPattern = SymbolsCombinationsAnalyzer.getSymbolsMatchingPattern(symbols, pattern); const unique = Array.from(new Set(symbolsByPattern)); const uniqueNotWilds = unique.filter((symbol) => !(wildSymbols === null || wildSymbols === void 0 ? void 0 : wildSymbols.some((wildSymbol) => wildSymbol === symbol))); return uniqueNotWilds.length === 1; } static getWinningSymbolId(symbols, pattern, wildSymbols) { const symbolsByPattern = SymbolsCombinationsAnalyzer.getSymbolsMatchingPattern(symbols, pattern); const unique = new Set(symbolsByPattern); let prev = null; unique.forEach((cur) => { if (!(wildSymbols === null || wildSymbols === void 0 ? void 0 : wildSymbols.some((wild) => wild === cur))) { prev = cur; } }); return prev; } static getMatchingPattern(symbols, patterns, wildSymbols) { for (const pattern of patterns) { if (SymbolsCombinationsAnalyzer.isMatchPattern(symbols, pattern, wildSymbols)) { return pattern; } } return null; } static getWildSymbolsPositions(symbols, pattern, wildSymbols) { return symbols .map((symbol, i) => wildSymbols.some((wildSymbolId) => symbol === wildSymbolId) && pattern[i] === 1 ? i : -1) .filter((index) => index !== -1); } static getScatterSymbolsPositions(symbols, scatterSymbolId) { const r = []; for (let i = 0; i < symbols.length; i++) { for (let j = 0; j < symbols[i].length; j++) { if (symbols[i][j] === scatterSymbolId) { r.push([i, j]); } } } return r; } static getWinningLinesIds(symbols, linesDefinitions, patterns, wildSymbols) { const lines = linesDefinitions.getLinesIds(); const ids = lines.filter((lineId) => { const symbolsLine = SymbolsCombinationsAnalyzer.getSymbolsForDefinition(symbols, linesDefinitions.getLineDefinition(lineId)); return SymbolsCombinationsAnalyzer.getMatchingPattern(symbolsLine, patterns, wildSymbols) !== null; }); ids.sort(); return ids; } static getAllPossibleSymbolsCombinations(sequences, symbolsNumber) { function generateCombinations(arr) { const result = []; function generateRecursively(currCombination, index) { if (index === arr.length) { result.push(currCombination.slice()); return; } for (let i = 0; i <= arr[index]; i++) { currCombination[index] = i; generateRecursively(currCombination, index + 1); } } generateRecursively(new Array(arr.length).fill(0), 0); return result; } const sequencesSizes = []; sequences.forEach((seq) => sequencesSizes.push(seq.getSize() - 1)); const combinations = generateCombinations(sequencesSizes); const allPossibleSymbolsCombinations = []; combinations.forEach((values) => { const curCombination = new Array(sequences.length); values.forEach((value, i) => { curCombination[i] = sequences[i].getSymbols(value, symbolsNumber); }); allPossibleSymbolsCombinations.push(curCombination); }); return allPossibleSymbolsCombinations; } } exports.SymbolsCombinationsAnalyzer = SymbolsCombinationsAnalyzer; //# sourceMappingURL=SymbolsCombinationsAnalyzer.js.map