1k
TypeScript icon, indicating that this package has built-in type declarations

0.0.11 • Public • Published

Build Status Coverage Status NPM Downloads

1k

♥ ♦ ♣ ♠

Thousand card game logic, written in TypeScript.

Working example

Visit https://plnkr.co/edit/o73CajJDIuEZWHp1kH0C?p=preview and observe console output

How to install?

$ npm install -S 1k

How to use?

Actions:

 
import { initializeGame, createCard, Thousand, Game } from '1k';
 
const thousand: Thousand = initializeGame();
thousand.init();
 
let result: boolean; // its a result of action, true - action succeed, false otherwise
 
// registers player with specific name
result = thousand.registerPlayer('adam');
result = thousand.registerPlayer('pic');
 
// player makes a bid
result = thousand.bid('adam', 120);
// player passes
result = thousand.pass('adam');
 
// player (adam) shares card (9♥) with opponent (alan)
result = thousand.shareStock('adam', createCard('9♥'), 'alan');
 
// player declares a bomb
result = thousand.declareBomb('adam');
 
// player increases his bid
result = thousand.increaseBid('adam', 130);
 
// player throws a card
result = thousand.throwCard(createCard('A♥'), 'adam');
 
// get entire game state object
const state: Game = thousand.getState();
console.log(state);
 

Phases:

Available phases:

 
enum Phase {
    REGISTERING_PLAYERS_START = 'REGISTERING_PLAYERS_START',
    REGISTERING_PLAYERS_IN_PROGRESS = 'REGISTERING_PLAYERS_IN_PROGRESS',
    REGISTERING_PLAYERS_FINISHED = 'REGISTERING_PLAYERS_FINISHED',
    
    DEALING_CARDS_START = 'DEALING_CARDS_START',
    DEALING_CARDS_IN_PROGRESS = 'DEALING_CARDS_IN_PROGRESS',
    DEALING_CARDS_FINISHED = 'DEALING_CARDS_FINISHED',
 
    BIDDING_START = 'BIDDING_START',
    BIDDING_IN_PROGRESS = 'BIDDING_IN_PROGRESS',
    BIDDING_FINISHED = 'BIDDING_FINISHED',
 
    BATTLE_START = 'BATTLE_START',
    TRICK_START = 'TRICK_START',
    TRICK_IN_PROGRESS = 'TRICK_IN_PROGRESS',
    TRICK_FINISHED = 'TRICK_FINISHED',
    FLIP_STOCK = 'FLIP_STOCK',
    ASSIGN_STOCK = 'ASSIGN_STOCK',
    SHARE_STOCK = 'SHARE_STOCK',
    BATTLE_FINISHED = 'BATTLE_FINISHED',
    BATTLE_RESULTS_ANNOUNCEMENT = 'BATTLE_RESULTS_ANNOUNCEMENT',
    ASSIGN_TRICK_CARDS = 'ASSIGN_TRICK_CARDS',
    BOMB_DECLARED = 'BOMB_DECLARED',
    GAME_FINISHED = 'GAME_FINISHED'
}

Events:

 
import { initializeGame, createCard, Thousand } from '1k';
 
const thousand: Thousand = initializeGame();
 
// called whenever game is updated
thousand.events.addListener('phaseUpdated', next => {
    const state: Game = thousand.getState();
    console.log('Current phase', state.phase);
    console.log('Current state', state);
    
    // after managing state, let the game proceed...
    next();
});
 
// called, when any action made succesfully
thousand.events.addListener('action', (action, next) => {
    const state: Game = thousand.getState();
    console.log('action made succesfully: ', action);
    
    // after managing action, let the game proceed...
    next();
});
 
thousand.setCustomShufflingMethod((notShuffledDeck: CardPattern[], cb) => {
    //shuffle your cards here...
    const shuffledCards: CardPattern[] = ...
    cb(shuffledCards);
});

Putting all together:

See https://plnkr.co/edit/o73CajJDIuEZWHp1kH0C?p=preview

Readme

Keywords

none

Package Sidebar

Install

npm i 1k

Weekly Downloads

6

Version

0.0.11

License

MIT

Unpacked Size

1.11 MB

Total Files

212

Last publish

Collaborators

  • adasq