import {Command} from "@colyseus/command"; import {CardGameState} from "../schema/CardGameState"; import {GameStateConst} from "../../constants/GameStateConst"; import gameUtil from "../../utils/game.util"; import {singleton} from "../../common/Singleton"; import {GameEnv} from "../../cfg/GameEnv"; import {NextTurnCommand} from "./NextTurnCommand"; import arrUtil from "../../utils/array.util"; /** * 开始游戏 * 1. 生成卡组 * 2. 将游戏状态改为 STATE_CHANGE_CARD */ export class BeginGameCommand extends Command { async execute() { this.state.maxCardId = 0; let card0 = gameUtil.initCardQue(); let card1 = gameUtil.initCardQue(); let cardAll = card0.concat(card1); arrUtil.randomSort(cardAll); this.state.cardQueue = cardAll; for (let client of this.room.clients) { this.room.addCard(client.sessionId, singleton(GameEnv).initCardNum, 0); } this.state.updateGameState(GameStateConst.STATE_CHANGE_CARD); // 超时后结束换卡, 进入下一轮 const cardChangeTime = singleton(GameEnv).cardChangeTime; await this.delay(cardChangeTime*1000); if (this.state.gameState == GameStateConst.STATE_CHANGE_CARD) { return [new NextTurnCommand()]; } } }