X-Git-Url: https://git.xandkar.net/?a=blobdiff_plain;ds=sidebyside;f=forest-fire%2F001%2Fsrc%2Fforest_fire.ml;h=3cee9734f304d711fba086c3c06e1914641fb244;hb=86e687a7e94874ace3b0e4be3e87e1f99a725215;hp=fc91c4a01beb3ae57d686c15ec3715d6e53e0203;hpb=8143820a79375d9eba5fb6377a71a0732c6512e6;p=cellular-automata.git diff --git a/forest-fire/001/src/forest_fire.ml b/forest-fire/001/src/forest_fire.ml index fc91c4a..3cee973 100644 --- a/forest-fire/001/src/forest_fire.ml +++ b/forest-fire/001/src/forest_fire.ml @@ -7,6 +7,8 @@ open Printf let default_f = 0.01 (* Probability of spontaneous ignition *) let default_p = 1.0 (* Probability of spontaneous growth *) +let default_interval = 0.1 (* Induced interval between generations *) + let default_x = 80 let default_y = 25 @@ -34,8 +36,9 @@ type direction = type options = - { size : int * int - ; prob : float * float + { size : int * int + ; prob : float * float + ; interval : float } @@ -59,6 +62,7 @@ let term_reset () = let get_opts argv = let usage = "" + and interval = ref default_interval and f = ref default_f and p = ref default_p and x = ref default_x @@ -70,13 +74,15 @@ let get_opts argv = ; ("-p", Arg.Set_float p, " Probability of spontaneous growth.") ; ("-x", Arg.Set_int x, " Forest width.") ; ("-y", Arg.Set_int y, " Forest height.") + ; ("-i", Arg.Set_float interval, " Induced interval between generations.") ] in Arg.parse speclist (fun _ -> ()) usage; - { size = !x, !y - ; prob = !f, !p + { size = !x, !y + ; prob = !f, !p + ; interval = !interval } @@ -132,6 +138,8 @@ let new_state = function let print_forest forest = + term_reset (); + Array.iter ( fun row -> @@ -168,11 +176,13 @@ let next_generation forest (width, height) prob = forest -let rec burn forest size prob = - term_reset (); +let rec burn forest size prob interval = print_forest forest; - minisleep 0.1; - burn (next_generation forest size prob) size prob + + if interval > 0.0 then minisleep interval; + + let next_forest = next_generation forest size prob in + burn next_forest size prob interval let main argv = @@ -182,7 +192,8 @@ let main argv = let forest = init_forest opts.size opts.prob in term_clear (); - burn forest opts.size opts.prob + + burn forest opts.size opts.prob opts.interval let () = main Sys.argv