Added how to use instructins
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
parent
0f9f885cc0
commit
8b35a1fc85
103
README.md
103
README.md
@ -127,4 +127,105 @@ The server will answer with one of the following:
|
||||
|
||||
# Usage instructions
|
||||
|
||||
!!! TODO !!!
|
||||
There is two ways of interacting with the server via the API or the `Client` Module
|
||||
|
||||
## API
|
||||
|
||||
Start a new iex session and compilie `paxos.ex` and `server.ex`:
|
||||
|
||||
```elixir
|
||||
c "paxos.ex"; c "server.ex"
|
||||
```
|
||||
|
||||
** Paxos needs to be compiled before the server as the server requires macros written in the paxos file **
|
||||
|
||||
Now start 3 instances of the server:
|
||||
|
||||
```elixir
|
||||
procs = Enum.to_list(1..3) |> Enum.map(fn x -> :"p#{x}" end)
|
||||
pids = procs |> Enum.map(fn x -> Server.start(x, procs) end)
|
||||
```
|
||||
|
||||
After the 3 instances have been started you can use Server helper functions to communicate with the Server:
|
||||
|
||||
```elixir
|
||||
Server.start_game(:p1, [:p1, :p2])
|
||||
Server.get_game_state(:p1, 1)
|
||||
Server.make_move(:p1, 1, 0)
|
||||
```
|
||||
|
||||
## Using the Client
|
||||
|
||||
Open 2 different terminals. One terminal will be the display game and the other will be used to control the game
|
||||
|
||||
In the first terminal start an iex session with a session name:
|
||||
```
|
||||
iex --sname c1
|
||||
```
|
||||
|
||||
In the second terminal start an iex session with a session name:
|
||||
```
|
||||
iex --sname c2
|
||||
```
|
||||
|
||||
On the first terminal connect to the second terminal:
|
||||
```elixir
|
||||
# In c1
|
||||
Node.connect(:"c2@<computer_name>")
|
||||
```
|
||||
|
||||
On both terminals compile paxos and server:
|
||||
```elixir
|
||||
# In both run
|
||||
c "paxos.ex"; c "server.ex"
|
||||
```
|
||||
|
||||
On the first terminal start the servers, create a game and enter display mode:
|
||||
```elixir
|
||||
# In c1
|
||||
procs = Enum.to_list(1..3) |> Enum.map(fn x -> :"p#{x}" end)
|
||||
pids = procs |> Enum.map(fn x -> Server.start(x, procs) end)
|
||||
|
||||
Server.start_game(:p1, [:p1, :p2])
|
||||
Client.display_game(:p1, 1)
|
||||
```
|
||||
|
||||
You now should see something like:
|
||||
|
||||
```
|
||||
0 H
|
||||
|
||||
1
|
||||
Be
|
||||
H
|
||||
|
||||
5 2
|
||||
Be
|
||||
|
||||
Be Li
|
||||
|
||||
|
||||
4 3
|
||||
|
||||
|
||||
Be
|
||||
```
|
||||
|
||||
The Center "Atom" is your hand, while the Letters arround are the game_state or board,
|
||||
the number represents where you can put the "Atom" in your hand
|
||||
|
||||
|
||||
On the second terminal start enter control mode:
|
||||
```elixir
|
||||
# In c2
|
||||
Client.control_game(:p1, 1)
|
||||
```
|
||||
|
||||
You should see:
|
||||
```
|
||||
Type the number you want to play or q to exit:
|
||||
```
|
||||
|
||||
Keep your mouse in the second terminal, and insert the number, where you want to make your move, and hit enter!
|
||||
|
||||
The map should update on the top screen and now you can play the game!
|
||||
|
Reference in New Issue
Block a user