From fec786f6c182a32e3be9a1ce5f47a54087e30f1d Mon Sep 17 00:00:00 2001
From: "Glenn Y. Rolland" <glenux@glenux.net>
Date: Mon, 18 Feb 2008 09:55:16 +0100
Subject: [PATCH] Import base files.

---
 Makefile    | 80 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 Maze.ml     | 31 +++++++++++++++++++++
 Player.ml   | 12 ++++++++
 Position.ml | 10 +++++++
 main.ml     | 46 ++++++++++++++++++++++++++++++
 main.old    | 67 ++++++++++++++++++++++++++++++++++++++++++++
 6 files changed, 246 insertions(+)
 create mode 100644 Makefile
 create mode 100644 Maze.ml
 create mode 100644 Player.ml
 create mode 100644 Position.ml
 create mode 100644 main.ml
 create mode 100644 main.old

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 ();