card_svr/src/rooms/commands/BeginGameCommand.ts

37 lines
1.3 KiB
TypeScript

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<CardGameState, {}> {
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()];
}
}
}