Islands Text Client

Build Status

Text client for the Game of Islands.

It’s a game for two players, and each player has a board, which consists of a grid of one hundred coordinates. The grid is labeled with the numbers 1 through 10 across the top for the columns and down the left side for the rows. We name individual coordinates with this row-column combination.

The players cannot see each other’s boards.

The players have matching sets of islands of various shapes and sizes, which they place on their own boards. The players can move the islands around as much as they like until they say that they are set. After that, the islands must stay where they are for the rest of the game.

Once both players have set their islands, they take turns guessing coordinates on their opponent’s board, trying to find the islands. For every correct guess, we plant a palm tree on the island at that coordinate. When all the coordinates for an island have palm trees, the island is forested.

The first player to forest all of her opponent’s islands is the winner.

Inspired by the book Functional Web Development by Lance Halvorsen.Also inspired by the course Elixir for Programmers by Dave Thomas.

Usage

To play the Game of Islands, clone islands_engine from GitHub and compile it:

Then, clone islands_text_client from GitHub and compile it:

From folder islands_engine, run the engine in node :islands@<hostname>:

The first player starts the game from a different node:

The second player joins the game from yet another node:

Example of a game's events in sequence

We start the Islands Engine in node :islands@<hostname>:

engine_node

The first player starts the game from node :game1_player1@<hostname>:

player1_node

player1_start

The second player joins the game from node :game1_player2@<hostname>:

player2_node

player2_join

A feedback will notify player1 that an opponent joined the game:

player1_react_join

Each player must then position all 5 islands on the board:

player1_atoll_positioned

player2_atoll_positioned

player1_square_positioned

player2_square_positioned

Each player must then declare the islands "set":

player1_set_islands

player2_set_islands

player1_react_set_islands

Each player must then make a guess in turn:

player1_guess1

A feedback will show what the opponent's guess was:

player2_react_guess1

player2_guess1

player1_react_guess1

player1_atoll_forested

player2_react_atoll_forested