@vlad-yakovlev/poker
Version:
Texas Hold'em poker library
138 lines (137 loc) • 3.96 kB
TypeScript
import { EventEmitter } from 'eventemitter3';
import { ROUND, RoomData, RoomStorage } from '../types/state.js';
import { Player } from './Player.js';
export type RoomParams<RoomPayload = any, PlayerPayload = any> = {
storage: RoomStorage<RoomPayload, PlayerPayload>;
startingBaseBetAmount: number;
};
export type RoomEvents<RoomPayload, PlayerPayload> = {
/**
* Emitted when deal starts
*/
nextDeal: (data: {
players: Player<PlayerPayload>[];
dealer: Player<PlayerPayload>;
smallBlind: Player<PlayerPayload>;
bigBlind: Player<PlayerPayload>;
}) => void;
/**
* Emitted when deal ends
*/
dealEnded: (data: {
tableCards: number[];
players: {
player: Player<PlayerPayload>;
wonAmount: number;
}[];
}) => void;
/**
* Emitted when player's turn starts
*/
nextTurn: (data: {
player: Player<PlayerPayload>;
}) => void;
/**
* Emitted when game ends
*/
gameEnded: () => void;
/**
* Emitted when player folds
*/
fold: (data: {
player: Player<PlayerPayload>;
}) => void;
/**
* Emitted when player checks
*/
check: (data: {
player: Player<PlayerPayload>;
}) => void;
/**
* Emitted when player calls
*/
call: (data: {
player: Player<PlayerPayload>;
}) => void;
/**
* Emitted when player raises
*/
raise: (data: {
player: Player<PlayerPayload>;
amount: number;
}) => void;
/**
* Emitted when player goes all-in
*/
allIn: (data: {
player: Player<PlayerPayload>;
}) => void;
};
export declare class Room<RoomPayload = any, PlayerPayload = any> extends EventEmitter<RoomEvents<RoomPayload, PlayerPayload>> {
storage: RoomStorage;
startingBaseBetAmount: number;
id: string;
cards: number[];
round: ROUND;
dealsCount: number;
dealerIndex: number;
currentPlayerIndex: number;
players: Player<PlayerPayload>[];
payload: RoomPayload;
constructor(params: RoomParams, roomData: RoomData<RoomPayload, PlayerPayload>);
/**
* Create a new room
*/
static create<RoomPayload = any, PlayerPayload = any>(id: string, params: RoomParams<RoomPayload, PlayerPayload>, payload: RoomPayload): Promise<Room<RoomPayload, PlayerPayload>>;
/**
* Load room from storage
*/
static load<RoomPayload = any, PlayerPayload = any>(id: string, params: RoomParams<RoomPayload, PlayerPayload>): Promise<Room<RoomPayload, PlayerPayload> | undefined>;
save(): Promise<void>;
get potAmount(): number;
/**
* Bet amount for current deal
*/
get baseBetAmount(): number;
/**
* Amount that each player should have bet in order to continue playing
*/
get requiredBetAmount(): number;
get currentPlayer(): Player<PlayerPayload>;
/**
* Add player to room
*/
addPlayer(id: string, balance: number, payload: PlayerPayload): Promise<void>;
/**
* Deal cards. Used to start a game
*/
dealCards(): Promise<void>;
/**
* End game. Used to stop a game early
*/
endGame(): Promise<void>;
/**
* Perform a fold action for a given player
*/
fold(playerId: string): Promise<void>;
/**
* Perform a check action for a given player
*/
check(playerId: string): Promise<void>;
/**
* Perform a call action for a given player
*/
call(playerId: string): Promise<void>;
/**
* Perform a raise action for a given player with a given amount
*/
raise(playerId: string, amount: number): Promise<void>;
/**
* Perform an all-in action for a given player
*/
allIn(playerId: string): Promise<void>;
nextTurn(): Promise<void>;
endDeal(): Promise<void>;
getNextPlayerIndex(index: number): number;
getNextRound(round: ROUND): ROUND;
}