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.createThe 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.