109 lines
1.9 KiB
OCaml
109 lines
1.9 KiB
OCaml
(* vim: set ts=2 sw=2 et : *)
|
|
open Event;;
|
|
|
|
|
|
|
|
type config_t = {
|
|
mutable width : int ;
|
|
mutable height : int;
|
|
}
|
|
|
|
|
|
|
|
type notification_t =
|
|
| Graphics_status of Graphics.status
|
|
| Tick
|
|
;;
|
|
|
|
|
|
|
|
type game_event_t =
|
|
| MoveLeft
|
|
| MoveRight
|
|
| MoveUp
|
|
| MoveDown
|
|
| Action
|
|
| ActionTwo
|
|
| Help
|
|
| Quit
|
|
| NoEvent
|
|
;;
|
|
|
|
let image_filename = "images/test.png"
|
|
;;
|
|
|
|
|
|
|
|
let string_of_keyboard_event event =
|
|
try
|
|
let chr = Sdlkey.char_of_key event.Sdlevent.keysym
|
|
in
|
|
String.make 1 chr
|
|
with
|
|
| Invalid_argument _ -> "unknown-key"
|
|
;;
|
|
|
|
|
|
|
|
let rec event_loop () =
|
|
print_endline "Event_loop...";
|
|
Sdltimer.delay 20;
|
|
let match_event event = (
|
|
match event with
|
|
| Sdlevent.KEYDOWN {Sdlevent.keysym=Sdlkey.KEY_ESCAPE} ->
|
|
print_endline "You pressed escape! The fun is over now."
|
|
|
|
| Sdlevent.KEYDOWN event ->
|
|
Keyboard.handle_event event;
|
|
let keystr = string_of_keyboard_event event
|
|
in
|
|
print_endline ("You pressed " ^ keystr);
|
|
event_loop ()
|
|
|
|
| _ ->
|
|
event_loop ()
|
|
) in
|
|
|
|
let event_opt = Sdlevent.poll ()
|
|
in
|
|
|
|
match event_opt with
|
|
| None -> event_loop ()
|
|
| Some event -> match_event event;
|
|
;;
|
|
|
|
|
|
|
|
let game_loop ~screen =
|
|
let image = Sdlloader.load_image image_filename
|
|
and image_from = Sdlvideo.rect 0 0 300 300
|
|
and image_to = Sdlvideo.rect 100 0 300 300
|
|
in
|
|
Sdlvideo.blit_surface ~src:image ~src_rect:image_from ~dst:screen ~dst_rect:image_to ();
|
|
Sdlvideo.flip screen;
|
|
(* let action_fun = event_loop () ; *)
|
|
game_loop screen
|
|
;;
|
|
|
|
|
|
|
|
let main () =
|
|
let player1 = Player.create ()
|
|
and map1 = Maze.create ()
|
|
and config = { width = 640 ; height = 480 }
|
|
in
|
|
ignore player1 ;
|
|
ignore map1 ;
|
|
(* open window *)
|
|
Sdl.init [`VIDEO];
|
|
at_exit Sdl.quit;
|
|
Sdlttf.init ();
|
|
at_exit Sdlttf.quit;
|
|
(* set parameters & title *)
|
|
let screen = Sdlvideo.set_video_mode config.width config.height [`DOUBLEBUF]
|
|
in
|
|
game_loop ~screen:screen;
|
|
(* close window *)
|
|
;;
|
|
|
|
main ();
|