import {Card} from "../rooms/schema/Card"; import arrUtil from "./array.util"; import {Player} from "../rooms/schema/Player"; import {singleton} from "../common/Singleton"; import {GameEnv} from "../cfg/GameEnv"; let gameUtil = { // TODO: 根据配表生成牌组 initCardQue() { let cards: Array = []; let nums: Array = []; let types : Array = []; for (let i = 0; i < 12; i ++) { for (let j = 0; j < 16; j ++) { nums.push(i); } } arrUtil.randomSort(nums); for (let i = 0; i < 8; i ++) { for (let j = 0; j < 24; j ++) { types.push(i); } } arrUtil.randomSort(types); for (let i = 0; i < nums.length; i++) { cards.push(new Card(nums[i] + 1, types[i] + '', i)); } arrUtil.randomSort(cards); return cards; }, /** * 检查目标数组中的卡id是否在存在 * @param cardMap * @param cardIds */ checkCardsExists(cardMap: Map, cardIds: Array) { let result = true; for (let id of cardIds) { if (!cardMap.has(id + '')) { result = false; break; } } return result; }, /** * 抽卡 * @param cardArr * @param player * @param count */ drawCard(cardArr: Card[], player: Player, count: number): Card[] { let cards: Card[] = []; for (let i = 0; i < count; i++) { let card = cardArr.pop(); cards.push(card); player.cards.set(card.id + '', card); player.cardSet.add(card.id + ''); } return cards; }, /** * 更换相同数量的卡 * @param cardArr * @param player * @param targetCards */ changeCard(cardArr: Card[], player: Player, targetCards: Card[]): Card[] { let cards: Card[] = []; for (let card of targetCards) { player.cards.delete(card.id + ''); player.cardSet.delete(card.id + ''); } arrUtil.randomInsert(cardArr, targetCards); let count = targetCards.length; for (let i = 0; i < count; i++) { let card = cardArr.pop(); cards.push(card); player.cards.set(card.id + '', card); player.cardSet.add(card.id + ''); } return cards; }, /** * 检查出牌是否符合规则 * @param cardsLst */ checkDiscard(cardsLst: Card[]) { if (cardsLst.length == 0 || cardsLst.length == 2) { return false } else if (cardsLst.length == 1) { return true; } let numSet: number[] = []; cardsLst.forEach(function (value) { if (value.number < 11) { numSet.push(value.number); } }); if (numSet.length === 1) { return true; } if (numSet.length < 3) { return false; } numSet.sort((a, b) => { return a - b; }); let preNum; let sequence = true; //是否是顺序 let same = true; //是否是相同 for (let num of numSet) { if (preNum) { if (num !== (preNum + 1) && sequence) { sequence = false; } if (num !== preNum && same) { same = false; } if (!sequence && !same) { return false; } } preNum = num; } return true; } } export default gameUtil;