diff --git a/main.ml b/main.ml index 21b2fea..b5d240f 100644 --- a/main.ml +++ b/main.ml @@ -19,97 +19,8 @@ type game_event_t = ;; -let dispatch_status optstatus = - let dispatch_keypress key = - match key with - | 'q' -> Quit - | _ -> - Printf.printf "Unknown action for key (%c)\n" key; - NoEvent - in - match optstatus with - | None -> (* only draw *) - NoEvent - | Some st -> (* react depending on sort *) - if st.Graphics.keypressed then dispatch_keypress st.Graphics.key - else NoEvent -;; - -let e_receive chan = - Event.sync ( Event.receive chan ) -;; - -let e_send chan data = - Event.sync ( Event.send chan data ) -;; - -let tick_run pfd_out req_channel notif_channel = - let buf = String.make 1 ' ' in - while true do - let delay = e_receive req_channel in - try - ignore ( ThreadUnix.timed_read pfd_out buf 0 1 delay ); - ignore ( e_send notif_channel Tick ); - with - | Unix.Unix_error(Unix.ETIMEDOUT,_,_) -> - ignore ( e_send notif_channel Tick ); - done -;; - -let graphic_run listen_lst notif_channel = - while true do - let event = - Graphics.wait_next_event listen_lst - in - ignore (e_send notif_channel (Graphics_status event)); - done -;; - let game_loop () = - let ( pfd_out, pfd_in ) = Unix.pipe () - and tick_request_channel = Event.new_channel () - and tick_notification_channel = Event.new_channel () - and graphic_notification_channel = Event.new_channel () - in - let tick_listener = tick_run pfd_out tick_request_channel - and graphic_listener = graphic_run [Graphics.Key_pressed] - in - let thr_tick = Thread.create tick_listener tick_notification_channel - and thr_input = Thread.create graphic_listener graphic_notification_channel - in - let ack () = - ignore ( Unix.write pfd_in "." 0 1 ) - in - let time_wait_next_event time lst = - e_send tick_request_channel time; - match Event.select [Event.receive tick_notification_channel; - Event.receive graphic_notification_channel] - with - | Tick -> None - | Graphics_status status -> - ack (); - ignore( e_receive tick_notification_channel ); - Some status - in - let continue = ref true - in - while !continue do - let opt_status = time_wait_next_event 0.05 [Graphics.Key_pressed] - in - match dispatch_status opt_status with - | MoveLeft -> print_string "Move Left...\n"; - | MoveRight -> print_string "Move Right...\n"; - | MoveUp -> print_string "Move up\n"; - | MoveDown -> print_string "Move down\n"; - | Action -> print_string "Action\n"; - | ActionTwo -> print_string "ActionTwo\n"; - | Help -> print_string "Help\n"; - | NoEvent -> (); - | Quit -> - continue := false ; - print_string "Exiting...\n"; - | _ -> print_string "nothing...\n"; - done + () ;; let main () = @@ -118,10 +29,10 @@ let main () = in ignore player1 ; ignore map1 ; - Graphics.open_graph " 320x200+50+50"; - Graphics.set_window_title "Just Nuke It"; + (* open window *) + (* set parameters & title *) game_loop (); - Graphics.close_graph () + (* close window *) ;; main (); diff --git a/main.ml.old b/main.ml.old new file mode 100644 index 0000000..21b2fea --- /dev/null +++ b/main.ml.old @@ -0,0 +1,127 @@ +(* vim: set ts=2 sw=2 et : *) +open Event;; + +type notification_t = + | Graphics_status of Graphics.status + | Tick +;; + +type game_event_t = + | MoveLeft + | MoveRight + | MoveUp + | MoveDown + | Action + | ActionTwo + | Help + | Quit + | NoEvent +;; + + +let dispatch_status optstatus = + let dispatch_keypress key = + match key with + | 'q' -> Quit + | _ -> + Printf.printf "Unknown action for key (%c)\n" key; + NoEvent + in + match optstatus with + | None -> (* only draw *) + NoEvent + | Some st -> (* react depending on sort *) + if st.Graphics.keypressed then dispatch_keypress st.Graphics.key + else NoEvent +;; + +let e_receive chan = + Event.sync ( Event.receive chan ) +;; + +let e_send chan data = + Event.sync ( Event.send chan data ) +;; + +let tick_run pfd_out req_channel notif_channel = + let buf = String.make 1 ' ' in + while true do + let delay = e_receive req_channel in + try + ignore ( ThreadUnix.timed_read pfd_out buf 0 1 delay ); + ignore ( e_send notif_channel Tick ); + with + | Unix.Unix_error(Unix.ETIMEDOUT,_,_) -> + ignore ( e_send notif_channel Tick ); + done +;; + +let graphic_run listen_lst notif_channel = + while true do + let event = + Graphics.wait_next_event listen_lst + in + ignore (e_send notif_channel (Graphics_status event)); + done +;; + +let game_loop () = + let ( pfd_out, pfd_in ) = Unix.pipe () + and tick_request_channel = Event.new_channel () + and tick_notification_channel = Event.new_channel () + and graphic_notification_channel = Event.new_channel () + in + let tick_listener = tick_run pfd_out tick_request_channel + and graphic_listener = graphic_run [Graphics.Key_pressed] + in + let thr_tick = Thread.create tick_listener tick_notification_channel + and thr_input = Thread.create graphic_listener graphic_notification_channel + in + let ack () = + ignore ( Unix.write pfd_in "." 0 1 ) + in + let time_wait_next_event time lst = + e_send tick_request_channel time; + match Event.select [Event.receive tick_notification_channel; + Event.receive graphic_notification_channel] + with + | Tick -> None + | Graphics_status status -> + ack (); + ignore( e_receive tick_notification_channel ); + Some status + in + let continue = ref true + in + while !continue do + let opt_status = time_wait_next_event 0.05 [Graphics.Key_pressed] + in + match dispatch_status opt_status with + | MoveLeft -> print_string "Move Left...\n"; + | MoveRight -> print_string "Move Right...\n"; + | MoveUp -> print_string "Move up\n"; + | MoveDown -> print_string "Move down\n"; + | Action -> print_string "Action\n"; + | ActionTwo -> print_string "ActionTwo\n"; + | Help -> print_string "Help\n"; + | NoEvent -> (); + | Quit -> + continue := false ; + print_string "Exiting...\n"; + | _ -> print_string "nothing...\n"; + done +;; + +let main () = + let player1 = Player.create () + and map1 = Maze.create () + in + ignore player1 ; + ignore map1 ; + Graphics.open_graph " 320x200+50+50"; + Graphics.set_window_title "Just Nuke It"; + game_loop (); + Graphics.close_graph () +;; + +main ();