pokie
Version:
A server-side video slot game logic framework for JavaScript and TypeScript.
92 lines • 4.14 kB
JavaScript
;
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