# 1k

> Thousand Card Game Logic

Latest version **0.0.11** (published 2018-04-18) · MIT license · 0 weekly downloads

## Install

```sh
npm install 1k
pnpm add 1k
yarn add 1k
bun add 1k
```

## Health

**Score 25/100 (F)** — status: abandoned.

Positive: has types; no vulnerabilities; high quality score.

Warnings: low downloads; no esm support; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.0.11 |
| Published | 2018-04-18 |
| First published | 2017-12-19 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | CommonJS |
| Dependencies | 4 |
| Unpacked size | 1.1 MB |
| Known vulnerabilities | 0 (+10 in 1 direct dependencies) |
| Install scripts | no |
| Author | adasq |
| Maintainers | adasq |

## Links

- npm: https://www.npmjs.com/package/1k
- npm.io page: https://npm.io/package/1k

## Dependencies (4)

- [redux](https://npm.io/package/redux.md) 3.7.2
- [lodash](https://npm.io/package/lodash.md) 4.17.4
- [js-base64](https://npm.io/package/js-base64.md) 2.4.0
- [wolfy87-eventemitter](https://npm.io/package/wolfy87-eventemitter.md) 5.2.4

## Recent versions

- 0.0.11 (latest) — 2018-04-18
- 0.0.10 — 2018-04-18
- 0.0.9 — 2018-04-17
- 0.0.8 — 2018-01-12
- 0.0.7 — 2018-01-08
- 0.0.6 — 2018-01-06
- 0.0.5 — 2018-01-06
- 0.0.4 — 2018-01-05
- 0.0.3 — 2018-01-05
- 0.0.2 — 2018-01-05
- 0.0.1 — 2017-12-19

## README

[![Build Status](https://travis-ci.org/gornanization/1k.svg?branch=master)](https://travis-ci.org/gornanization/1k)
[![Coverage Status](https://coveralls.io/repos/github/gornanization/1k/badge.svg)](https://coveralls.io/github/gornanization/1k)
[![NPM Downloads](https://badge.fury.io/js/1k.svg)](https://badge.fury.io/js/1k)

# 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?

```sh
$ npm install -S 1k
```

## How to use?

### Actions:

```ts

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:

```ts

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:

```ts

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();
});

```

```ts
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

---
_Source: https://npm.io/package/1k · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
