diff --git a/a.out b/a.out index 5f5b022..ad7fa6c 100755 Binary files a/a.out and b/a.out differ diff --git a/main b/main index 6742f08..81e232d 100755 Binary files a/main and b/main differ diff --git a/main.cmi b/main.cmi index b616bc8..95061f6 100644 Binary files a/main.cmi and b/main.cmi differ diff --git a/main.cmo b/main.cmo index 79eb727..b586eab 100644 Binary files a/main.cmo and b/main.cmo differ diff --git a/main.ml b/main.ml index 9e191bf..f42e766 100644 --- a/main.ml +++ b/main.ml @@ -1,5 +1,6 @@ -let __prefixes__ = [|"let"; "rec"; "and"|] ;; -let __keywords__ = [|"let"; "while"; "do"; "done"; "for"; "to"; "begin"; "end"; "try"; "with"; "raise"; "in"|] +let __prefixes__ = [|"let"; "rec"; "and"; "for"; "mutable"|] ;; +let __keywords__ = [|"let"; "while"; "do"; "done"; "for"; "to"; "begin"; "end"; "try"; "with"; "raise"; "in"|] ;; +let fbd = [|' '; '\n'; '('; ')'; '['; ']'; '{'; '}'; ';'; ','; '.'; ':'; '*'; '|'; '-'; '+'; '*'; '/'; '='; '<'; '>'; '!'|] ;; let concat_str (str : string ref) nstr = let n = String.length nstr in @@ -30,7 +31,6 @@ let parse_the_whole_thing filename = let is_an_integer ch = Char.code ch >= 48 && Char.code ch <= 57 ;; -let fbd = [|' '; '\n'; '('; ')'; '['; ']'; '{'; '}'; ';'; ','; '.'; ':'; '*'; '|'; '-'; '+'; '='; '<'; '>'; '!'|] ;; let to_list str = let n = String.length str in let rec aux acc i = match i with @@ -146,11 +146,11 @@ let convert filename ext = let whole = parse_the_whole_thing (filename^"."^ext) in (*Printf.printf "%s" whole ;*) let words = to_list whole in - (*print_to_list words ;*) + print_to_list words ; let fnames = detect_names words in (*print_to_list fnames ;*) let conversion_hash = generate_conversion_hash fnames in - Hashtbl.iter (fun k v -> Printf.printf "%s ----> %s\n" k v) conversion_hash ; + (*Hashtbl.iter (fun k v -> Printf.printf "%s ----> %s\n" k v) conversion_hash ;*) write_out filename whole ext fnames conversion_hash ;; diff --git a/tests/main_test_improved.cmi b/tests/main_test_improved.cmi index c08acc8..cb7757d 100644 Binary files a/tests/main_test_improved.cmi and b/tests/main_test_improved.cmi differ diff --git a/tests/main_test_improved.cmx b/tests/main_test_improved.cmx index 3787ea9..1666b7a 100644 Binary files a/tests/main_test_improved.cmx and b/tests/main_test_improved.cmx differ diff --git a/tests/main_test_improved.ml b/tests/main_test_improved.ml index 9fb4812..6287f7a 100644 --- a/tests/main_test_improved.ml +++ b/tests/main_test_improved.ml @@ -1,19 +1,19 @@ open Graphics ;; Random.self_init () ;; -(* use Ctrl+F with 'WALUIGI_TIME' to look for sections *) +(* use Ctrl+F with 'WALUIGI_TIME' to look for khqoaeuvur *) (* ------------------------------------------------------------------------------------- *) (* ------------------------------------------------------------------------------------- *) (* WALUIGI_TIME Types + Constants *) exception ReturnBool of bool ;; exception ReturnInt of int ;; exception ReturnIntArr of int array * int ;; -let khqoaeuvur = 1200 -and ydpmbgdtos = 800 ;; -let xxtvdauymf = " 1200x800" ;; -let hwwkinuyju = 0.003 ;; +let ydpmbgdtos = 1200 +and xxtvdauymf = 800 ;; +let hwwkinuyju = " 1200x800" ;; +let suvesniybj = 0.003 ;; type pt_2d = { -mutable x : float ; -mutable y : float ; +mutable blnwpctihp : float ; +mutable klqsywgkdl : float ; } ;; type polygon = { vertexes : pt_2d array ; @@ -22,7 +22,7 @@ xmin : float ; xmax : float ; ymin : float ; ymax : float ; -mutable restitution : float ; +mutable dvtuhryvdi : float ; score : int ; } ;; type sphere = { @@ -33,7 +33,7 @@ xmin : float ; xmax : float ; ymin : float ; ymax : float ; -mutable restitution : float ; +mutable dvtuhryvdi : float ; score : int ; } ;; type flipper_side = Left | Right ;; @@ -42,14 +42,14 @@ side : flipper_side ; xy : pt_2d ; radius : float ; length : float ; -mutable theta : float (* in degrees *) ; -mutable dtheta : float ; +mutable ouisbgnena : float (* in degrees *) ; +mutable lvyxllvhpy : float ; agmin : float ; agmax : float ; vtxs : polygon } ;; type ball = { -mutable active : bool ; +mutable atimibvjlv : bool ; radius : float ; mass : float ; rgb : int ; @@ -59,754 +59,754 @@ a : pt_2d ; fres : pt_2d ; } ;; (* --- *) -let suvesniybj = { +let gwibfgeoyo = { vertexes = [||] ; rgb = 0 ; xmin = 1. ; xmax = -. 1. ; ymin = 1. ; ymax = -. 1. ; -restitution = 0. ; +dvtuhryvdi = 0. ; score = 0 ; } ;; -let blnwpctihp = { -center = {x = 0. ; y = 0.} ; +let rsmybvbsus = { +center = {blnwpctihp = 0. ; klqsywgkdl = 0.} ; rgb = 0 ; radius = -. 1. ; xmin = 1. ; xmax = -. 1. ; ymin = 1. ; ymax = -. 1. ; -restitution = 0. ; +dvtuhryvdi = 0. ; score = 0 ; } ;; -let klqsywgkdl = { +let mxlcxxplnb = { side = Left ; -xy = {x = 0. ; y = 0.} ; +xy = {blnwpctihp = 0. ; klqsywgkdl = 0.} ; radius = 0. ; length = 0. ; -theta = 0. (* in degrees *) ; -dtheta = 0. ; +ouisbgnena = 0. (* in degrees *) ; +lvyxllvhpy = 0. ; agmin = 0. ; agmax = 0. ; -vtxs = suvesniybj ; +vtxs = gwibfgeoyo ; } ;; -let dvtuhryvdi = 750.0 ;; -let ouisbgnena = 3.14159265358979343 ;; -let lvyxllvhpy = (1. /. 131072.) ;; -let atimibvjlv = { -x = 0. ; -y = 0. ; +let ufmnpkhbse = 750.0 ;; +let slhhdrhgid = 3.14159265358979343 ;; +let pkuqrbeauq = (1. /. 131072.) ;; +let rkgsirelms = { +blnwpctihp = 0. ; +klqsywgkdl = 0. ; } ;; -let gwibfgeoyo = { -x = 1200. ; -y = 800. ; +let ghutvewblg = { +blnwpctihp = 1200. ; +klqsywgkdl = 800. ; } -let rsmybvbsus = { -x = 750. ; -y = 500. ; +let apchekncnf = { +blnwpctihp = 750. ; +klqsywgkdl = 500. ; } -let mxlcxxplnb = {x = 0. ; y = -. dvtuhryvdi} ;; -let ufmnpkhbse = ref 8 ;; +let sfpqqquwvd = {blnwpctihp = 0. ; klqsywgkdl = -. ufmnpkhbse} ;; +let rynmlxnnea = ref 8 ;; let score = ref 0 ;; (* ------------------------------------------------------------------------------------- *) (* ------------------------------------------------------------------------------------- *) (* WALUIGI_TIME Threads *) -let slhhdrhgid = 8 ;; -let pkuqrbeauq = Array.make slhhdrhgid false ;; -let rkgsirelms = ref 0 ;; -let ghutvewblg id = +let pqouljlqnm = 8 ;; +let venfkchenr = Array.make pqouljlqnm false ;; +let ewmqlkcvwl = ref 0 ;; +let hutnqtagjr id = while false do -if pkuqrbeauq.(id) then begin +if venfkchenr.(id) then begin ignore (Unix.system "./sound wah/scored_hit.wav") ; -pkuqrbeauq.(id) <- false ; +venfkchenr.(id) <- false ; end; -Unix.sleepf hwwkinuyju ; +Unix.sleepf suvesniybj ; done;; -let apchekncnf = Array.init slhhdrhgid (fun k -> Thread.create ghutvewblg k) ;; +let pmodmwkwvl = Array.init pqouljlqnm (fun k -> Thread.create hutnqtagjr k) ;; (**) -let sfpqqquwvd () = +let jcgvonjvkf () = while false do ignore (Unix.system "./sound wah/wah_metal.wav") ; ignore (Unix.system "./sound wah/wah_eurobeat.wav") ; ignore (Unix.system "./sound wah/wah_hardcore.wav") ; done;; -let rynmlxnnea = Thread.create sfpqqquwvd () ;; +let fbjwjbsrbx = Thread.create jcgvonjvkf () ;; (* ------------------------------------------------------------------------------------- *) (* ------------------------------------------------------------------------------------- *) (* WALUIGI_TIME Arithmetical operations *) -let rec pqouljlqnm x n = match n with +let rec gvhsmpxpat blnwpctihp n = match n with | 0 -> 1 -| 1 -> x -| k when k mod 2 = 0 -> pqouljlqnm (x*x) (n/2) -| k -> x * (pqouljlqnm (x*x) (n/2)) ;; -let rec venfkchenr x n = match n with +| 1 -> blnwpctihp +| k when k mod 2 = 0 -> gvhsmpxpat (blnwpctihp*blnwpctihp) (n/2) +| k -> blnwpctihp * (gvhsmpxpat (blnwpctihp*blnwpctihp) (n/2)) ;; +let rec infhrfotum blnwpctihp n = match n with | 0 -> 1. -| 1 -> x -| k when k mod 2 = 0 -> venfkchenr (x *. x) (n/2) -| k -> x *. (venfkchenr (x *. x) (n/2)) ;; -let rec ewmqlkcvwl n = match n with +| 1 -> blnwpctihp +| k when k mod 2 = 0 -> infhrfotum (blnwpctihp *. blnwpctihp) (n/2) +| k -> blnwpctihp *. (infhrfotum (blnwpctihp *. blnwpctihp) (n/2)) ;; +let rec vyvjbxvwlb n = match n with | k when k < 0 -> failwith "Are you sure about that ?" | k when k < 10 -> 0 -| k -> 1 + ewmqlkcvwl (k/10) ;; -let hutnqtagjr x y theta = -(1.0 -. theta) *. x +. theta *. y ;; -let pmodmwkwvl = function -| x when x < 0.0 -> -. x -| x -> x ;; -let rec jcgvonjvkf = function +| k -> 1 + vyvjbxvwlb (k/10) ;; +let nbpuggglmq blnwpctihp klqsywgkdl ouisbgnena = +(1.0 -. ouisbgnena) *. blnwpctihp +. ouisbgnena *. klqsywgkdl ;; +let ylxpvecdry = function +| blnwpctihp when blnwpctihp < 0.0 -> -. blnwpctihp +| blnwpctihp -> blnwpctihp ;; +let rec vevglnifxn = function | k when float_of_int (int_of_float k) = k -> int_of_float k -| k -> jcgvonjvkf (10.0 *. k) ;; -let fbjwjbsrbx = function +| k -> vevglnifxn (10.0 *. k) ;; +let dnofdwvumy = function | k when k < 10 -> 0 | _ -> 1 ;; -let gvhsmpxpat x n = -float_of_int (int_of_float (x *. venfkchenr 10. n)) /. (venfkchenr 10. n);; +let snohtmrgum blnwpctihp n = +float_of_int (int_of_float (blnwpctihp *. infhrfotum 10. n)) /. (infhrfotum 10. n);; (* ------------------------------------------------------------------------------------- *) (* ------------------------------------------------------------------------------------- *) (* WALUIGI_TIME Dynamic Arrays *) type 'a dynamic = { -mutable len : int ; -mutable memlen : int ; -mutable tab : 'a array +mutable bejecdgusu : int ; +mutable igjujhpadn : int ; +mutable pfjkjpqxed : 'a array } ;; -let infhrfotum (elt : 'a) = +let ucukbrjotn (elt : 'a) = { -len = 0 ; -memlen = 16 ; -tab = Array.make 16 elt +bejecdgusu = 0 ; +igjujhpadn = 16 ; +pfjkjpqxed = Array.make 16 elt } ;; -let vyvjbxvwlb (dyn : 'a dynamic) (elt : 'a) = -if dyn.len = dyn.memlen then begin -let nbpuggglmq = Array.make (2 * dyn.memlen) dyn.tab.(0) in -for i = 0 to dyn.memlen -1 do -nbpuggglmq.(i) <- dyn.tab.(i) +let maapulttqm (dyn : 'a dynamic) (elt : 'a) = +if dyn.bejecdgusu = dyn.igjujhpadn then begin +let mmqdncmyvk = Array.make (2 * dyn.igjujhpadn) dyn.pfjkjpqxed.(0) in +for dtbxywqphy = 0 to dyn.igjujhpadn -1 do +mmqdncmyvk.(dtbxywqphy) <- dyn.pfjkjpqxed.(dtbxywqphy) done; -dyn.tab <- nbpuggglmq ; -dyn.memlen <- dyn.memlen * 2 ; +dyn.pfjkjpqxed <- mmqdncmyvk ; +dyn.igjujhpadn <- dyn.igjujhpadn * 2 ; end; -dyn.tab.(dyn.len) <- elt ; -dyn.len <- dyn.len +1 ;; -let ylxpvecdry (dyn : 'a dynamic) (elt : 'a) = +dyn.pfjkjpqxed.(dyn.bejecdgusu) <- elt ; +dyn.bejecdgusu <- dyn.bejecdgusu +1 ;; +let quuxfwmgkd (dyn : 'a dynamic) (elt : 'a) = try -for i = 0 to dyn.len -1 do -if dyn.tab.(i) = elt then -raise (ReturnInt i) +for dtbxywqphy = 0 to dyn.bejecdgusu -1 do +if dyn.pfjkjpqxed.(dtbxywqphy) = elt then +raise (ReturnInt dtbxywqphy) done; raise (ReturnInt (-1)) with | ReturnInt (-1) -> () | ReturnInt k -> -for i = k to dyn.len -2 do -dyn.tab.(i) <- dyn.tab.(i+1) +for dtbxywqphy = k to dyn.bejecdgusu -2 do +dyn.pfjkjpqxed.(dtbxywqphy) <- dyn.pfjkjpqxed.(dtbxywqphy+1) done; -dyn.len <- dyn.len -1 ; -if (dyn.memlen >= 32) && (dyn.len * 4 <= dyn.memlen) then begin -let nbpuggglmq = Array.make (dyn.memlen/2) dyn.tab.(0) in -for i = 0 to dyn.len -1 do -nbpuggglmq.(i) <- dyn.tab.(i) +dyn.bejecdgusu <- dyn.bejecdgusu -1 ; +if (dyn.igjujhpadn >= 32) && (dyn.bejecdgusu * 4 <= dyn.igjujhpadn) then begin +let mmqdncmyvk = Array.make (dyn.igjujhpadn/2) dyn.pfjkjpqxed.(0) in +for dtbxywqphy = 0 to dyn.bejecdgusu -1 do +mmqdncmyvk.(dtbxywqphy) <- dyn.pfjkjpqxed.(dtbxywqphy) done; -dyn.tab <- nbpuggglmq ; -dyn.memlen <- dyn.memlen/2 ; +dyn.pfjkjpqxed <- mmqdncmyvk ; +dyn.igjujhpadn <- dyn.igjujhpadn/2 ; end ;; -let vevglnifxn (f : 'b -> 'a -> 'b) (acc0 : 'b) (dyn : 'a dynamic) = -let dnofdwvumy = ref acc0 in -for i = 0 to dyn.len -1 do -dnofdwvumy := f !dnofdwvumy dyn.tab.(i) +let yfvqjtmemd (f : 'b -> 'a -> 'b) (acc0 : 'b) (dyn : 'a dynamic) = +let uaqehictpv = ref acc0 in +for dtbxywqphy = 0 to dyn.bejecdgusu -1 do +uaqehictpv := f !uaqehictpv dyn.pfjkjpqxed.(dtbxywqphy) done; -!dnofdwvumy ;; +!uaqehictpv ;; (* ------------------------------------------------------------------------------------- *) (* ------------------------------------------------------------------------------------- *) (* WALUIGI_TIME Arithmetical operations *) -let snohtmrgum (px : pt_2d) (py : pt_2d) theta = +let pbrftxxxjk (px : pt_2d) (py : pt_2d) ouisbgnena = { -x = hutnqtagjr px.x py.x theta ; -y = hutnqtagjr px.y py.y theta ; +blnwpctihp = nbpuggglmq px.blnwpctihp py.blnwpctihp ouisbgnena ; +klqsywgkdl = nbpuggglmq px.klqsywgkdl py.klqsywgkdl ouisbgnena ; } ;; -let bejecdgusu (p1 : pt_2d) (p2 : pt_2d) = +let aerhhxwwcs (p1 : pt_2d) (p2 : pt_2d) = { -x = p1.x +. p2.x ; -y = p1.y +. p2.y ; +blnwpctihp = p1.blnwpctihp +. p2.blnwpctihp ; +klqsywgkdl = p1.klqsywgkdl +. p2.klqsywgkdl ; } ;; -let igjujhpadn (p1 : pt_2d) (p2 : pt_2d) = +let kyqufjbqgy (p1 : pt_2d) (p2 : pt_2d) = { -x = p1.x -. p2.x ; -y = p1.y -. p2.y ; +blnwpctihp = p1.blnwpctihp -. p2.blnwpctihp ; +klqsywgkdl = p1.klqsywgkdl -. p2.klqsywgkdl ; } ;; -let pfjkjpqxed (p1 : pt_2d) (lambda : float) = +let cqvkfwkyhr (p1 : pt_2d) (lambda : float) = { -x = p1.x *. lambda ; -y = p1.y *. lambda ; +blnwpctihp = p1.blnwpctihp *. lambda ; +klqsywgkdl = p1.klqsywgkdl *. lambda ; } ;; -let ucukbrjotn (p1 : pt_2d) (p2 : pt_2d) = +let pladpdsips (p1 : pt_2d) (p2 : pt_2d) = { -x = (p1.x +. p2.x) /. 2.0 ; -y = (p1.y +. p2.y) /. 2.0 ; +blnwpctihp = (p1.blnwpctihp +. p2.blnwpctihp) /. 2.0 ; +klqsywgkdl = (p1.klqsywgkdl +. p2.klqsywgkdl) /. 2.0 ; } ;; -let maapulttqm (p1 : pt_2d) (p2 : pt_2d) = +let acscetgpxy (p1 : pt_2d) (p2 : pt_2d) = { -x = -. (p2.y -. p1.y) ; -y = (p2.x -. p1.x) ; +blnwpctihp = -. (p2.klqsywgkdl -. p1.klqsywgkdl) ; +klqsywgkdl = (p2.blnwpctihp -. p1.blnwpctihp) ; } ;; -let mmqdncmyvk (m : pt_2d) (spt : pt_2d) (ept : pt_2d) = -match (-. ((ept.x -. spt.x) *. (spt.x -. m.x) +. (ept.y -. spt.y) *. (spt.y -. m.y)) /. ((ept.x -. spt.x) *. (ept.x -. spt.x) +. (ept.y -. spt.y) *. (ept.y -. spt.y))) with -| k when k >= 0. && k <= 1. -> (snohtmrgum spt ept k) +let ocboipiffc (m : pt_2d) (spt : pt_2d) (ept : pt_2d) = +match (-. ((ept.blnwpctihp -. spt.blnwpctihp) *. (spt.blnwpctihp -. m.blnwpctihp) +. (ept.klqsywgkdl -. spt.klqsywgkdl) *. (spt.klqsywgkdl -. m.klqsywgkdl)) /. ((ept.blnwpctihp -. spt.blnwpctihp) *. (ept.blnwpctihp -. spt.blnwpctihp) +. (ept.klqsywgkdl -. spt.klqsywgkdl) *. (ept.klqsywgkdl -. spt.klqsywgkdl))) with +| k when k >= 0. && k <= 1. -> (pbrftxxxjk spt ept k) | k when k < 0. -> spt | k -> ept ;; -let dtbxywqphy (m : pt_2d) (spt : pt_2d) (ept : pt_2d) = -let theta = (-. ((ept.x -. spt.x) *. (spt.x -. m.x) +. (ept.y -. spt.y) *. (spt.y -. m.y)) /. ((ept.x -. spt.x) *. (ept.x -. spt.x) +. (ept.y -. spt.y) *. (ept.y -. spt.y))) in -(snohtmrgum spt ept theta) ;; -let quuxfwmgkd (p1 : pt_2d) (p2 : pt_2d) = -p1.x *. p2.x +. p1.y *. p2.y ;; -let yfvqjtmemd (p1 : pt_2d) = -Float.sqrt (quuxfwmgkd p1 p1) ;; -let uaqehictpv (p1 : pt_2d) (p2 : pt_2d) = -yfvqjtmemd (igjujhpadn p1 p2) ;; -let pbrftxxxjk (v1 : pt_2d) (v2 : pt_2d) = -pfjkjpqxed v1 ((yfvqjtmemd v2) /. (yfvqjtmemd v1)) ;; -let aerhhxwwcs (v1 : pt_2d) = -pfjkjpqxed v1 (1.0 /. (yfvqjtmemd v1)) ;; -let kyqufjbqgy (m : pt_2d) (p1 : pt_2d) (p2 : pt_2d) = -let cqvkfwkyhr = dtbxywqphy m p1 p2 in -let pladpdsips = igjujhpadn cqvkfwkyhr m in -bejecdgusu (bejecdgusu pladpdsips pladpdsips) m ;; +let sbemaxpbld (m : pt_2d) (spt : pt_2d) (ept : pt_2d) = +let ouisbgnena = (-. ((ept.blnwpctihp -. spt.blnwpctihp) *. (spt.blnwpctihp -. m.blnwpctihp) +. (ept.klqsywgkdl -. spt.klqsywgkdl) *. (spt.klqsywgkdl -. m.klqsywgkdl)) /. ((ept.blnwpctihp -. spt.blnwpctihp) *. (ept.blnwpctihp -. spt.blnwpctihp) +. (ept.klqsywgkdl -. spt.klqsywgkdl) *. (ept.klqsywgkdl -. spt.klqsywgkdl))) in +(pbrftxxxjk spt ept ouisbgnena) ;; +let fllowoegnu (p1 : pt_2d) (p2 : pt_2d) = +p1.blnwpctihp *. p2.blnwpctihp +. p1.klqsywgkdl *. p2.klqsywgkdl ;; +let cxmkmqyagv (p1 : pt_2d) = +Float.sqrt (fllowoegnu p1 p1) ;; +let tbxypwjsph (p1 : pt_2d) (p2 : pt_2d) = +cxmkmqyagv (kyqufjbqgy p1 p2) ;; +let tprvaqtfxn (v1 : pt_2d) (v2 : pt_2d) = +cqvkfwkyhr v1 ((cxmkmqyagv v2) /. (cxmkmqyagv v1)) ;; +let guqrrsswri (v1 : pt_2d) = +cqvkfwkyhr v1 (1.0 /. (cxmkmqyagv v1)) ;; +let qxcksafkpf (m : pt_2d) (p1 : pt_2d) (p2 : pt_2d) = +let qxdpdgqebc = sbemaxpbld m p1 p2 in +let aqvohvorvs = kyqufjbqgy qxdpdgqebc m in +aerhhxwwcs (aerhhxwwcs aqvohvorvs aqvohvorvs) m ;; (* ------------------------------------------------------------------------------------- *) (* ------------------------------------------------------------------------------------- *) (* WALUIGI_TIME Physics functions *) -let acscetgpxy (b : ball) (dt : float) = +let ffmvmahtvp (b : ball) (dt : float) = { -x = b.xy.x +. b.v.x *. dt ; -y = b.xy.y +. b.v.y *. dt ; +blnwpctihp = b.xy.blnwpctihp +. b.v.blnwpctihp *. dt ; +klqsywgkdl = b.xy.klqsywgkdl +. b.v.klqsywgkdl *. dt ; } ;; -let ocboipiffc (b : ball) (poly : polygon) = -(b.xy.x +. b.radius >= poly.xmin) && (b.xy.x -. b.radius <= poly.xmax) && -(b.xy.y +. b.radius >= poly.ymin) && (b.xy.y -. b.radius <= poly.ymax) ;; -let sbemaxpbld (b : ball) (s : sphere) = -(b.xy.x +. b.radius >= s.xmin) && (b.xy.x -. b.radius <= s.xmax) && -(b.xy.y +. b.radius >= s.ymin) && (b.xy.y -. b.radius <= s.ymax) ;; -let fllowoegnu (m : pt_2d) (spt : pt_2d) (ept : pt_2d) = -match (-. ((ept.x -. spt.x) *. (spt.x -. m.x) +. (ept.y -. spt.y) *. (spt.y -. m.y)) /. ((ept.x -. spt.x) *. (ept.x -. spt.x) +. (ept.y -. spt.y) *. (ept.y -. spt.y))) with -| k when k >= 0. && k <= 1. -> uaqehictpv (snohtmrgum spt ept k) m -| k when k < 0. -> uaqehictpv spt m -| k -> uaqehictpv ept m ;; -let cxmkmqyagv (m : pt_2d) (spt : pt_2d) (ept : pt_2d) = -let theta = (-. ((ept.x -. spt.x) *. (spt.x -. m.x) +. (ept.y -. spt.y) *. (spt.y -. m.y)) /. ((ept.x -. spt.x) *. (ept.x -. spt.x) +. (ept.y -. spt.y) *. (ept.y -. spt.y))) in -uaqehictpv (snohtmrgum spt ept theta) m ;; -let tbxypwjsph (b : ball) (poly : polygon) (dt : float) = -if not (ocboipiffc b poly) then +let ompbdarwgo (b : ball) (poly : polygon) = +(b.xy.blnwpctihp +. b.radius >= poly.xmin) && (b.xy.blnwpctihp -. b.radius <= poly.xmax) && +(b.xy.klqsywgkdl +. b.radius >= poly.ymin) && (b.xy.klqsywgkdl -. b.radius <= poly.ymax) ;; +let iggdpgyaxj (b : ball) (s : sphere) = +(b.xy.blnwpctihp +. b.radius >= s.xmin) && (b.xy.blnwpctihp -. b.radius <= s.xmax) && +(b.xy.klqsywgkdl +. b.radius >= s.ymin) && (b.xy.klqsywgkdl -. b.radius <= s.ymax) ;; +let pxkgfflejm (m : pt_2d) (spt : pt_2d) (ept : pt_2d) = +match (-. ((ept.blnwpctihp -. spt.blnwpctihp) *. (spt.blnwpctihp -. m.blnwpctihp) +. (ept.klqsywgkdl -. spt.klqsywgkdl) *. (spt.klqsywgkdl -. m.klqsywgkdl)) /. ((ept.blnwpctihp -. spt.blnwpctihp) *. (ept.blnwpctihp -. spt.blnwpctihp) +. (ept.klqsywgkdl -. spt.klqsywgkdl) *. (ept.klqsywgkdl -. spt.klqsywgkdl))) with +| k when k >= 0. && k <= 1. -> tbxypwjsph (pbrftxxxjk spt ept k) m +| k when k < 0. -> tbxypwjsph spt m +| k -> tbxypwjsph ept m ;; +let xaqqcssgyu (m : pt_2d) (spt : pt_2d) (ept : pt_2d) = +let ouisbgnena = (-. ((ept.blnwpctihp -. spt.blnwpctihp) *. (spt.blnwpctihp -. m.blnwpctihp) +. (ept.klqsywgkdl -. spt.klqsywgkdl) *. (spt.klqsywgkdl -. m.klqsywgkdl)) /. ((ept.blnwpctihp -. spt.blnwpctihp) *. (ept.blnwpctihp -. spt.blnwpctihp) +. (ept.klqsywgkdl -. spt.klqsywgkdl) *. (ept.klqsywgkdl -. spt.klqsywgkdl))) in +tbxypwjsph (pbrftxxxjk spt ept ouisbgnena) m ;; +let gxyowcywlc (b : ball) (poly : polygon) (dt : float) = +if not (ompbdarwgo b poly) then ([||], 0) else begin try -let tprvaqtfxn = ref b.radius -and guqrrsswri = Array.make 3 (-1) -and qxcksafkpf = ref 0 in -for i = 0 to Array.length poly.vertexes - 1 do -let qxdpdgqebc = (fllowoegnu (acscetgpxy b dt) poly.vertexes.(i) poly.vertexes.((i+1) mod Array.length poly.vertexes)) in -if qxdpdgqebc <= !tprvaqtfxn -. lvyxllvhpy then begin -tprvaqtfxn := qxdpdgqebc ; -guqrrsswri.(0) <- i ; -guqrrsswri.(1) <- (-1) ; -guqrrsswri.(2) <- (-1) ; -qxcksafkpf := 1; +let kkoitxjucy = ref b.radius +and rseawtwpni = Array.make 3 (-1) +and htlsypempr = ref 0 in +for dtbxywqphy = 0 to Array.length poly.vertexes - 1 do +let oysqudbrnj = (pxkgfflejm (ffmvmahtvp b dt) poly.vertexes.(dtbxywqphy) poly.vertexes.((dtbxywqphy+1) mod Array.length poly.vertexes)) in +if oysqudbrnj <= !kkoitxjucy -. pkuqrbeauq then begin +kkoitxjucy := oysqudbrnj ; +rseawtwpni.(0) <- dtbxywqphy ; +rseawtwpni.(1) <- (-1) ; +rseawtwpni.(2) <- (-1) ; +htlsypempr := 1; end -else if qxdpdgqebc <= !tprvaqtfxn then begin -guqrrsswri.(!qxcksafkpf) <- i ; -incr qxcksafkpf ; +else if oysqudbrnj <= !kkoitxjucy then begin +rseawtwpni.(!htlsypempr) <- dtbxywqphy ; +incr htlsypempr ; end done; -raise (ReturnIntArr (guqrrsswri, !qxcksafkpf)) +raise (ReturnIntArr (rseawtwpni, !htlsypempr)) with | ReturnIntArr (a, b) -> (a, b) | Invalid_argument _ -> failwith "ok then" end ;; -let ghutvewblg () = -pkuqrbeauq.(!rkgsirelms) <- true ; -rkgsirelms := (!rkgsirelms+1) mod slhhdrhgid ;; -let aqvohvorvs (b : ball) (s : sphere) (dt : float) = -if not (sbemaxpbld b s) then +let hutnqtagjr () = +venfkchenr.(!ewmqlkcvwl) <- true ; +ewmqlkcvwl := (!ewmqlkcvwl+1) mod pqouljlqnm ;; +let uvvfdexeuk (b : ball) (s : sphere) (dt : float) = +if not (iggdpgyaxj b s) then false else -uaqehictpv (acscetgpxy b dt) (s.center) <= (s.radius +. b.radius) ;; -let ffmvmahtvp (b : ball) (polys : polygon array) (spheres : sphere array) (flips : flipper dynamic) (dt : float) = -b.fres.x <- 0. ; -b.fres.y <- 0. ; -for p = 0 to (Array.length polys -1) do -let (ompbdarwgo, hitlen) = (tbxypwjsph b polys.(p) dt) in +tbxypwjsph (ffmvmahtvp b dt) (s.center) <= (s.radius +. b.radius) ;; +let xspdkspljw (b : ball) (polys : polygon array) (spheres : sphere array) (flips : flipper dynamic) (dt : float) = +b.fres.blnwpctihp <- 0. ; +b.fres.klqsywgkdl <- 0. ; +for qgewwkqbap = 0 to (Array.length polys -1) do +let (hxwgbulfmm, hitlen) = (gxyowcywlc b polys.(qgewwkqbap) dt) in if hitlen > 0 then begin -for h = 0 to hitlen -1 do -let iggdpgyaxj = ompbdarwgo.(h) in -score := !score + polys.(p).score ; -if h = 0 && polys.(p).score > 0 then -ghutvewblg () ; -if polys.(p).restitution = 0. then begin -b.active <- false ; -decr ufmnpkhbse ; +for ijqcdxblfh = 0 to hitlen -1 do +let brumryeefp = hxwgbulfmm.(ijqcdxblfh) in +score := !score + polys.(qgewwkqbap).score ; +if ijqcdxblfh = 0 && polys.(qgewwkqbap).score > 0 then +hutnqtagjr () ; +if polys.(qgewwkqbap).dvtuhryvdi = 0. then begin +b.atimibvjlv <- false ; +decr rynmlxnnea ; end; (* apply normal reaction force *) -let pxkgfflejm = (iggdpgyaxj +1) mod (Array.length polys.(p).vertexes) in -let cqvkfwkyhr = mmqdncmyvk b.xy polys.(p).vertexes.(iggdpgyaxj) polys.(p).vertexes.(pxkgfflejm) in -let xaqqcssgyu = aerhhxwwcs (igjujhpadn b.xy cqvkfwkyhr) in -let gxyowcywlc = (quuxfwmgkd (aerhhxwwcs mxlcxxplnb) xaqqcssgyu) in -if gxyowcywlc > 0. then begin -let kkoitxjucy = pfjkjpqxed xaqqcssgyu (dvtuhryvdi *. b.mass *. gxyowcywlc) in -b.fres.x <- b.fres.x +. kkoitxjucy.x *. polys.(p).restitution /. float_of_int hitlen ; -b.fres.y <- b.fres.y +. kkoitxjucy.y *. polys.(p).restitution /. float_of_int hitlen ; +let ortmvyuadt = (brumryeefp +1) mod (Array.length polys.(qgewwkqbap).vertexes) in +let qxdpdgqebc = ocboipiffc b.xy polys.(qgewwkqbap).vertexes.(brumryeefp) polys.(qgewwkqbap).vertexes.(ortmvyuadt) in +let lfeiwkypud = guqrrsswri (kyqufjbqgy b.xy qxdpdgqebc) in +let akksmqshhj = (fllowoegnu (guqrrsswri sfpqqquwvd) lfeiwkypud) in +if akksmqshhj > 0. then begin +let micgxbkxot = cqvkfwkyhr lfeiwkypud (ufmnpkhbse *. b.mass *. akksmqshhj) in +b.fres.blnwpctihp <- b.fres.blnwpctihp +. micgxbkxot.blnwpctihp *. polys.(qgewwkqbap).dvtuhryvdi /. float_of_int hitlen ; +b.fres.klqsywgkdl <- b.fres.klqsywgkdl +. micgxbkxot.klqsywgkdl *. polys.(qgewwkqbap).dvtuhryvdi /. float_of_int hitlen ; end; (* change velocity according to angle *) if hitlen = 1 then begin -let rseawtwpni = igjujhpadn polys.(p).vertexes.(pxkgfflejm) polys.(p).vertexes.(iggdpgyaxj) in -let htlsypempr = kyqufjbqgy b.v {x = 0. ; y = 0.} rseawtwpni in -b.v.x <- htlsypempr.x ; -b.v.y <- htlsypempr.y ; +let gunvxnxkeu = kyqufjbqgy polys.(qgewwkqbap).vertexes.(ortmvyuadt) polys.(qgewwkqbap).vertexes.(brumryeefp) in +let nkktxxoumg = qxcksafkpf b.v {blnwpctihp = 0. ; klqsywgkdl = 0.} gunvxnxkeu in +b.v.blnwpctihp <- nkktxxoumg.blnwpctihp ; +b.v.klqsywgkdl <- nkktxxoumg.klqsywgkdl ; end else begin -let oysqudbrnj = pfjkjpqxed (aerhhxwwcs (igjujhpadn b.xy cqvkfwkyhr)) (yfvqjtmemd b.v) in -b.v.x <- oysqudbrnj.x ; -b.v.y <- oysqudbrnj.y ; +let vvielwjcau = cqvkfwkyhr (guqrrsswri (kyqufjbqgy b.xy qxdpdgqebc)) (cxmkmqyagv b.v) in +b.v.blnwpctihp <- vvielwjcau.blnwpctihp ; +b.v.klqsywgkdl <- vvielwjcau.klqsywgkdl ; end done end done ; for s = 0 to (Array.length spheres -1) do -if aqvohvorvs b spheres.(s) dt then begin +if uvvfdexeuk b spheres.(s) dt then begin score := !score + spheres.(s).score ; if spheres.(s).score > 0 then -ghutvewblg () ; -if spheres.(s).restitution = 0. then begin -b.active <- false ; -decr ufmnpkhbse ; +hutnqtagjr () ; +if spheres.(s).dvtuhryvdi = 0. then begin +b.atimibvjlv <- false ; +decr rynmlxnnea ; end; (* apply normal reaction force *) -let xaqqcssgyu = aerhhxwwcs (igjujhpadn b.xy spheres.(s).center) in -let gxyowcywlc = (quuxfwmgkd (aerhhxwwcs mxlcxxplnb) xaqqcssgyu) in -if gxyowcywlc > 0. then begin -let kkoitxjucy = pfjkjpqxed xaqqcssgyu (dvtuhryvdi *. b.mass *. gxyowcywlc) in -b.fres.x <- b.fres.x +. kkoitxjucy.x *. spheres.(s).restitution *. 1.1 ; -b.fres.y <- b.fres.y +. kkoitxjucy.y *. spheres.(s).restitution *. 1.1 ; +let lfeiwkypud = guqrrsswri (kyqufjbqgy b.xy spheres.(s).center) in +let akksmqshhj = (fllowoegnu (guqrrsswri sfpqqquwvd) lfeiwkypud) in +if akksmqshhj > 0. then begin +let micgxbkxot = cqvkfwkyhr lfeiwkypud (ufmnpkhbse *. b.mass *. akksmqshhj) in +b.fres.blnwpctihp <- b.fres.blnwpctihp +. micgxbkxot.blnwpctihp *. spheres.(s).dvtuhryvdi *. 1.1 ; +b.fres.klqsywgkdl <- b.fres.klqsywgkdl +. micgxbkxot.klqsywgkdl *. spheres.(s).dvtuhryvdi *. 1.1 ; end; (* change velocity according to angle *) -let theta = b.radius /. (yfvqjtmemd (igjujhpadn b.xy spheres.(s).center)) in -let uvvfdexeuk = (snohtmrgum b.xy spheres.(s).center theta) in -let rseawtwpni = maapulttqm uvvfdexeuk (bejecdgusu uvvfdexeuk xaqqcssgyu) in -let htlsypempr = kyqufjbqgy b.v {x = 0. ; y = 0.} rseawtwpni in -b.v.x <- htlsypempr.x ; -b.v.y <- htlsypempr.y ; +let ouisbgnena = b.radius /. (cxmkmqyagv (kyqufjbqgy b.xy spheres.(s).center)) in +let cedssxkuuc = (pbrftxxxjk b.xy spheres.(s).center ouisbgnena) in +let gunvxnxkeu = acscetgpxy cedssxkuuc (aerhhxwwcs cedssxkuuc lfeiwkypud) in +let nkktxxoumg = qxcksafkpf b.v {blnwpctihp = 0. ; klqsywgkdl = 0.} gunvxnxkeu in +b.v.blnwpctihp <- nkktxxoumg.blnwpctihp ; +b.v.klqsywgkdl <- nkktxxoumg.klqsywgkdl ; end done ; -for f = 0 to flips.len -1 do -let (ompbdarwgo, hitlen) = (tbxypwjsph b flips.tab.(f).vtxs dt) in +for f = 0 to flips.bejecdgusu -1 do +let (hxwgbulfmm, hitlen) = (gxyowcywlc b flips.pfjkjpqxed.(f).vtxs dt) in if hitlen > 0 then begin -for h = 0 to hitlen -1 do -let iggdpgyaxj = ompbdarwgo.(h) in +for ijqcdxblfh = 0 to hitlen -1 do +let brumryeefp = hxwgbulfmm.(ijqcdxblfh) in (* apply normal reaction force *) -let pxkgfflejm = (iggdpgyaxj +1) mod (Array.length flips.tab.(f).vtxs.vertexes) in -let cqvkfwkyhr = mmqdncmyvk b.xy flips.tab.(f).vtxs.vertexes.(iggdpgyaxj) flips.tab.(f).vtxs.vertexes.(pxkgfflejm) in -let xaqqcssgyu = aerhhxwwcs (igjujhpadn b.xy cqvkfwkyhr) in -let gxyowcywlc = (quuxfwmgkd (aerhhxwwcs mxlcxxplnb) xaqqcssgyu) in -if gxyowcywlc > 0. then begin -let kkoitxjucy = pfjkjpqxed xaqqcssgyu (dvtuhryvdi *. b.mass *. gxyowcywlc) in -b.fres.x <- b.fres.x +. kkoitxjucy.x *. flips.tab.(f).vtxs.restitution /. float_of_int hitlen ; -b.fres.y <- b.fres.y +. kkoitxjucy.y *. flips.tab.(f).vtxs.restitution /. float_of_int hitlen ; +let ortmvyuadt = (brumryeefp +1) mod (Array.length flips.pfjkjpqxed.(f).vtxs.vertexes) in +let qxdpdgqebc = ocboipiffc b.xy flips.pfjkjpqxed.(f).vtxs.vertexes.(brumryeefp) flips.pfjkjpqxed.(f).vtxs.vertexes.(ortmvyuadt) in +let lfeiwkypud = guqrrsswri (kyqufjbqgy b.xy qxdpdgqebc) in +let akksmqshhj = (fllowoegnu (guqrrsswri sfpqqquwvd) lfeiwkypud) in +if akksmqshhj > 0. then begin +let micgxbkxot = cqvkfwkyhr lfeiwkypud (ufmnpkhbse *. b.mass *. akksmqshhj) in +b.fres.blnwpctihp <- b.fres.blnwpctihp +. micgxbkxot.blnwpctihp *. flips.pfjkjpqxed.(f).vtxs.dvtuhryvdi /. float_of_int hitlen ; +b.fres.klqsywgkdl <- b.fres.klqsywgkdl +. micgxbkxot.klqsywgkdl *. flips.pfjkjpqxed.(f).vtxs.dvtuhryvdi /. float_of_int hitlen ; end; (* change velocity according to angle *) if hitlen = 1 then begin -let rseawtwpni = igjujhpadn flips.tab.(f).vtxs.vertexes.(pxkgfflejm) flips.tab.(f).vtxs.vertexes.(iggdpgyaxj) in -let htlsypempr = kyqufjbqgy b.v {x = 0. ; y = 0.} rseawtwpni in -b.v.x <- htlsypempr.x ; -b.v.y <- htlsypempr.y ; +let gunvxnxkeu = kyqufjbqgy flips.pfjkjpqxed.(f).vtxs.vertexes.(ortmvyuadt) flips.pfjkjpqxed.(f).vtxs.vertexes.(brumryeefp) in +let nkktxxoumg = qxcksafkpf b.v {blnwpctihp = 0. ; klqsywgkdl = 0.} gunvxnxkeu in +b.v.blnwpctihp <- nkktxxoumg.blnwpctihp ; +b.v.klqsywgkdl <- nkktxxoumg.klqsywgkdl ; end else begin -let oysqudbrnj = pfjkjpqxed (aerhhxwwcs (igjujhpadn b.xy cqvkfwkyhr)) (yfvqjtmemd b.v) in -b.v.x <- oysqudbrnj.x ; -b.v.y <- oysqudbrnj.y ; +let vvielwjcau = cqvkfwkyhr (guqrrsswri (kyqufjbqgy b.xy qxdpdgqebc)) (cxmkmqyagv b.v) in +b.v.blnwpctihp <- vvielwjcau.blnwpctihp ; +b.v.klqsywgkdl <- vvielwjcau.klqsywgkdl ; end; -(* add relative velocity [disabled for physical reasons] *) -if false && ((flips.tab.(f).side = Left && flips.tab.(f).dtheta > 0.) || (flips.tab.(f).side = Right && flips.tab.(f).dtheta < 0.)) then begin -b.v.x <- 0.5 *. b.v.x +. flips.tab.(f).dtheta *. 3.14159 /. 180. *. (uaqehictpv flips.tab.(f).xy b.xy) *. (cos (flips.tab.(f).theta *. 3.14159 /. 180.)); -b.v.y <- 0.5 *. b.v.y +. flips.tab.(f).dtheta *. 3.14159 /. 180. *. (uaqehictpv flips.tab.(f).xy b.xy) *. (sin (flips.tab.(f).theta *. 3.14159 /. 180.)); +(* add relative velocity [disabled for yaaxjbqqjx reasons] *) +if false && ((flips.pfjkjpqxed.(f).side = Left && flips.pfjkjpqxed.(f).lvyxllvhpy > 0.) || (flips.pfjkjpqxed.(f).side = Right && flips.pfjkjpqxed.(f).lvyxllvhpy < 0.)) then begin +b.v.blnwpctihp <- 0.5 *. b.v.blnwpctihp +. flips.pfjkjpqxed.(f).lvyxllvhpy *. 3.14159 /. 180. *. (tbxypwjsph flips.pfjkjpqxed.(f).xy b.xy) *. (cos (flips.pfjkjpqxed.(f).ouisbgnena *. 3.14159 /. 180.)); +b.v.klqsywgkdl <- 0.5 *. b.v.klqsywgkdl +. flips.pfjkjpqxed.(f).lvyxllvhpy *. 3.14159 /. 180. *. (tbxypwjsph flips.pfjkjpqxed.(f).xy b.xy) *. (sin (flips.pfjkjpqxed.(f).ouisbgnena *. 3.14159 /. 180.)); end done end done; (* P = mg *) -b.fres.y <- b.fres.y -. dvtuhryvdi *. b.mass ; +b.fres.klqsywgkdl <- b.fres.klqsywgkdl -. ufmnpkhbse *. b.mass ; (* PFD : ma = sum(F) *) -b.a.x <- b.fres.x /. b.mass ; -b.a.y <- b.fres.y /. b.mass ; -b.v.x <- b.v.x +. b.a.x *. dt ; -b.v.y <- b.v.y +. b.a.y *. dt ; -b.xy.x <- b.xy.x +. b.v.x *. dt ; -b.xy.y <- b.xy.y +. b.v.y *. dt ;; -let xspdkspljw (bl : ball array) (polys : polygon array) (spheres : sphere array) (flips : flipper dynamic) (dt : float) = +b.a.blnwpctihp <- b.fres.blnwpctihp /. b.mass ; +b.a.klqsywgkdl <- b.fres.klqsywgkdl /. b.mass ; +b.v.blnwpctihp <- b.v.blnwpctihp +. b.a.blnwpctihp *. dt ; +b.v.klqsywgkdl <- b.v.klqsywgkdl +. b.a.klqsywgkdl *. dt ; +b.xy.blnwpctihp <- b.xy.blnwpctihp +. b.v.blnwpctihp *. dt ; +b.xy.klqsywgkdl <- b.xy.klqsywgkdl +. b.v.klqsywgkdl *. dt ;; +let wkqbyygdvn (bl : ball array) (polys : polygon array) (spheres : sphere array) (flips : flipper dynamic) (dt : float) = for b = 0 to Array.length bl -1 do -if bl.(b).active then -ffmvmahtvp bl.(b) polys spheres flips dt +if bl.(b).atimibvjlv then +xspdkspljw bl.(b) polys spheres flips dt done ;; -let qgewwkqbap (flips : flipper dynamic) (dt : float) = -for fl = 0 to flips.len -1 do -if flips.tab.(fl).dtheta <> 0. then begin -let hxwgbulfmm = flips.tab.(fl).xy.x -and ijqcdxblfh = flips.tab.(fl).xy.y -and brumryeefp = flips.tab.(fl).radius -and len = flips.tab.(fl).length -and ortmvyuadt = flips.tab.(fl).theta in -match flips.tab.(fl).side with +let eijhhwwbqm (flips : flipper dynamic) (dt : float) = +for dwhfllwgax = 0 to flips.bejecdgusu -1 do +if flips.pfjkjpqxed.(dwhfllwgax).lvyxllvhpy <> 0. then begin +let uqvgbvmfqp = flips.pfjkjpqxed.(dwhfllwgax).xy.blnwpctihp +and waisadxkmv = flips.pfjkjpqxed.(dwhfllwgax).xy.klqsywgkdl +and aiiilcgctu = flips.pfjkjpqxed.(dwhfllwgax).radius +and bejecdgusu = flips.pfjkjpqxed.(dwhfllwgax).length +and bkicytmgfd = flips.pfjkjpqxed.(dwhfllwgax).ouisbgnena in +match flips.pfjkjpqxed.(dwhfllwgax).side with | Left -> -let lfeiwkypud = flips.tab.(fl).theta +. flips.tab.(fl).dtheta *. dt in -if lfeiwkypud > flips.tab.(fl).agmax then -flips.tab.(fl).dtheta <- -.(flips.tab.(fl).dtheta) ; -if lfeiwkypud < flips.tab.(fl).agmin then -flips.tab.(fl).dtheta <- 0. ; -flips.tab.(fl).theta <- lfeiwkypud ; -flips.tab.(fl).vtxs.vertexes.(0) <- { -x = hxwgbulfmm +. len *. (cos (ortmvyuadt *. 3.14159 /. 180.)); -y = ijqcdxblfh +. len *. (sin (ortmvyuadt *. 3.14159 /. 180.)) +let wgqkvaivry = flips.pfjkjpqxed.(dwhfllwgax).ouisbgnena +. flips.pfjkjpqxed.(dwhfllwgax).lvyxllvhpy *. dt in +if wgqkvaivry > flips.pfjkjpqxed.(dwhfllwgax).agmax then +flips.pfjkjpqxed.(dwhfllwgax).lvyxllvhpy <- -.(flips.pfjkjpqxed.(dwhfllwgax).lvyxllvhpy) ; +if wgqkvaivry < flips.pfjkjpqxed.(dwhfllwgax).agmin then +flips.pfjkjpqxed.(dwhfllwgax).lvyxllvhpy <- 0. ; +flips.pfjkjpqxed.(dwhfllwgax).ouisbgnena <- wgqkvaivry ; +flips.pfjkjpqxed.(dwhfllwgax).vtxs.vertexes.(0) <- { +blnwpctihp = uqvgbvmfqp +. bejecdgusu *. (cos (bkicytmgfd *. 3.14159 /. 180.)); +klqsywgkdl = waisadxkmv +. bejecdgusu *. (sin (bkicytmgfd *. 3.14159 /. 180.)) }; -flips.tab.(fl).vtxs.vertexes.(1) <- { -x = hxwgbulfmm +. brumryeefp *. (cos ((ortmvyuadt +. 90.) *. 3.14159 /. 180.)); -y = ijqcdxblfh +. brumryeefp *. (sin ((ortmvyuadt +. 90.) *. 3.14159 /. 180.)) +flips.pfjkjpqxed.(dwhfllwgax).vtxs.vertexes.(1) <- { +blnwpctihp = uqvgbvmfqp +. aiiilcgctu *. (cos ((bkicytmgfd +. 90.) *. 3.14159 /. 180.)); +klqsywgkdl = waisadxkmv +. aiiilcgctu *. (sin ((bkicytmgfd +. 90.) *. 3.14159 /. 180.)) }; -flips.tab.(fl).vtxs.vertexes.(2) <- { -x = hxwgbulfmm +. brumryeefp *. (cos ((ortmvyuadt -. 90.) *. 3.14159 /. 180.)); -y = ijqcdxblfh +. brumryeefp *. (sin ((ortmvyuadt -. 90.) *. 3.14159 /. 180.)) +flips.pfjkjpqxed.(dwhfllwgax).vtxs.vertexes.(2) <- { +blnwpctihp = uqvgbvmfqp +. aiiilcgctu *. (cos ((bkicytmgfd -. 90.) *. 3.14159 /. 180.)); +klqsywgkdl = waisadxkmv +. aiiilcgctu *. (sin ((bkicytmgfd -. 90.) *. 3.14159 /. 180.)) }; | Right -> -let lfeiwkypud = flips.tab.(fl).theta +. flips.tab.(fl).dtheta *. dt in -if lfeiwkypud > flips.tab.(fl).agmax then -flips.tab.(fl).dtheta <- 0. ; -if lfeiwkypud < flips.tab.(fl).agmin then -flips.tab.(fl).dtheta <- -.(flips.tab.(fl).dtheta) ; -flips.tab.(fl).theta <- lfeiwkypud ; -flips.tab.(fl).vtxs.vertexes.(0) <- { -x = hxwgbulfmm +. len *. (cos (ortmvyuadt *. 3.14159 /. 180.)); -y = ijqcdxblfh +. len *. (sin (ortmvyuadt *. 3.14159 /. 180.)) +let wgqkvaivry = flips.pfjkjpqxed.(dwhfllwgax).ouisbgnena +. flips.pfjkjpqxed.(dwhfllwgax).lvyxllvhpy *. dt in +if wgqkvaivry > flips.pfjkjpqxed.(dwhfllwgax).agmax then +flips.pfjkjpqxed.(dwhfllwgax).lvyxllvhpy <- 0. ; +if wgqkvaivry < flips.pfjkjpqxed.(dwhfllwgax).agmin then +flips.pfjkjpqxed.(dwhfllwgax).lvyxllvhpy <- -.(flips.pfjkjpqxed.(dwhfllwgax).lvyxllvhpy) ; +flips.pfjkjpqxed.(dwhfllwgax).ouisbgnena <- wgqkvaivry ; +flips.pfjkjpqxed.(dwhfllwgax).vtxs.vertexes.(0) <- { +blnwpctihp = uqvgbvmfqp +. bejecdgusu *. (cos (bkicytmgfd *. 3.14159 /. 180.)); +klqsywgkdl = waisadxkmv +. bejecdgusu *. (sin (bkicytmgfd *. 3.14159 /. 180.)) }; -flips.tab.(fl).vtxs.vertexes.(1) <- { -x = hxwgbulfmm +. brumryeefp *. (cos ((ortmvyuadt +. 90.) *. 3.14159 /. 180.)); -y = ijqcdxblfh +. brumryeefp *. (sin ((ortmvyuadt +. 90.) *. 3.14159 /. 180.)) +flips.pfjkjpqxed.(dwhfllwgax).vtxs.vertexes.(1) <- { +blnwpctihp = uqvgbvmfqp +. aiiilcgctu *. (cos ((bkicytmgfd +. 90.) *. 3.14159 /. 180.)); +klqsywgkdl = waisadxkmv +. aiiilcgctu *. (sin ((bkicytmgfd +. 90.) *. 3.14159 /. 180.)) }; -flips.tab.(fl).vtxs.vertexes.(2) <- { -x = hxwgbulfmm +. brumryeefp *. (cos ((ortmvyuadt -. 90.) *. 3.14159 /. 180.)); -y = ijqcdxblfh +. brumryeefp *. (sin ((ortmvyuadt -. 90.) *. 3.14159 /. 180.)) +flips.pfjkjpqxed.(dwhfllwgax).vtxs.vertexes.(2) <- { +blnwpctihp = uqvgbvmfqp +. aiiilcgctu *. (cos ((bkicytmgfd -. 90.) *. 3.14159 /. 180.)); +klqsywgkdl = waisadxkmv +. aiiilcgctu *. (sin ((bkicytmgfd -. 90.) *. 3.14159 /. 180.)) }; end done ;; (* ------------------------------------------------------------------------------------- *) (* ------------------------------------------------------------------------------------- *) (* WALUIGI_TIME Graphics fcts *) -let akksmqshhj hxwgbulfmm y n0 r = +let lhbcpmtcyh uqvgbvmfqp klqsywgkdl n0 r = (* 7-seg display *) let n = ref n0 in -let micgxbkxot = ewmqlkcvwl n0 in -let len = r/3 in -let gunvxnxkeu = micgxbkxot*(len*11/7)/2 in -for i = 0 to micgxbkxot do -let x = hxwgbulfmm + gunvxnxkeu - i*(len*11/7) in +let xmlrntccqv = vyvjbxvwlb n0 in +let bejecdgusu = r/3 in +let endykgqsgx = xmlrntccqv*(bejecdgusu*11/7)/2 in +for dtbxywqphy = 0 to xmlrntccqv do +let blnwpctihp = uqvgbvmfqp + endykgqsgx - dtbxywqphy*(bejecdgusu*11/7) in if Array.mem (!n mod 10) [|0; 4; 5; 6; 7; 8; 9|] then -draw_poly_line [|(x-len/2, y+len); (x-len/2, y)|]; +draw_poly_line [|(blnwpctihp-bejecdgusu/2, klqsywgkdl+bejecdgusu); (blnwpctihp-bejecdgusu/2, klqsywgkdl)|]; if Array.mem (!n mod 10) [|0; 2; 3; 5; 6; 7; 8; 9|] then -draw_poly_line [|(x-len/2, y+len); (x+len/2, y+len)|]; +draw_poly_line [|(blnwpctihp-bejecdgusu/2, klqsywgkdl+bejecdgusu); (blnwpctihp+bejecdgusu/2, klqsywgkdl+bejecdgusu)|]; if Array.mem (!n mod 10) [|0; 1; 2; 3; 4; 7; 8; 9|] then -draw_poly_line [|(x+len/2, y+len); (x+len/2, y)|]; +draw_poly_line [|(blnwpctihp+bejecdgusu/2, klqsywgkdl+bejecdgusu); (blnwpctihp+bejecdgusu/2, klqsywgkdl)|]; if Array.mem (!n mod 10) [|2; 3; 4; 5; 6; 8; 9|] then -draw_poly_line [|(x-len/2, y); (x+len/2, y)|]; +draw_poly_line [|(blnwpctihp-bejecdgusu/2, klqsywgkdl); (blnwpctihp+bejecdgusu/2, klqsywgkdl)|]; if Array.mem (!n mod 10) [|0; 1; 3; 4; 5; 6; 7; 8; 9|] then -draw_poly_line [|(x+len/2, y-len); (x+len/2, y)|]; +draw_poly_line [|(blnwpctihp+bejecdgusu/2, klqsywgkdl-bejecdgusu); (blnwpctihp+bejecdgusu/2, klqsywgkdl)|]; if Array.mem (!n mod 10) [|0; 2; 3; 5; 6; 8; 9|] then -draw_poly_line [|(x-len/2, y-len); (x+len/2, y-len)|]; +draw_poly_line [|(blnwpctihp-bejecdgusu/2, klqsywgkdl-bejecdgusu); (blnwpctihp+bejecdgusu/2, klqsywgkdl-bejecdgusu)|]; if Array.mem (!n mod 10) [|0; 2; 6; 8|] then -draw_poly_line [|(x-len/2, y-len); (x-len/2, y)|]; +draw_poly_line [|(blnwpctihp-bejecdgusu/2, klqsywgkdl-bejecdgusu); (blnwpctihp-bejecdgusu/2, klqsywgkdl)|]; n := !n/10; done ;; -let nkktxxoumg hxwgbulfmm y n0 len = +let jyyiilwnkr uqvgbvmfqp klqsywgkdl n0 bejecdgusu = (* 7-seg display 2 *) -set_line_width (max 1 (len/4)); +set_line_width (max 1 (bejecdgusu/4)); let n = ref n0 in -let micgxbkxot = ewmqlkcvwl (abs n0) in -let vvielwjcau = ref (hxwgbulfmm + micgxbkxot*(len*11/7)) in +let xmlrntccqv = vyvjbxvwlb (abs n0) in +let qsmxalwtqk = ref (uqvgbvmfqp + xmlrntccqv*(bejecdgusu*11/7)) in if !n < 0 then begin n := !n * (-1); -draw_poly_line [|(hxwgbulfmm, y); (hxwgbulfmm+len, y)|]; -vvielwjcau := !vvielwjcau + (len*11/7) +draw_poly_line [|(uqvgbvmfqp, klqsywgkdl); (uqvgbvmfqp+bejecdgusu, klqsywgkdl)|]; +qsmxalwtqk := !qsmxalwtqk + (bejecdgusu*11/7) end; -for i = 0 to micgxbkxot do -let x = !vvielwjcau in +for dtbxywqphy = 0 to xmlrntccqv do +let blnwpctihp = !qsmxalwtqk in if Array.mem (!n mod 10) [|0; 4; 5; 6; 7; 8; 9|] then -draw_poly_line [|(x, y+len); (x, y)|]; +draw_poly_line [|(blnwpctihp, klqsywgkdl+bejecdgusu); (blnwpctihp, klqsywgkdl)|]; if Array.mem (!n mod 10) [|0; 2; 3; 5; 6; 7; 8; 9|] then -draw_poly_line [|(x, y+len); (x+len, y+len)|]; +draw_poly_line [|(blnwpctihp, klqsywgkdl+bejecdgusu); (blnwpctihp+bejecdgusu, klqsywgkdl+bejecdgusu)|]; if Array.mem (!n mod 10) [|0; 1; 2; 3; 4; 7; 8; 9|] then -draw_poly_line [|(x+len, y+len); (x+len, y)|]; +draw_poly_line [|(blnwpctihp+bejecdgusu, klqsywgkdl+bejecdgusu); (blnwpctihp+bejecdgusu, klqsywgkdl)|]; if Array.mem (!n mod 10) [|2; 3; 4; 5; 6; 8; 9|] then -draw_poly_line [|(x, y); (x+len, y)|]; +draw_poly_line [|(blnwpctihp, klqsywgkdl); (blnwpctihp+bejecdgusu, klqsywgkdl)|]; if Array.mem (!n mod 10) [|0; 1; 3; 4; 5; 6; 7; 8; 9|] then -draw_poly_line [|(x+len, y-len); (x+len, y)|]; +draw_poly_line [|(blnwpctihp+bejecdgusu, klqsywgkdl-bejecdgusu); (blnwpctihp+bejecdgusu, klqsywgkdl)|]; if Array.mem (!n mod 10) [|0; 2; 3; 5; 6; 8; 9|] then -draw_poly_line [|(x, y-len); (x+len, y-len)|]; +draw_poly_line [|(blnwpctihp, klqsywgkdl-bejecdgusu); (blnwpctihp+bejecdgusu, klqsywgkdl-bejecdgusu)|]; if Array.mem (!n mod 10) [|0; 2; 6; 8|] then -draw_poly_line [|(x, y-len); (x, y)|]; +draw_poly_line [|(blnwpctihp, klqsywgkdl-bejecdgusu); (blnwpctihp, klqsywgkdl)|]; n := !n/10; -vvielwjcau := !vvielwjcau - (len*11/7); +qsmxalwtqk := !qsmxalwtqk - (bejecdgusu*11/7); done ;; -let cedssxkuuc x y n0 r = -let n = pmodmwkwvl n0 in -let yaaxjbqqjx = int_of_float n in -let wkqbyygdvn = jcgvonjvkf (n -. float_of_int yaaxjbqqjx) in -nkktxxoumg x y yaaxjbqqjx r ; -fill_circle (x + (ewmqlkcvwl yaaxjbqqjx) * r * 11/7 + 3*r/2) (y - r) 3 ; -nkktxxoumg (x + 3*r/5 + (ewmqlkcvwl yaaxjbqqjx + 1)*r*11/7) y ((100 * wkqbyygdvn) / (pqouljlqnm 10 (1+ ewmqlkcvwl wkqbyygdvn))) r ;; -let eijhhwwbqm (poly : polygon) = +let owrndhnbxi blnwpctihp klqsywgkdl n0 r = +let n = ylxpvecdry n0 in +let onyoeqlwhk = int_of_float n in +let vbemgygrbn = vevglnifxn (n -. float_of_int onyoeqlwhk) in +jyyiilwnkr blnwpctihp klqsywgkdl onyoeqlwhk r ; +fill_circle (blnwpctihp + (vyvjbxvwlb onyoeqlwhk) * r * 11/7 + 3*r/2) (klqsywgkdl - r) 3 ; +jyyiilwnkr (blnwpctihp + 3*r/5 + (vyvjbxvwlb onyoeqlwhk + 1)*r*11/7) klqsywgkdl ((100 * vbemgygrbn) / (gvhsmpxpat 10 (1+ vyvjbxvwlb vbemgygrbn))) r ;; +let ajkuxrtmii (poly : polygon) = set_color (rgb (poly.rgb mod 256) ((poly.rgb / 256) mod 256) ((poly.rgb / (256*256)) mod 256)) ; -fill_poly (Array.init (Array.length poly.vertexes) (fun i -> (int_of_float poly.vertexes.(i).x, int_of_float poly.vertexes.(i).y))) ;; -let dwhfllwgax (s : sphere) = +fill_poly (Array.init (Array.length poly.vertexes) (fun dtbxywqphy -> (int_of_float poly.vertexes.(dtbxywqphy).blnwpctihp, int_of_float poly.vertexes.(dtbxywqphy).klqsywgkdl))) ;; +let vvuwhvgjnw (s : sphere) = set_color (rgb (s.rgb mod 256) ((s.rgb / 256) mod 256) ((s.rgb / (256*256)) mod 256)) ; -fill_circle (int_of_float s.center.x) (int_of_float s.center.y) (int_of_float s.radius) ;; -let uqvgbvmfqp (f : flipper) = +fill_circle (int_of_float s.center.blnwpctihp) (int_of_float s.center.klqsywgkdl) (int_of_float s.radius) ;; +let tmworeidqu (f : flipper) = set_color (rgb 64 64 64) ; -fill_circle (int_of_float f.xy.x) (int_of_float f.xy.y) (int_of_float f.radius) ; -eijhhwwbqm f.vtxs ;; -let waisadxkmv (b : ball) = +fill_circle (int_of_float f.xy.blnwpctihp) (int_of_float f.xy.klqsywgkdl) (int_of_float f.radius) ; +ajkuxrtmii f.vtxs ;; +let pldswcamqr (b : ball) = set_color (rgb (b.rgb mod 256) ((b.rgb / 256) mod 256) ((b.rgb / (256*256)) mod 256)) ; -fill_circle (int_of_float b.xy.x) (int_of_float b.xy.y) (int_of_float b.radius) ; +fill_circle (int_of_float b.xy.blnwpctihp) (int_of_float b.xy.klqsywgkdl) (int_of_float b.radius) ; set_line_width 4 ; -draw_circle (int_of_float b.xy.x) (int_of_float b.xy.y) (int_of_float b.radius) ;; -let aiiilcgctu (bs : ball array) = +draw_circle (int_of_float b.xy.blnwpctihp) (int_of_float b.xy.klqsywgkdl) (int_of_float b.radius) ;; +let mxaxilfobj (bs : ball array) = for k = 0 to Array.length bs -1 do -if bs.(k).active then -waisadxkmv bs.(k) +if bs.(k).atimibvjlv then +pldswcamqr bs.(k) done ;; (* ------------------------------------------------------------------------------------- *) (* ------------------------------------------------------------------------------------- *) (* WALUIGI_TIME Misc fcts *) -let bkicytmgfd () = +let pctksfltxq () = if key_pressed () then read_key () else '@' ;; -let wgqkvaivry (flips : flipper dynamic) = -match bkicytmgfd () with +let fjekplgywk (flips : flipper dynamic) = +match pctksfltxq () with | 'q' -> -for fl = 0 to flips.len -1 do -if flips.tab.(fl).side = Left && flips.tab.(fl).dtheta = 0. then -flips.tab.(fl).dtheta <- 600. ; +for dwhfllwgax = 0 to flips.bejecdgusu -1 do +if flips.pfjkjpqxed.(dwhfllwgax).side = Left && flips.pfjkjpqxed.(dwhfllwgax).lvyxllvhpy = 0. then +flips.pfjkjpqxed.(dwhfllwgax).lvyxllvhpy <- 600. ; done | 'd' -> -for fl = 0 to flips.len -1 do -if flips.tab.(fl).side = Right && flips.tab.(fl).dtheta = 0. then -flips.tab.(fl).dtheta <- -. 600. ; +for dwhfllwgax = 0 to flips.bejecdgusu -1 do +if flips.pfjkjpqxed.(dwhfllwgax).side = Right && flips.pfjkjpqxed.(dwhfllwgax).lvyxllvhpy = 0. then +flips.pfjkjpqxed.(dwhfllwgax).lvyxllvhpy <- -. 600. ; done | _ -> () ;; -let lhbcpmtcyh (r : float) (hxwgbulfmm : int) (ijqcdxblfh : int) (m : float) (red : int) (green : int) (blue : int) = +let jrtefovmxj (r : float) (uqvgbvmfqp : int) (waisadxkmv : int) (m : float) (red : int) (green : int) (blue : int) = { -active = true ; +atimibvjlv = true ; radius = r ; rgb = red + 256 * green + 256 * 256 * blue ; mass = m; -xy = {x = float_of_int hxwgbulfmm +. (Random.float 30.0 -. 15.0); y = float_of_int ijqcdxblfh +. (Random.float 30.0 -. 15.0)} ; -v = {x = 0. ; y = 0.} ; -a = {x = 0. ; y = 0.} ; -fres = {x = 0. ; y = 0.} ; +xy = {blnwpctihp = float_of_int uqvgbvmfqp +. (Random.float 30.0 -. 15.0); klqsywgkdl = float_of_int waisadxkmv +. (Random.float 30.0 -. 15.0)} ; +v = {blnwpctihp = 0. ; klqsywgkdl = 0.} ; +a = {blnwpctihp = 0. ; klqsywgkdl = 0.} ; +fres = {blnwpctihp = 0. ; klqsywgkdl = 0.} ; } ;; -let xmlrntccqv (arr : (int * int) array) (rest : float) (pts : int) (red : int) (green : int) (blue : int) = +let omnpcmseyq (arr : (int * int) array) (rest : float) (pts : int) (red : int) (green : int) (blue : int) = { -vertexes = Array.init (Array.length arr) (fun k -> {x = float_of_int (fst arr.(k)); y = float_of_int (snd arr.(k))}) ; +vertexes = Array.init (Array.length arr) (fun k -> {blnwpctihp = float_of_int (fst arr.(k)); klqsywgkdl = float_of_int (snd arr.(k))}) ; rgb = red + 256 * green + 256 * 256 * blue ; -xmin = float_of_int (Array.fold_left (fun dnofdwvumy k -> min dnofdwvumy (fst k)) 99999 arr) ; -xmax = float_of_int (Array.fold_left (fun dnofdwvumy k -> max dnofdwvumy (fst k)) (-99999) arr) ; -ymin = float_of_int (Array.fold_left (fun dnofdwvumy k -> min dnofdwvumy (snd k)) 99999 arr) ; -ymax = float_of_int (Array.fold_left (fun dnofdwvumy k -> max dnofdwvumy (snd k)) (-99999) arr) ; -restitution = rest ; +xmin = float_of_int (Array.fold_left (fun uaqehictpv k -> min uaqehictpv (fst k)) 99999 arr) ; +xmax = float_of_int (Array.fold_left (fun uaqehictpv k -> max uaqehictpv (fst k)) (-99999) arr) ; +ymin = float_of_int (Array.fold_left (fun uaqehictpv k -> min uaqehictpv (snd k)) 99999 arr) ; +ymax = float_of_int (Array.fold_left (fun uaqehictpv k -> max uaqehictpv (snd k)) (-99999) arr) ; +dvtuhryvdi = rest ; score = pts ; } ;; -let endykgqsgx (x00 : int) (y00 : int) (brumryeefp : float) (rest : float) (pts : int) (red : int) (green : int) (blue : int) = -let hxwgbulfmm = float_of_int x00 and ijqcdxblfh = float_of_int y00 in +let pumwckmhxf (x00 : int) (y00 : int) (aiiilcgctu : float) (rest : float) (pts : int) (red : int) (green : int) (blue : int) = +let uqvgbvmfqp = float_of_int x00 and waisadxkmv = float_of_int y00 in { -center = {x = hxwgbulfmm ; y = ijqcdxblfh}; +center = {blnwpctihp = uqvgbvmfqp ; klqsywgkdl = waisadxkmv}; rgb = red + 256 * green + 256 * 256 * blue ; -radius = brumryeefp ; -xmin = hxwgbulfmm -. brumryeefp ; -xmax = hxwgbulfmm +. brumryeefp ; -ymin = ijqcdxblfh -. brumryeefp ; -ymax = ijqcdxblfh +. brumryeefp ; -restitution = rest ; +radius = aiiilcgctu ; +xmin = uqvgbvmfqp -. aiiilcgctu ; +xmax = uqvgbvmfqp +. aiiilcgctu ; +ymin = waisadxkmv -. aiiilcgctu ; +ymax = waisadxkmv +. aiiilcgctu ; +dvtuhryvdi = rest ; score = pts ; } ;; -let jyyiilwnkr (side : flipper_side) (hxwgbulfmm : int) (ijqcdxblfh : int) (brumryeefp : float) (len : float) (ortmvyuadt : float) (thmin : float) (thmax : float) = +let ygjbohpamm (side : flipper_side) (uqvgbvmfqp : int) (waisadxkmv : int) (aiiilcgctu : float) (bejecdgusu : float) (bkicytmgfd : float) (thmin : float) (thmax : float) = { side = side ; -xy = {x = float_of_int hxwgbulfmm ; y = float_of_int ijqcdxblfh} ; -radius = brumryeefp ; -length = len ; -theta = ortmvyuadt (* in degrees *) ; -dtheta = 0. ; +xy = {blnwpctihp = float_of_int uqvgbvmfqp ; klqsywgkdl = float_of_int waisadxkmv} ; +radius = aiiilcgctu ; +length = bejecdgusu ; +ouisbgnena = bkicytmgfd (* in degrees *) ; +lvyxllvhpy = 0. ; agmin = thmin ; agmax = thmax ; -vtxs = xmlrntccqv [| -(hxwgbulfmm + int_of_float (len *. (cos (ortmvyuadt *. 3.14159 /. 180.))) , ijqcdxblfh + int_of_float (len *. (sin (ortmvyuadt *. 3.14159 /. 180.)))); -(hxwgbulfmm + int_of_float (brumryeefp *. (cos ((ortmvyuadt -. 90.) *. 3.14159 /. 180.))), ijqcdxblfh + int_of_float (brumryeefp *. (sin ((ortmvyuadt -. 90.) *. 3.14159 /. 180.)))); -(hxwgbulfmm + int_of_float (brumryeefp *. (cos ((ortmvyuadt +. 90.) *. 3.14159 /. 180.))), ijqcdxblfh + int_of_float (brumryeefp *. (sin ((ortmvyuadt +. 90.) *. 3.14159 /. 180.)))) +vtxs = omnpcmseyq [| +(uqvgbvmfqp + int_of_float (bejecdgusu *. (cos (bkicytmgfd *. 3.14159 /. 180.))) , waisadxkmv + int_of_float (bejecdgusu *. (sin (bkicytmgfd *. 3.14159 /. 180.)))); +(uqvgbvmfqp + int_of_float (aiiilcgctu *. (cos ((bkicytmgfd -. 90.) *. 3.14159 /. 180.))), waisadxkmv + int_of_float (aiiilcgctu *. (sin ((bkicytmgfd -. 90.) *. 3.14159 /. 180.)))); +(uqvgbvmfqp + int_of_float (aiiilcgctu *. (cos ((bkicytmgfd +. 90.) *. 3.14159 /. 180.))), waisadxkmv + int_of_float (aiiilcgctu *. (sin ((bkicytmgfd +. 90.) *. 3.14159 /. 180.)))) |] 1. 0 128 128 128 } ;; -let qsmxalwtqk (count : int) (r : float) (hxwgbulfmm : int) (ijqcdxblfh : int) (m : float) (red : int) (green : int) (blue : int) = -Array.init count (fun k -> lhbcpmtcyh r hxwgbulfmm ijqcdxblfh m red green blue) ;; +let tcodwswtai (count : int) (r : float) (uqvgbvmfqp : int) (waisadxkmv : int) (m : float) (red : int) (green : int) (blue : int) = +Array.init count (fun k -> jrtefovmxj r uqvgbvmfqp waisadxkmv m red green blue) ;; (* ------------------------------------------------------------------------------------- *) (* ------------------------------------------------------------------------------------- *) (* WALUIGI_TIME Edition functions *) -let owrndhnbxi lvl_name = -open_graph xxtvdauymf ; +let igwjsqxqjx lvl_name = +open_graph hwwkinuyju ; set_window_title "WAH" ; -let (onyoeqlwhk : polygon dynamic) = infhrfotum suvesniybj in -let vbemgygrbn = ref false in -let ajkuxrtmii = ref true in -let (vvuwhvgjnw : pt_2d dynamic) = infhrfotum {x = 0. ; y = 0.} in -while not !vbemgygrbn do -Unix.sleepf hwwkinuyju ; -if !ajkuxrtmii then begin +let (gjxvvjfrqh : polygon dynamic) = ucukbrjotn gwibfgeoyo in +let dabmgckiqo = ref false in +let nfuvhmutte = ref true in +let (hdckvblcgo : pt_2d dynamic) = ucukbrjotn {blnwpctihp = 0. ; klqsywgkdl = 0.} in +while not !dabmgckiqo do +Unix.sleepf suvesniybj ; +if !nfuvhmutte then begin auto_synchronize false ; clear_graph () ; -ajkuxrtmii := false ; -for p = 0 to onyoeqlwhk.len -1 do -eijhhwwbqm onyoeqlwhk.tab.(p) +nfuvhmutte := false ; +for qgewwkqbap = 0 to gjxvvjfrqh.bejecdgusu -1 do +ajkuxrtmii gjxvvjfrqh.pfjkjpqxed.(qgewwkqbap) done; auto_synchronize true ; end; -match (bkicytmgfd ()) with +match (pctksfltxq ()) with | 'a' -> (* add current polygon *) (*Printf.printf "+polygon\n" ;*) -if vvuwhvgjnw.len >= 2 then begin -ajkuxrtmii := true ; -let tmworeidqu = Array.init vvuwhvgjnw.len (fun k -> vvuwhvgjnw.tab.(k)) in -vyvjbxvwlb onyoeqlwhk { -vertexes = tmworeidqu ; +if hdckvblcgo.bejecdgusu >= 2 then begin +nfuvhmutte := true ; +let oghynsswov = Array.init hdckvblcgo.bejecdgusu (fun k -> hdckvblcgo.pfjkjpqxed.(k)) in +maapulttqm gjxvvjfrqh { +vertexes = oghynsswov ; rgb = 128 + 255*128 + 255*255*128 ; -xmin = Array.fold_left (fun dnofdwvumy k -> min dnofdwvumy k.x) (999999.) tmworeidqu ; -xmax = Array.fold_left (fun dnofdwvumy k -> max dnofdwvumy k.x) (-.999999.) tmworeidqu ; -ymin = Array.fold_left (fun dnofdwvumy k -> min dnofdwvumy k.y) (999999.) tmworeidqu ; -ymax = Array.fold_left (fun dnofdwvumy k -> max dnofdwvumy k.y) (-.999999.) tmworeidqu ; -restitution = 1. ; +xmin = Array.fold_left (fun uaqehictpv k -> min uaqehictpv k.blnwpctihp) (999999.) oghynsswov ; +xmax = Array.fold_left (fun uaqehictpv k -> max uaqehictpv k.blnwpctihp) (-.999999.) oghynsswov ; +ymin = Array.fold_left (fun uaqehictpv k -> min uaqehictpv k.klqsywgkdl) (999999.) oghynsswov ; +ymax = Array.fold_left (fun uaqehictpv k -> max uaqehictpv k.klqsywgkdl) (-.999999.) oghynsswov ; +dvtuhryvdi = 1. ; score = 0 ; } ; -vvuwhvgjnw.len <- 0 ; +hdckvblcgo.bejecdgusu <- 0 ; end | 'v' -> (* add a vertex *) (*Printf.printf "+vertex\n" ;*) -let (pldswcamqr, my) = mouse_pos () in -vyvjbxvwlb vvuwhvgjnw {x = float_of_int pldswcamqr ; y = float_of_int my} ; +let (kjnapedicv, my) = mouse_pos () in +maapulttqm hdckvblcgo {blnwpctihp = float_of_int kjnapedicv ; klqsywgkdl = float_of_int my} ; | 'c' -> (* clear current polygon *) (*Printf.printf "cleared\n" ;*) -vvuwhvgjnw.len <- 0 ; +hdckvblcgo.bejecdgusu <- 0 ; | 'h' -> -vbemgygrbn := true ; +dabmgckiqo := true ; | _ -> () done; close_graph (); -onyoeqlwhk ;; +gjxvvjfrqh ;; (* ------------------------------------------------------------------------------------- *) (* ------------------------------------------------------------------------------------- *) (* WALUIGI_TIME Main *) -let mxaxilfobj (data : polygon dynamic) (dats : sphere dynamic) (flips : flipper dynamic) = -open_graph xxtvdauymf ; +let qoxtfraxci (data : polygon dynamic) (dats : sphere dynamic) (flips : flipper dynamic) = +open_graph hwwkinuyju ; set_window_title "WAH" ; -let pctksfltxq = qsmxalwtqk 8 10.0 600 800 0.15 255 255 0 in -let fjekplgywk = Unix.gettimeofday () in -let jrtefovmxj = ref (Unix.gettimeofday ()) in +let vcmjlwalmq = tcodwswtai 8 10.0 600 800 0.15 255 255 0 in +let mpdypqimkm = Unix.gettimeofday () in +let vyjftxqsuk = ref (Unix.gettimeofday ()) in while true do -let omnpcmseyq = Unix.gettimeofday () in +let rsebinmgdo = Unix.gettimeofday () in auto_synchronize false ; clear_graph () ; set_line_width 4 ; -akksmqshhj 600 100 !ufmnpkhbse 40 ; +lhbcpmtcyh 600 100 !rynmlxnnea 40 ; set_line_width 1 ; -for d = 0 to dats.len -1 do -dwhfllwgax dats.tab.(d) +for ssjehceyki = 0 to dats.bejecdgusu -1 do +vvuwhvgjnw dats.pfjkjpqxed.(ssjehceyki) done; -for d = 0 to data.len -1 do -eijhhwwbqm data.tab.(d) +for ssjehceyki = 0 to data.bejecdgusu -1 do +ajkuxrtmii data.pfjkjpqxed.(ssjehceyki) done; -for d = 0 to flips.len -1 do -uqvgbvmfqp flips.tab.(d) +for ssjehceyki = 0 to flips.bejecdgusu -1 do +tmworeidqu flips.pfjkjpqxed.(ssjehceyki) done; -aiiilcgctu pctksfltxq ; +mxaxilfobj vcmjlwalmq ; set_color (rgb 128 128 32) ; -cedssxkuuc 25 770 (gvhsmpxpat (!jrtefovmxj -. fjekplgywk) 3) 25 ; +owrndhnbxi 25 770 (snohtmrgum (!vyjftxqsuk -. mpdypqimkm) 3) 25 ; set_color black ; set_line_width 4 ; -akksmqshhj 600 770 !score 50 ; +lhbcpmtcyh 600 770 !score 50 ; auto_synchronize true ; -wgqkvaivry flips ; -Unix.sleepf hwwkinuyju ; -let pumwckmhxf = Unix.gettimeofday () in -jrtefovmxj := !jrtefovmxj +. (pumwckmhxf -. omnpcmseyq) ; -xspdkspljw pctksfltxq data.tab dats.tab flips (pumwckmhxf -. omnpcmseyq) ; -qgewwkqbap flips (pumwckmhxf -. omnpcmseyq) ; +fjekplgywk flips ; +Unix.sleepf suvesniybj ; +let loplrvrrnd = Unix.gettimeofday () in +vyjftxqsuk := !vyjftxqsuk +. (loplrvrrnd -. rsebinmgdo) ; +wkqbyygdvn vcmjlwalmq data.pfjkjpqxed dats.pfjkjpqxed flips (loplrvrrnd -. rsebinmgdo) ; +eijhhwwbqm flips (loplrvrrnd -. rsebinmgdo) ; done; close_graph () ;; -let ygjbohpamm = infhrfotum suvesniybj ;; -let spheres = infhrfotum blnwpctihp ;; -let tcodwswtai = infhrfotum klqsywgkdl ;; +let ptngoqpger = ucukbrjotn gwibfgeoyo ;; +let spheres = ucukbrjotn rsmybvbsus ;; +let ynggiorwyd = ucukbrjotn mxlcxxplnb ;; (* |-------------------------------------------------------------------------------------------------------| *) (* kill platform *) -vyvjbxvwlb ygjbohpamm (xmlrntccqv [|(700, -20); (500, -20); (500, 1); (700, 1)|] 0. 0 255 32 32) ;; +maapulttqm ptngoqpger (omnpcmseyq [|(700, -20); (500, -20); (500, 1); (700, 1)|] 0. 0 255 32 32) ;; (* outer walls *) -vyvjbxvwlb ygjbohpamm (xmlrntccqv [|(0, 0); (500, 0); (500, 20); (0, 20)|] 1. 0 32 32 32) ;; -vyvjbxvwlb ygjbohpamm (xmlrntccqv [|(700, 0); (1200, 0); (1200, 20); (700, 20)|] 1. 0 32 32 32) ;; -vyvjbxvwlb ygjbohpamm (xmlrntccqv [|(0, 800); (500, 800); (500, 780); (0, 780)|] 1. 0 32 32 32) ;; -vyvjbxvwlb ygjbohpamm (xmlrntccqv [|(700, 800); (1200, 800); (1200, 780); (700, 780)|] 1. 0 32 32 32) ;; -vyvjbxvwlb ygjbohpamm (xmlrntccqv [|(1180, 0); (1200, 0); (1200, 800); (1180, 800)|] 1. 0 32 32 32) ;; -vyvjbxvwlb ygjbohpamm (xmlrntccqv [|(0, 0); (20, 0); (20, 800); (0, 800)|] 1. 0 32 32 32) ;; +maapulttqm ptngoqpger (omnpcmseyq [|(0, 0); (500, 0); (500, 20); (0, 20)|] 1. 0 32 32 32) ;; +maapulttqm ptngoqpger (omnpcmseyq [|(700, 0); (1200, 0); (1200, 20); (700, 20)|] 1. 0 32 32 32) ;; +maapulttqm ptngoqpger (omnpcmseyq [|(0, 800); (500, 800); (500, 780); (0, 780)|] 1. 0 32 32 32) ;; +maapulttqm ptngoqpger (omnpcmseyq [|(700, 800); (1200, 800); (1200, 780); (700, 780)|] 1. 0 32 32 32) ;; +maapulttqm ptngoqpger (omnpcmseyq [|(1180, 0); (1200, 0); (1200, 800); (1180, 800)|] 1. 0 32 32 32) ;; +maapulttqm ptngoqpger (omnpcmseyq [|(0, 0); (20, 0); (20, 800); (0, 800)|] 1. 0 32 32 32) ;; (* side ramps *) -vyvjbxvwlb ygjbohpamm (xmlrntccqv [|(20, 20); (20, 300); (420, 150); (420, 20)|] 1. 0 32 32 32) ;; -vyvjbxvwlb ygjbohpamm (xmlrntccqv [|(1200, 20); (1200, 300); (780, 150); (780, 20)|] 1. 0 32 32 32) ;; +maapulttqm ptngoqpger (omnpcmseyq [|(20, 20); (20, 300); (420, 150); (420, 20)|] 1. 0 32 32 32) ;; +maapulttqm ptngoqpger (omnpcmseyq [|(1200, 20); (1200, 300); (780, 150); (780, 20)|] 1. 0 32 32 32) ;; (* starting platform *) -vyvjbxvwlb ygjbohpamm (xmlrntccqv [|(600, 700); (400, 550); (800, 550)|] 1. 0 32 32 32) ;; +maapulttqm ptngoqpger (omnpcmseyq [|(600, 700); (400, 550); (800, 550)|] 1. 0 32 32 32) ;; (* |-------------------------------------------------------------------------------------------------------| *) (* corner scoring spots *) -vyvjbxvwlb spheres (endykgqsgx 20 780 30. 1. 50 128 128 32) ;; -vyvjbxvwlb spheres (endykgqsgx 1180 780 30. 1. 50 128 128 32) ;; +maapulttqm spheres (pumwckmhxf 20 780 30. 1. 50 128 128 32) ;; +maapulttqm spheres (pumwckmhxf 1180 780 30. 1. 50 128 128 32) ;; (* under the starting platform *) -vyvjbxvwlb spheres (endykgqsgx 440 550 20. 1. 5 32 128 32) ;; -vyvjbxvwlb spheres (endykgqsgx 520 550 20. 1. 5 32 192 32) ;; -vyvjbxvwlb spheres (endykgqsgx 600 550 20. 1. 5 32 255 32) ;; -vyvjbxvwlb spheres (endykgqsgx 680 550 20. 1. 5 32 192 32) ;; -vyvjbxvwlb spheres (endykgqsgx 760 550 20. 1. 5 32 128 32) ;; -vyvjbxvwlb spheres (endykgqsgx 480 450 20. 1. 3 32 156 32) ;; -vyvjbxvwlb spheres (endykgqsgx 560 450 20. 1. 3 32 220 32) ;; -vyvjbxvwlb spheres (endykgqsgx 640 450 20. 1. 3 32 220 32) ;; -vyvjbxvwlb spheres (endykgqsgx 720 450 20. 1. 3 32 156 32) ;; -vyvjbxvwlb spheres (endykgqsgx 520 350 20. 1. 1 32 192 32) ;; -vyvjbxvwlb spheres (endykgqsgx 600 350 20. 1. 1 32 255 32) ;; -vyvjbxvwlb spheres (endykgqsgx 680 350 20. 1. 1 32 192 32) ;; +maapulttqm spheres (pumwckmhxf 440 550 20. 1. 5 32 128 32) ;; +maapulttqm spheres (pumwckmhxf 520 550 20. 1. 5 32 192 32) ;; +maapulttqm spheres (pumwckmhxf 600 550 20. 1. 5 32 255 32) ;; +maapulttqm spheres (pumwckmhxf 680 550 20. 1. 5 32 192 32) ;; +maapulttqm spheres (pumwckmhxf 760 550 20. 1. 5 32 128 32) ;; +maapulttqm spheres (pumwckmhxf 480 450 20. 1. 3 32 156 32) ;; +maapulttqm spheres (pumwckmhxf 560 450 20. 1. 3 32 220 32) ;; +maapulttqm spheres (pumwckmhxf 640 450 20. 1. 3 32 220 32) ;; +maapulttqm spheres (pumwckmhxf 720 450 20. 1. 3 32 156 32) ;; +maapulttqm spheres (pumwckmhxf 520 350 20. 1. 1 32 192 32) ;; +maapulttqm spheres (pumwckmhxf 600 350 20. 1. 1 32 255 32) ;; +maapulttqm spheres (pumwckmhxf 680 350 20. 1. 1 32 192 32) ;; (* left side *) -vyvjbxvwlb spheres (endykgqsgx 20 480 10. 1. 3 32 32 192) ;; -vyvjbxvwlb spheres (endykgqsgx 95 555 10. 1. 3 32 32 192) ;; -vyvjbxvwlb spheres (endykgqsgx 170 630 10. 1. 3 32 32 192) ;; -vyvjbxvwlb spheres (endykgqsgx 245 705 10. 1. 3 32 32 192) ;; -vyvjbxvwlb spheres (endykgqsgx 320 780 10. 1. 3 32 32 192) ;; -vyvjbxvwlb spheres (endykgqsgx 20 630 15. 1. 5 32 32 255) ;; -vyvjbxvwlb spheres (endykgqsgx 95 705 15. 1. 5 32 32 255) ;; -vyvjbxvwlb spheres (endykgqsgx 170 780 15. 1. 5 32 32 255) ;; -vyvjbxvwlb spheres (endykgqsgx 300 300 15. 1. 5 128 128 128) ;; +maapulttqm spheres (pumwckmhxf 20 480 10. 1. 3 32 32 192) ;; +maapulttqm spheres (pumwckmhxf 95 555 10. 1. 3 32 32 192) ;; +maapulttqm spheres (pumwckmhxf 170 630 10. 1. 3 32 32 192) ;; +maapulttqm spheres (pumwckmhxf 245 705 10. 1. 3 32 32 192) ;; +maapulttqm spheres (pumwckmhxf 320 780 10. 1. 3 32 32 192) ;; +maapulttqm spheres (pumwckmhxf 20 630 15. 1. 5 32 32 255) ;; +maapulttqm spheres (pumwckmhxf 95 705 15. 1. 5 32 32 255) ;; +maapulttqm spheres (pumwckmhxf 170 780 15. 1. 5 32 32 255) ;; +maapulttqm spheres (pumwckmhxf 300 300 15. 1. 5 128 128 128) ;; (* right side *) -vyvjbxvwlb spheres (endykgqsgx 1180 480 10. 1. 3 32 32 192) ;; -vyvjbxvwlb spheres (endykgqsgx 1105 555 10. 1. 3 32 32 192) ;; -vyvjbxvwlb spheres (endykgqsgx 1030 630 10. 1. 3 32 32 192) ;; -vyvjbxvwlb spheres (endykgqsgx 965 705 10. 1. 3 32 32 192) ;; -vyvjbxvwlb spheres (endykgqsgx 890 780 10. 1. 3 32 32 192) ;; -vyvjbxvwlb spheres (endykgqsgx 1180 630 15. 1. 5 32 32 255) ;; -vyvjbxvwlb spheres (endykgqsgx 1105 705 15. 1. 5 32 32 255) ;; -vyvjbxvwlb spheres (endykgqsgx 1030 780 15. 1. 5 32 32 255) ;; -vyvjbxvwlb spheres (endykgqsgx 900 300 15. 1. 5 128 128 128) ;; +maapulttqm spheres (pumwckmhxf 1180 480 10. 1. 3 32 32 192) ;; +maapulttqm spheres (pumwckmhxf 1105 555 10. 1. 3 32 32 192) ;; +maapulttqm spheres (pumwckmhxf 1030 630 10. 1. 3 32 32 192) ;; +maapulttqm spheres (pumwckmhxf 965 705 10. 1. 3 32 32 192) ;; +maapulttqm spheres (pumwckmhxf 890 780 10. 1. 3 32 32 192) ;; +maapulttqm spheres (pumwckmhxf 1180 630 15. 1. 5 32 32 255) ;; +maapulttqm spheres (pumwckmhxf 1105 705 15. 1. 5 32 32 255) ;; +maapulttqm spheres (pumwckmhxf 1030 780 15. 1. 5 32 32 255) ;; +maapulttqm spheres (pumwckmhxf 900 300 15. 1. 5 128 128 128) ;; (* on the ramps *) -vyvjbxvwlb spheres (endykgqsgx 20 300 20. 1. 7 128 128 128) ;; -vyvjbxvwlb spheres (endykgqsgx 1180 300 20. 1. 7 128 128 128) ;; +maapulttqm spheres (pumwckmhxf 20 300 20. 1. 7 128 128 128) ;; +maapulttqm spheres (pumwckmhxf 1180 300 20. 1. 7 128 128 128) ;; (* |-------------------------------------------------------------------------------------------------------| *) -vyvjbxvwlb tcodwswtai (jyyiilwnkr Left 420 125 20. 160. (-. 20.) (-. 20.) 20.) ;; -vyvjbxvwlb tcodwswtai (jyyiilwnkr Right 780 125 20. 160. 200. 160. 200.) ;; +maapulttqm ynggiorwyd (ygjbohpamm Left 420 125 20. 160. (-. 20.) (-. 20.) 20.) ;; +maapulttqm ynggiorwyd (ygjbohpamm Right 780 125 20. 160. 200. 160. 200.) ;; (* |-------------------------------------------------------------------------------------------------------| *) -mxaxilfobj ygjbohpamm spheres tcodwswtai ;; +qoxtfraxci ptngoqpger spheres ynggiorwyd ;; (* -let xmlrntccqv (arr : (int * int) array) (rest : float) (pts : int) (red : int) (green : int) (blue : int) -let endykgqsgx (x00 : int) (y00 : int) (radius : float) (rest : float) (pts : int) red green blue -let jyyiilwnkr (hxwgbulfmm : int) (ijqcdxblfh : int) (brumryeefp : float) (len : float) (ortmvyuadt : float) (thmin : float) (thmax : float) +let omnpcmseyq (arr : (int * int) array) (rest : float) (pts : int) (red : int) (green : int) (blue : int) +let pumwckmhxf (x00 : int) (y00 : int) (radius : float) (rest : float) (pts : int) red green blue +let ygjbohpamm (uqvgbvmfqp : int) (waisadxkmv : int) (aiiilcgctu : float) (bejecdgusu : float) (bkicytmgfd : float) (thmin : float) (thmax : float) *) (* ocamlfind ocamlopt -linkpkg -package unix -linkpkg -package graphics -thread -package threads -linkpkg main.ml *) diff --git a/tests/main_test_improved.o b/tests/main_test_improved.o index ac32b84..c0b3fe5 100644 Binary files a/tests/main_test_improved.o and b/tests/main_test_improved.o differ