commit fec786f6c182a32e3be9a1ce5f47a54087e30f1d Author: Glenn Y. Rolland Date: Mon Feb 18 09:55:16 2008 +0100 Import base files. diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..9a071c1 --- /dev/null +++ b/Makefile @@ -0,0 +1,80 @@ +PROGRAMS=justnukeit + +justnukeit_OBJS=Position.cmx Maze.cmx Player.cmx main.cmx +justnukeit_LIBS=graphics.cmxa + +MODULES=$(patsubst %.mli,%,$(wildcard *.mli)) $(patsubst %.ml,%,$(wildcard *.ml)) + +CMI=$(patsubst %.ml,%.cmi,$(MODULES:=.ml)) +CMO=$(patsubst %.ml,%.cmo,$(MODULES:=.ml)) +CMX=$(patsubst %.ml,%.cmx,$(MODULES:=.ml)) +#LIB=unix.cmxa str.cmxa graphics.cmxa +LIB= + +OCAMLDEP=ocamldep +OCAMLOPT=ocamlopt +OCAMLC=ocamlc + + +SOURCE=main.ml + +OPTS=-w A -g + +define PROGRAM_template +ALL_OBJS += $$($(1)_OBJS) +$(1): $$($(1)_OBJS) + @echo -n -e "\x1B[31;1m" + @echo "[O] $@" + @echo -n -e "\x1B[0m" + $(OCAMLOPT) $(OPTS) $($(1)_LIBS) $($(1)_OBJS) -o $(1) + @echo "" +endef + +$(foreach prog,$(PROGRAMS),$(eval $(call PROGRAM_template,$(prog)))) + +.PHONY: all +all: $(PROGRAMS) + +%.cmi: %.mli + @echo -n -e "\x1B[31;1m" + @echo "[I] $<" + @echo -n -e "\x1B[0m" + @$(OCAMLC) -i $< + #@$(OCAMLC) $(OPTS) -c $< + @$(OCAMLOPT) $(OPTS) -c $< + @echo "" + +%.cmx: %.ml + @echo -n -e "\x1B[31;1m" + @echo "[C] $<" + @echo -n -e "\x1B[0m" + @$(OCAMLOPT) -i $< + @$(OCAMLOPT) $(OPTS) -c $< + @echo "" + +%.cmo %.cmi: %.ml %.cmi %.mli + @echo "[O] $<" + @$(OCAMLC) -i $< + @$(OCAMLC) $(OPTS) -c $< + echo "" + +%.cmo %.cmi: %.ml + @echo -n -e "\x1B[31;1m" + @echo "[O] $<" + @echo -n -e "\x1B[0m" + @$(OCAMLC) -i $< + @$(OCAMLC) $(OPTS) -c $< + echo "" + +clean: + rm -f $(PROGRAMS) *~ *.cm* *.o *.a *.so .depend *.cmxa *.cma + +.depend: $(MODULES:=.ml) + $(OCAMLDEP) $(MODULES:=.ml) $(MODULES:=.mli) > .depend + @echo "" + + +.SUFFIXES: + +-include .depend + diff --git a/Maze.ml b/Maze.ml new file mode 100644 index 0000000..878ee88 --- /dev/null +++ b/Maze.ml @@ -0,0 +1,31 @@ +type item_t = + | Bonus + | Malus + | NoItem +;; + +type block_t = + | Solid + | Breakable + | NoBlock +;; + +type t = { + mutable size_x : int ; + mutable size_y : int ; + mutable items : item_t array array ; + mutable blocks : block_t array array ; +};; + + +let default_x = 10;; + +let default_y = 10;; + +let create () = { + size_x = default_x ; + size_y = default_y ; + items = Array.make_matrix default_x default_y NoItem ; + blocks = Array.make_matrix default_x default_y NoBlock ; +} +;; diff --git a/Player.ml b/Player.ml new file mode 100644 index 0000000..2ff5264 --- /dev/null +++ b/Player.ml @@ -0,0 +1,12 @@ + +type t = { + mutable name : string ; + mutable lifes : int ; + mutable position : Position.t; +} + +let create () = { + name = "Unnamed player" ; + lifes = 3 ; + position = Position.zero ; +} diff --git a/Position.ml b/Position.ml new file mode 100644 index 0000000..0a5698e --- /dev/null +++ b/Position.ml @@ -0,0 +1,10 @@ +type t = { + mutable x : int ; + mutable y : int ; +} + +let zero = { + x = 0 ; + y = 0 ; +} + diff --git a/main.ml b/main.ml new file mode 100644 index 0000000..ed68500 --- /dev/null +++ b/main.ml @@ -0,0 +1,46 @@ +(* vim: set ts=2 sw=2 et : *) + +type game_event_t = + | MoveLeft + | MoveRight + | MoveUp + | MoveDown + | Action + | ActionTwo + | Help + | Quit + | None +;; + +let dispatch_event status = + if status.Graphics.keypressed then + match status.Graphics.key with + | 'q' -> Quit + | _ -> None + else + None +;; + +let game_loop () = + let continue = ref true + in + while !continue do + match dispatch_event ( Graphics.wait_next_event [Graphics.Poll] ) with + | Quit -> + continue := false ; + print_string "Exiting...\n"; + | _ -> print_string "nothing...\n"; + done +;; + +let main () = + let player1 = Player.create () + and map1 = Maze.create () + in + Graphics.open_graph " 320x200+50+50"; + Graphics.set_window_title "Just Nuke It"; + game_loop (); + Graphics.close_graph () +;; + +main (); diff --git a/main.old b/main.old new file mode 100644 index 0000000..fd0d4c2 --- /dev/null +++ b/main.old @@ -0,0 +1,67 @@ +type maze_t = Block of string + | Wall of int + | Empty of int + +type bonus_t = + | Add_one_life + | Steal_one_life (* graal *) + | Speed +;; + +type malus_t = + | Remove_one_life + | Slow_down +;; + +type item_t = + | Lifelong_bonus of bonus_t + | Lifelong_malus of malus_t + | Limited_malus of malus_t * int (* seconds *) + | Limited_bonus of bonus_t * int (* seconds *) + +type bomb_action_t = + | Explode + +type direction_t = + | Top + | Bottom + | Left + | Right +;; + +type player_action_t = + | Move of direction_t + | Push_bomb of direction_t + | Jump_walls of int +;; + +type bomb_modifier_t = + | Cross of int + | Square of int + | Fungus of int (* time to live *) +;; + +type bomb = { + player: player_t ; + modifiers: bomb_modifier_t list +};; + +type bomb_action_t = + | Appear_at of int * int + | Explode;; + +type action_t = + | Bomb of bomb_action_t + | Player of player_action_t + | Display of int * int * string +;; + + +let main () = + Graphics.open_graph " 320x200+50+50"; + Graphics.set_window_title "Just Nuke It"; + Graphics.wait_next_event []; + Graphics.close_graph () +;; + +main ();