poem_game_component
Version:
110 lines (97 loc) • 3.66 kB
text/typescript
import * as express from 'express';
import { Request, Response } from 'express';
declare class Player {
private id;
private name;
private score;
private isEliminated;
constructor(id: string, name: string);
getId(): string;
getName(): string;
getScore(): number;
isPlayerEliminated(): boolean;
addScore(points: number): void;
eliminate(): void;
}
declare enum GameType {
POEM_MATCHING = "POEM_MATCHING",// 对诗
FLOWER_POEM = "FLOWER_POEM",// 飞花令
CHAIN_POEM = "CHAIN_POEM"
}
interface GameRule {
validateAnswer(historyAnswers: string[], currentAnswer: string, initialCondition: string): Promise<boolean>;
validateInitialCondition(initialCondition: string): Promise<boolean>;
}
declare enum GameStatus {
PREPARING = "PREPARING",// 准备状态,可以添加玩家
PLAYING = "PLAYING",// 游戏进行中,可以提交答案
FINISHED = "FINISHED"
}
declare class Game {
private id;
private gameType;
private initialCondition;
private players;
private currentPlayerIndex;
private historyAnswers;
private status;
constructor(id: string, gameType: GameType, initialCondition: string);
getId(): string;
getGameType(): GameType;
getInitialCondition(): string;
getPlayers(): Player[];
getCurrentPlayerIndex(): number;
getCurrentPlayer(): Player;
getHistoryAnswers(): string[];
getStatus(): GameStatus;
addPlayer(player: Player): void;
submitAnswer(answer: string, rule: GameRule): Promise<boolean>;
startGame(): void;
isGameOver(): boolean;
getWinner(): Player | null;
getNextPlayer(): number;
}
interface GameRepository {
save(game: Game): Promise<void>;
findById(id: string): Promise<Game | null>;
findAll(): Promise<Game[]>;
update(game: Game): Promise<void>;
delete(id: string): Promise<void>;
}
declare class RuleFactory {
createRule(gameType: GameType): GameRule;
}
declare class GameFactory {
private gameRepository;
private ruleFactory;
constructor(gameRepository: GameRepository, ruleFactory: RuleFactory);
createGame(gameType: GameType, initialCondition: string): Promise<Game>;
}
declare class GameService {
private gameFactory;
private gameRepository;
private ruleFactory;
constructor(gameFactory: GameFactory, gameRepository: GameRepository, ruleFactory: RuleFactory);
createGame(gameType: GameType, initialCondition: string): Promise<Game>;
getPreparingGames(): Promise<Game[]>;
getNotFinishedGames(): Promise<Game[]>;
getFinishedGames(): Promise<Game[]>;
joinGame(gameId: string, playerName: string): Promise<Game>;
startGame(gameId: string): Promise<Game>;
submitAnswer(gameId: string, answer: string): Promise<boolean>;
getGame(gameId: string): Promise<Game>;
}
declare class GameController {
private gameService;
constructor(gameService: GameService);
createGame(req: Request, res: Response): Promise<void>;
getPreparingGames(req: Request, res: Response): Promise<void>;
getNotFinishedGames(req: Request, res: Response): Promise<void>;
getFinishedGames(req: Request, res: Response): Promise<void>;
joinGame(req: Request, res: Response): Promise<void>;
startGame(req: Request, res: Response): Promise<void>;
submitAnswer(req: Request, res: Response): Promise<void>;
getGame(req: Request, res: Response): Promise<void>;
}
declare function createRoutes(gameRepository: GameRepository): express.Router;
export { Game, GameController, GameFactory, type GameRepository, GameService, GameStatus, GameType, Player, RuleFactory, createRoutes };