Download:
child 6:bb8fdb49d6ba
parent 4:c9defefe5dd9
5:0f9f2e3d2609
Anton Shestakov <engored@ya.ru>, Sun, 23 Feb 2014 15:02:21 +0900
Simple counter and printer to clean up console.

1 файлов изменено, 27 вставок(+), 4 удалений(-) [+]
rps.erl file | annotate | diff | comparison | revisions
--- a/rps.erl Sun Feb 23 00:29:31 2014 +0900
+++ b/rps.erl Sun Feb 23 15:02:21 2014 +0900
@@ -1,5 +1,5 @@
-module(rps).
--export([lobby/0, room/1, beats/1, winner/1, go/0, fool/0]).
+-export([lobby/0, counter/2, printer/0, room/1, beats/1, winner/1, go/0, fool/0]).
-define(RULES, [rock, paper, scissors]).
-define(BOTS, [fool, fool, fool]).
@@ -40,6 +40,8 @@
go() ->
register(lobby, spawn(rps, lobby, [])),
+ register(counter, spawn(rps, counter, [[], []])),
+ register(printer, spawn(rps, printer, [])),
[spawn(rps, Bot, []) || Bot <- ?BOTS].
lobby() ->
@@ -56,6 +58,28 @@
lobby([Who|Players])
end.
+counter(Draws, Wins) ->
+ receive
+ {draw, Choices} ->
+ %io:format("draw: ~w.~n", [Choices]),
+ counter([Choices|Draws], Wins);
+ {winner, Winner} ->
+ %io:format("the winner is ~w.~n", [Winner]),
+ counter(Draws, [Winner|Wins]);
+ {sendstats, Pid} ->
+ Pid ! {stats, {draws, length(Draws), wins, length(Wins)}},
+ counter(Draws, Wins)
+ end.
+
+printer() ->
+ receive
+ {stats, Stats} ->
+ io:format("Stats: ~w.~n", [Stats])
+ after 1000 ->
+ counter ! {sendstats, self()}
+ end,
+ printer().
+
room(Players) ->
lists:foreach(fun(Player) -> Player ! start end, Players),
room(Players, []).
@@ -64,12 +88,11 @@
Winner = winner(Choices),
Msg = if
Winner =:= undefined ->
- io:format("draw: ~w.~n", [Choices]),
- draw;
+ {draw, Choices};
true ->
- io:format("the winner is ~w.~n", [Winner]),
{winner, Winner}
end,
+ counter ! Msg,
lists:foreach(fun(Player) -> Player ! Msg end, Players),
room(Players);