battleship/README.md

77 lines
2.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Battleship
==========
The game
--------
Long version: [see wikipedia](https://secure.wikimedia.org/wikipedia/en/wiki/Battleship_game)
* Each player starts with a fleet of 5 ships, of length 5, 4, 3, 3, and 2.
* Each player places their ships horizontally or vertically on a 10x10 grid;
this is not visible to their opponent.
* Players take turns to fire at positions on the grid, gradually revealing
where their opponents ships are and are not located.
* A ship is destroyed when every cell of a ship has been hit.
* The winner is the first player to destroy their opponents fleet.
You lose if:
* You do not place the correct number and size of ships.
* You place your fleet in impossible positions (ships overlapping or partly off
the board).
* Your code raises an exception.
* All your ships have been sunk.
TECHNOLOGIES
--------------
* HTML
* Javascript
* CSS
HOW TO PLAY
--------------
Will Add soon
`state` is a representation of the known state of the opponents fleet, as
modified by the players shots. It is given as an array of arrays; the inner
arrays represent horizontal rows. Each cell may be in one of three states:
`:unknown`, `:hit`, or `:miss`. E.g.
[[:hit, :miss, :unknown, ...], [:unknown, :unknown, :unknown, ...], ...]
# 0,0 1,0 2,0 0,1 1,1 2,1
`ships_remaining` is an array of the ships remaining on the opponent's board,
given as an array of numbers representing their lengths, longest first.
For example, the first two calls will always be:
[5, 4, 3, 3, 2]
If the player is lucky enough to take out the length 2 ship on their first two
turns, the third turn will be called with:
[5, 4, 3, 3]
and so on.
`take_turn` must return an array of co-ordinates for the next shot. In the
example above, we can see that the player has already played `[0,0]`, yielding
a hit, and `[1,0]`, giving a miss. They can now return a reasonable guess of
`[0,1]` for their next shot.
The console runner
------------------
A console runner is provided. It can be started using:
bundle exec bin/play path/to/player_a.rb path/to/player_b.rb
Players are isolated using DRb.
A couple of very basic players are supplied: `NaivePlayer` and
`AnotherNaivePlayer` put all their ships in a corner and guess at random (often
wasting turns by repeating themselves). `HumanPlayer` asks for input via the
console.