From 4f373013259e199961ab224fd99f59824452b93d Mon Sep 17 00:00:00 2001 From: Alexandre Date: Sun, 16 Jun 2024 17:18:51 +0200 Subject: [PATCH] Added settings and letter display --- a.out | Bin 242816 -> 249709 bytes main.cmi | Bin 3100 -> 4742 bytes main.cmo | Bin 12395 -> 21522 bytes main.ml | 237 +++++++++++++++++++++++++++++++++++++++++++++++++------ 4 files changed, 213 insertions(+), 24 deletions(-) diff --git a/a.out b/a.out index de2928ea508b1c20583982aa6fb61f70f13f25ca..f3c95f582a71be8a57ad952e729e521d8933577d 100755 GIT binary patch delta 6263 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 diff --git a/main.cmi b/main.cmi index 2d64da9e6ef5dc0b8f6bd0992cd27ee30e7594bb..cc5d172f27e8fba1419876134ff3d6d386c7c012 100644 GIT binary patch literal 4742 zcmZu#33LgV*4q(|9Ugg+O8`>V(E(V)IC@Gsc97VRqMxe#W5;l;s z)P$5I1YvN1n3SP3Kp=_1KuB3-Vz#gsLY5LpAcV3L%oY=H-~Th;f5M55eRSWO_wT#^ z&;ReuD97pbq-JJj=GoG0bE;SGBBXOJA+5R*(xD$A?VDB0P^a6cZcwcyN-(u(f-?Yc z`FNz>9@!LLWeNG*!CZUTE}8CrOYG2G%Dglx+u)ttay?+*5Q+05VY1gVh~$%D5m}<& zqwMyTa+KYUc`P1Zstw=@&k^nR1+xrfWtc*4ZEyrz*h9!JcNqaN8(>~U?y8~rlsh?x za>uw7PtXZ)m5~eCQ*b`AOtn9mt-OW2q6JN*X%a?*^bAN{B66aJy3;f{gK3&*XJHw@ zHGKwhyg}?VS#IH(PI>wlfRqhVZbTlSp*+enVhH6)bOoH{4xGPIqTsS$=Y*LC!k6`1 z@ucv-GQT{?5IRG1{mI~(Nf)!E#X)B2;>c_c{>DKi2Xm-w$9RzZAeBYrmozk!$}S&D zWoH;=JDeVOiBEBPl;R-34Q&c?j7a&4rph8bb2ZNd;dzyL!m?Mm{vO#R_ZH?nuI@Ds zUgzKq4(3zgv&dj*n*wdqBJyk<4x!SQj-}F*TuPDOr8qoFFi4mDrmk1)aq_07ZlK7$ zK=V`zPgv8tD#jTIIHwL)QR{SZb)kS&cqLDmi@4Oq98`1g76(h{EY^_8&@mr6;`v#t z!*O&LyNl>764(vkbGW6?!LWEsHN_s0d6}-*^7FGx-qs@PL}U$0HVjL-LPl!@ z-37r$x|dAC-k=fwnsZo@@L3>rV2%g#Kt`A_1qow@x_y*!3}uv`5d^i=?jr0DH9`yL z$VI{!Ae+EE7|bq4_`7mC!+{m00Am?lv>5&Yov{fz3eWo*VL#5HAmML;YzA`)m}fA; zVHHSd9UAfk-KCzX00oS-ui#iuMT)9N)@huBIL%Dt91LU&m|q7oUc{T@m}<9Y+3ANa z_z)l)!2B!x!}^OK3@F5|f@dYZ6gOPZQHDhdpi$p-%S7r;+8#4OC*j-7eSZOp7R;M)0;Sy8$;7`p&7j@u3{C*JqigpI z0XuX}{e^2MbIFEkyGsx1EP{6blJE#uSI@y74nEM+v3?bad z01p{wvfPQ2e8Wh(1EfI0OOW6~lHYK{!${HyHjq84WnhIH=lK)1kDdgdK$Qv~-Qf1D z4Ut%f&+k(lb~|a7r7XHYb|CY!Y3lS)sf!*U+OHjD__%^?6YKjU?QWQ)USeL~vYWp$ zTowCb(B*L#MhBE)ET|^fFJcUL?}8RCKP9(kQ71&ycLH8yQSvR}`JPpcLciZ*cs9Dk zm*amNT;|{k2UpojjRoin2@Q~N09UGj8)w)`O$PEN?X`&|POrje3-DO)xGL>OZeKCL z_AJ_dq->$;Cfy&C049O025i*8#;h587yTsFrsDJdi3u>a%F9=0+mZvJ=SLbT&b^S8)NbQaJ8h7|XAlNEeTDP=?UzRZTBW_^DX3B4%v8Zvr9h6QzDJ=TnLrmG3aDyqw(X^}K7hF4DVkmj!z zS$^W=j~IC)z(E+$4hD2Y@;lsknv%C_kI%c5JWgL*kXju_$%Y59$Bd&Hy8zf5z>Y_^ z72yVbwl}rviVu=@yY|Zh+#!SvAq33$eO}dmS_s>2r$1blHrF09)s9-wH7@cFUKr_f zSA=bO`x>fN&O3YM`ndbkN)}yeQq^Rwf;k*7viF3rEx9uLfUCMTe|U0k`h~G+*Hty4 zB}ADVw&lArVAd&z_mvLk^EbAc)XhLK!s&DQyOYTxtUa*3%CTbve{{E>G^Nswtc!$L}rmC^+Xc%H}dMr{P(w>e6Qo$cKdc`sH)x_!nUNgvBkS)?%B4`7f8ztE&ICS=e@K{I04F)pM8Bjhp9-oAKooRn5r3pOEN}6ak;plj{%Q<7l?Cj0HDr isaz9x&3bo7&8mrKT*vn7`+&%J|0Vo4(SH?t-TwhEG^YRn literal 3100 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 V$L!i0X*JK9R<#zwAmMD3*MF*QW|jZ| diff --git a/main.ml b/main.ml index 0148bc5..96630d5 100644 --- a/main.ml +++ b/main.ml @@ -74,19 +74,17 @@ let draw_integer_alignedleft x0 y n0 len = set_line_width (max 1 (len/4)); let n = ref n0 in let size = ln10 (abs n0) in - let offset = ref (((size+1)*len)/2) in - let initial_i = ref 0 in + let cur_x = ref (x0 + size*(len*11/7)) in if !n < 0 then begin - offset := ((size+2)*len)/2; - draw_poly_line [|(x0, y); (x0+len/2, y)|]; n := !n * (-1); - incr initial_i ; + draw_poly_line [|(x0, y); (x0+len, y)|]; + cur_x := !cur_x + (len*11/7) end; - for i = !initial_i to (size + !initial_i) do - let x = x0 + (!offset - i*len)*11/7 in + for i = 0 to size do + let x = !cur_x in if Array.mem (!n mod 10) [|0; 4; 5; 6; 7; 8; 9|] then draw_poly_line [|(x, y+len); (x, y)|]; @@ -109,8 +107,70 @@ let draw_integer_alignedleft x0 y n0 len = draw_poly_line [|(x, y-len); (x, y)|]; n := !n/10; + cur_x := !cur_x - (len*11/7); done ;; +let decode_letter x y len arr = + set_line_width 3; + if arr.(0) = 1 then + draw_poly_line [|(x, y+len); (x, y)|]; + if arr.(1) = 1 then + draw_poly_line [|(x, y-len); (x, y)|]; + if arr.(2) = 1 then + draw_poly_line [|(x, y+len); (x+len, y+len)|]; + if arr.(3) = 1 then + draw_poly_line [|(x, y+len); (x+len, y)|]; + if arr.(4) = 1 then + draw_poly_line [|(x, y); (x+len, y+len)|]; + if arr.(5) = 1 then + draw_poly_line [|(x, y); (x+len, y)|]; + if arr.(6) = 1 then + draw_poly_line [|(x, y); (x+len, y-len)|]; + if arr.(7) = 1 then + draw_poly_line [|(x, y-len); (x+len, y)|]; + if arr.(8) = 1 then + draw_poly_line [|(x+len, y-len); (x, y-len)|]; + if arr.(9) = 1 then + draw_poly_line [|(x+len, y+len); (x+len, y)|]; + if arr.(10) = 1 then + draw_poly_line [|(x+len, y-len); (x+len, y)|];; + +let draw_letter x y c len = match c with + |'a'|'A' -> decode_letter x y len [|1; 1; 1; 0; 0; 1; 0; 0; 0; 1; 1|] + |'b'|'B' -> decode_letter x y len [|1; 1; 0; 0; 0; 1; 0; 0; 1; 0; 1|] + |'c'|'C' -> decode_letter x y len [|1; 1; 1; 0; 0; 0; 0; 0; 1; 0; 0|] + |'d'|'D' -> decode_letter x y len [|0; 0; 1; 0; 0; 0; 0; 0; 1; 1; 1|]; draw_poly_line [|(x+len/2, y+len); (x+len/2, y-len)|] + |'e'|'E' -> decode_letter x y len [|1; 1; 1; 0; 0; 1; 0; 0; 1; 0; 0|] + |'f'|'F' -> decode_letter x y len [|1; 1; 1; 0; 0; 1; 0; 0; 0; 0; 0|] + |'g'|'G' -> decode_letter x y len [|1; 1; 1; 0; 0; 0; 0; 0; 1; 0; 1|] + |'h'|'H' -> decode_letter x y len [|1; 1; 0; 0; 0; 1; 0; 0; 0; 1; 1|] + |'i'|'I' -> draw_poly_line [|(x+len/2, y+len); (x+len/2, y-len)|]; + |'j'|'J' -> decode_letter x y len [|0; 1; 0; 0; 0; 0; 0; 0; 1; 1; 1|] + |'k'|'K' -> decode_letter x y len [|1; 1; 0; 0; 1; 0; 1; 0; 0; 0; 0|] + |'l'|'L' -> decode_letter x y len [|1; 1; 0; 0; 0; 0; 0; 0; 1; 0; 0|] + |'m'|'M' -> decode_letter x y len [|1; 1; 0; 0; 0; 0; 0; 0; 0; 1; 1|]; draw_poly_line [|(x, y+len); (x+len/2, y)|]; draw_poly_line [|(x+len/2, y); (x+len, y+len)|] + |'n'|'N' -> decode_letter x y len [|1; 1; 0; 1; 0; 0; 0; 0; 0; 1; 1|] + |'o'|'O' -> decode_letter x y len [|1; 1; 1; 0; 0; 0; 0; 0; 1; 1; 1|] + |'p'|'P' -> decode_letter x y len [|1; 1; 1; 0; 0; 1; 0; 0; 0; 1; 0|] + |'q'|'Q' -> decode_letter x y len [|1; 0; 1; 0; 0; 1; 0; 0; 0; 1; 1|] + |'r'|'R' -> decode_letter x y len [|1; 1; 1; 0; 0; 1; 1; 0; 0; 1; 0|] + |'s'|'S' -> decode_letter x y len [|1; 0; 1; 0; 0; 1; 0; 0; 1; 0; 1|] + |'t'|'T' -> decode_letter x y len [|1; 1; 0; 0; 0; 1; 0; 0; 1; 0; 0|] + |'u'|'U' -> decode_letter x y len [|1; 1; 0; 0; 0; 0; 0; 0; 1; 1; 1|] + |'v'|'V' -> decode_letter x y len [|1; 1; 0; 0; 0; 0; 0; 1; 0; 1; 0|] + |'w'|'W' -> decode_letter x y len [|1; 1; 0; 0; 0; 0; 1; 1; 0; 1; 1|] + |'x'|'X' -> draw_poly_line [|(x, y+len); (x+len, y-len)|]; draw_poly_line [|(x, y-len); (x+len, y+len)|] + |'y'|'Y' -> decode_letter x y len [|1; 0; 0; 0; 0; 1; 0; 1; 0; 1; 0|] + |'z'|'Z' -> decode_letter x y len [|0; 1; 1; 0; 1; 0; 0; 0; 1; 0; 0|] + | _ -> () ;; + +let draw_string x0 y s len = + let cur_x = ref x0 in + for i = 0 to String.length s -1 do + draw_letter !cur_x y s.[i] len; + cur_x := !cur_x + (len*10/7) + done;; + (* Arithmetical functions *) type calcul = @@ -243,9 +303,123 @@ and eval_plus fm = match fm with and evaluate fm = eval_plus (eval_mult (eval_exp fm)) ;; -(* Core functions *) +(* Game config *) +exception Exit ;; -let update_char code buf = match code with +let update_char_settings code buf pointer ndiff = match code with + | k when k >= 48 && k <= 57 -> + (* Integer *) + if !buf >= 0 then begin + buf := !buf * 10; + buf := !buf + code - 48; + end + else begin + buf := !buf * (-1); + + buf := !buf * 10; + buf := !buf + code - 48; + + buf := !buf * (-1); + end; + true + | 10 -> + raise Exit + | 115 -> + (* s *) + set_color white; + fill_circle 20 (800 - !pointer * 90) 10; + + pointer := (!pointer + 1) mod ndiff; + + set_color (rgb 32 192 32); + fill_circle 20 (800 - !pointer * 90) 10; + false + | 122 -> + (* z *) + set_color white; + fill_circle 20 (800 - !pointer * 90) 10; + + decr pointer; + if !pointer < 0 then pointer := ndiff -1; + + set_color (rgb 32 192 32); + fill_circle 20 (800 - !pointer * 90) 10; + false + | 127 -> + (* Delete *) + if !buf >= 0 then begin + buf := !buf / 10 + end + else begin + buf := !buf * (-1); + + buf := !buf / 10; + + buf := !buf * (-1); + end; + true + | _ -> false ;; + +type game_setting = {mutable inf : int; mutable sup : int; mutable diff : int; mutable count : int} ;; +type modifiers = {mutable brackets : bool; mutable timed : bool} ;; + +let settings_menu () = + open_graph " 1000x1000"; + set_window_title "Math"; + let setting = {inf = 1 ; sup = 100 ; diff = 1; count = 8} in + + let ft = ref true in + + try + Stdlib.print_endline "-------------------------"; + let ptr = ref 0 in + let buffer = ref 0 in + while true do + let c = get1char () in + let code = Char.code c in + + if !ft || update_char_settings code buffer ptr 4 then begin + ft := false; + if !ptr = 0 then + setting.inf <- !buffer + else if !ptr = 1 then + setting.sup <- !buffer + else if !ptr = 2 then + setting.diff <- !buffer + else if !ptr = 3 then + setting.count <- !buffer; + + open_graph " 1000x1000"; + set_window_title "Math"; + + set_color (rgb 32 192 32); + fill_circle 20 (800 - !ptr * 90) 10; + set_color black; + + (*draw_string 10 950 "abcdefghijklmnopqrstuvwxyz" 20; *) + draw_string 40 800 "min value" 20; + draw_integer_alignedleft 400 800 setting.inf 20; + + draw_string 40 710 "max value" 20; + draw_integer_alignedleft 400 710 setting.sup 20; + + draw_string 40 620 "difficulty" 20; + draw_integer_alignedleft 400 620 setting.diff 20; + + draw_string 40 530 "num count" 20; + draw_integer_alignedleft 400 530 setting.count 20; + end; + + set_color black; + done; + failwith "Not possible" + with + | Exit -> setting ;; + +(* Core functions *) +(* Main *) + +let update_char_main code buf = match code with | k when k >= 48 && k <= 57 -> (* Integer *) if !buf >= 0 then begin @@ -277,42 +451,57 @@ let update_char code buf = match code with buf := !buf * (-1); end; true - | 10 -> - (* Enter *) - let math = (generate_tier_2 6 1 100 5) in - print_math math 10 900 15; - buf := evaluate math; - draw_integer 300 300 !buf 20; - Unix.sleepf 15.0; - true | _ -> false ;; -(* Main *) - -let main () = +let main stng = open_graph " 1000x1000"; set_window_title "Math"; let buffer = ref 0 in + let ft = ref true in try + let math = ref (generate_tier_2 stng.count stng.inf stng.sup 5) in + let answer = ref (evaluate !math) in + let clock = ref 0 in + let frames = ref 0 in while true do let ch = get1char () in let chint = Char.code ch in - if update_char chint buffer then begin + if !ft || update_char_main chint buffer then begin + ft := false; open_graph " 1000x1000"; set_window_title "Math"; - draw_integer 300 300 !buffer 20; + if !answer = !buffer then begin + math := (generate_tier_2 6 1 100 5); + answer := evaluate !math; + buffer := 0; end; - Unix.sleepf 0.025 + print_math !math 10 900 15; + draw_integer_alignedleft 10 800 !answer 15; + draw_integer_alignedleft 10 300 !buffer 20; + end; + + Unix.sleepf 0.025; + incr frames; + if !frames >= 40 then begin + Stdlib.print_endline "EEE"; + frames := 0; + incr clock; + set_color white; + draw_poly_line [|(0, 0); (1000, 0); (1000, 60); (0, 60)|]; + set_color black; + draw_integer 500 30 !clock 30; + end; done; with | exn -> close_graph (); raise exn ;; -main () ;; +let setting = settings_menu () ;; +main setting ;; (* ocamlfind ocamlc -linkpkg -package unix -linkpkg -package graphics main.ml *) \ No newline at end of file