Ensuring sleep value is at least zero.
[cellular-automata.git] / 003 / src / life.erl
index ddb5115..605fa95 100644 (file)
@@ -7,7 +7,7 @@
 -define(CHAR_ALIVE, 111).  % "o"
 -define(CHAR_BAR,    45).  % "-"
 
--define(INTERVAL, 100).
+-define(GEN_INTERVAL, 100).
 
 
 -record(state, {x            :: non_neg_integer()
@@ -73,10 +73,17 @@ life_loop(
                           ,print_time   = PrintTime
     },
 
-    timer:sleep(?INTERVAL),
+    NewTimeMil = NewTime / 1000,
+    NextGenDelay = at_least_zero(round(?GEN_INTERVAL - NewTimeMil)),
+    timer:sleep(NextGenDelay),
+
     life_loop(NewState).
 
 
+at_least_zero(Integer) when Integer >= 0 -> Integer;
+at_least_zero(_) -> 0.
+
+
 do_print_screen(Board, Bar, X, Y, N, GenCount, Time, PrintTime) ->
     ok = do_print_status(Bar, X, Y, N, GenCount, Time, PrintTime),
     ok = do_print_board(Board).
This page took 0.019788 seconds and 4 git commands to generate.