Canasta

This is a library for the card game canasta, providing a simple interface when creating a back-end and/or front-end for the game.

Installation

Simply add this to your mix.exs file:

{:canasta, "~> 0.1.0"},

Testing

To make sure everything works as it should, simply run mix test. This is also done on every push to the repository, so you shouldn't have to worry about this.

Usage

To provide an interface as simple as possible for the user, I've merged all setup required into one function Canasta.Game.create/0. This will return a new Canasta.Game structure, which is what you will interact with throughout the use of the lib.

game = Canasta.Game.create

The structure of the game looks like this, and this is what you will retrieve when structuring your front/back-end:

%Canasta.Game{
  pile: [
    %Canasta.Card{rank: :jack, suit: :hearts},
    %Canasta.Card{rank: :jack, suit: :diamonds},
    %Canasta.Card{rank: 5, suit: :spades},
    %Canasta.Card{rank: 6, suit: :clubs},
    ...
  ],
  player_one: %Canasta.Player{
    hand: [
      %Canasta.Card{...},
      ...
    ],
    points: 0,
    red_threes: [%Canasta.Card{...}],
    table: [
      %Meld{cards: [%Canasta.Card{...}]}
    ]
  },
  player_turn: :player_one,
  player_two: %Canasta.Player{
    ...
  },
  pulled: true,
  table: [%Canasta.Card{...}]
}

Available actions

To perform an action you will use the Canasta.Game.play/2 function. This will either return a tuple, where the first element is an error, or just a Canasta.Game structure -- if successful.

Draw

Input: %{action: :draw}.

This will give a card to the player whose turn it is.

Play a card

Input: %{action: :play_card, card: %Canasta.Card{...}}

This will play the card from the hand of the current player.

Meld

Input: %{action: :meld, melds: [%Canasta.Meld{...}]}

This will create a meld (or several if specified) with the cards from the players hand. If the player has not drafted a card, it will try to take the top card on the table and create a meld with that. If the player has drafted a card, a normal meld (or melds) will be created.