added end screen + score v1.1

This commit is contained in:
Alexandre 2024-12-25 12:35:12 +01:00
parent a9a449bb32
commit 6311c15d25
24 changed files with 92 additions and 13 deletions

BIN
csts.cmi

Binary file not shown.

BIN
csts.cmx

Binary file not shown.

View File

@ -39,7 +39,8 @@ let start_0 = ref 0. ;;
let score = ref 0 let score = ref 0
and combo = ref 0 and combo = ref 0
and max_combo = ref 0 ;; and max_combo = ref 0
and misses = ref 0 ;;
let plus_ch = ref 10 let plus_ch = ref 10
and minus_ch = ref 8 and minus_ch = ref 8

BIN
csts.o

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
drawing.o

Binary file not shown.

Binary file not shown.

BIN
dynamic.o

Binary file not shown.

BIN
maeth.cmi

Binary file not shown.

BIN
maeth.cmx

Binary file not shown.

View File

@ -1,5 +1,6 @@
open Graphics ;; open Graphics ;;
Random.self_init () ;; Random.self_init () ;;
exception Reset ;;
type operation = type operation =
Val of int | Val of int |
@ -74,10 +75,28 @@ let require_bracket = function
| Val _ -> false | Val _ -> false
| _ -> true ;; | _ -> true ;;
let int_of_bool = function
| true -> 1
| false -> 0 ;;
let fm_length (fm : operation) (size : int) =
let rec aux = function
| Val _ -> size*11/7
| Exp(f, k) -> size*11/7 (* not implemented*)
| Sum(f, g)
| Diff(f, g)
| Prod(f, g) ->
size*11/7 + (int_of_bool (require_bracket f) + int_of_bool (require_bracket g))*size/2 + aux f + aux g
(* sign + brackets + recursive calls *)
in aux fm ;;
let print_calc (f : operation) (x0 : int) (y0 : int) (size : int) = let print_calc (f : operation) (x0 : int) (y0 : int) (size : int) =
set_line_width 3 ; set_line_width 3 ;
let fmlen = fm_length f size in
let x = ref (x0 - fmlen/2) in
set_color (rgb 192 192 0) ;
fill_rect (x0 - fmlen/2 - 6) (y0 - size - 6) (fmlen+12) (2*size + 12) ;
set_color black ; set_color black ;
let x = ref x0 in
let rec aux = function let rec aux = function
| Val k -> | Val k ->
Drawing.draw_integer_alignedleft !x y0 k size ~retval:x ; Drawing.draw_integer_alignedleft !x y0 k size ~retval:x ;
@ -193,12 +212,12 @@ let maeth_main () =
let found = ref false in let found = ref false in
let equ = generate_random_calc ~plus_w:(!Csts.plus_ch) ~minus_w:(!Csts.minus_ch) ~prod_w:(!Csts.prod_ch) !Csts.calc_length !Csts.n_inf !Csts.n_sup in let equ = generate_random_calc ~plus_w:(!Csts.plus_ch) ~minus_w:(!Csts.minus_ch) ~prod_w:(!Csts.prod_ch) !Csts.calc_length !Csts.n_inf !Csts.n_sup in
let resu = calculate equ in let resu = calculate equ in
while not !found && (!cur -. start <= !Csts.time_to_ans_f) do while not !found && (!cur -. start <= !Csts.time_to_ans_f) && (!cur -. !Csts.start_0) <= !Csts.total_time_f do
auto_synchronize false ; auto_synchronize false ;
clear_graph () ; clear_graph () ;
set_color black ; set_color black ;
print_calc equ 10 (Csts.__height__/2) 15 ; print_calc equ (Csts.__width__/2) (Csts.__height__/2) 15 ;
Drawing.draw_string_centered (Csts.__width__/2) (Csts.__height__/3) "Answer" 50 ; Drawing.draw_string_centered (Csts.__width__/2) (Csts.__height__/3) "Answer" 50 ;
Drawing.draw_integer (Csts.__width__/2) (Csts.__height__/3 - 100) !Csts.ans 75 ; Drawing.draw_integer (Csts.__width__/2) (Csts.__height__/3 - 100) !Csts.ans 75 ;
@ -228,13 +247,64 @@ let maeth_main () =
cur := Unix.gettimeofday () ; cur := Unix.gettimeofday () ;
done ; done ;
Csts.ans := 0 ; Csts.ans := 0 ;
if !found then begin if (!cur -. !Csts.start_0) > !Csts.total_time_f then
true
else if !found then begin
incr Csts.combo ; incr Csts.combo ;
Csts.max_combo := max (!Csts.max_combo) !Csts.combo ; Csts.max_combo := max (!Csts.max_combo) !Csts.combo ;
Csts.score := !Csts.score + int_of_float ((float_of_int !Csts.max_score) *. (!Csts.time_to_ans_f -. (!cur -. start)) /. !Csts.time_to_ans_f) ; Csts.score := !Csts.score + int_of_float (
(float_of_int !Csts.max_score)
*. (!Csts.time_to_ans_f -. (!cur -. start) /. 2.) /. !Csts.time_to_ans_f
*. (1. +. Float.sqrt (float_of_int !Csts.combo))
) ;
(* give 50% of max pts for correct answer + up to 50% more for speed *)
true true
end end
else begin else begin
Csts.combo := 0 ; Csts.combo := 0 ;
incr Csts.misses ;
false false
end ;; end ;;
let result_screen () =
try
while true do
auto_synchronize false ;
clear_graph () ;
set_color black ;
Drawing.draw_string_centered (Csts.__width__/2) (Csts.__height__ - 60) "Press space to return to main" 22 ;
set_color (rgb 192 192 0) ;
Drawing.draw_string (Csts.__width__/6) (Csts.__height__/2 + 70) "Score" 20 ;
set_color (rgb 255 255 0) ;
Drawing.draw_integer_alignedleft (Csts.__width__/6+20*(5+1)*10/7) (Csts.__height__/2 + 70) !Csts.score 20 ;
set_color (rgb 0 192 0) ;
Drawing.draw_string (Csts.__width__/6) (Csts.__height__/2) "Max Combo" 20 ;
set_color (rgb 0 255 0) ;
Drawing.draw_integer_alignedleft (Csts.__width__/6+20*(9+1)*10/7) (Csts.__height__/2) !Csts.max_combo 20 ;
set_color (rgb 0 192 32) ;
Drawing.draw_string (Csts.__width__/6) (Csts.__height__/2 - 70) "Combo" 20 ;
set_color (rgb 0 255 32) ;
Drawing.draw_integer_alignedleft (Csts.__width__/6+20*(5+1)*10/7) (Csts.__height__/2 - 70) !Csts.combo 20 ;
set_color (rgb 192 0 0) ;
Drawing.draw_string (Csts.__width__/6) (Csts.__height__/2 - 140) "Misses" 20 ;
set_color (rgb 255 0 0) ;
Drawing.draw_integer_alignedleft (Csts.__width__/6+20*(6+1)*10/7) (Csts.__height__/2 - 140) !Csts.misses 20 ;
if !Csts.misses = 0 then begin
set_color (rgb 0 255 0) ;
Drawing.draw_string_centered (Csts.__width__/2) (40) "FC" 35
end ;
auto_synchronize true ;
Unix.sleepf Csts.sleep_d ;
if key_pressed () && (read_key ()) == ' ' then
raise Reset
done;
()
with
| Reset -> () ;;

BIN
maeth.o

Binary file not shown.

BIN
main.cmi

Binary file not shown.

BIN
main.cmx

Binary file not shown.

View File

@ -1,7 +1,7 @@
open Graphics ;; open Graphics ;;
Random.self_init () ;; Random.self_init () ;;
let mainloop () = let rec mainloop () =
open_graph Csts.open_string ; open_graph Csts.open_string ;
set_window_title "Maeth"; set_window_title "Maeth";
try try
@ -26,9 +26,11 @@ let mainloop () =
* (90 / !Csts.time_to_ans) * int_of_float (Float.sqrt (float_of_int (90 / !Csts.time_to_ans))) ; * (90 / !Csts.time_to_ans) * int_of_float (Float.sqrt (float_of_int (90 / !Csts.time_to_ans))) ;
Maeth.init_odds () ; Maeth.init_odds () ;
clear_graph () ; clear_graph () ;
while true do while Unix.gettimeofday () -. !Csts.start_0 <= !Csts.total_time_f do
ignore (Maeth.maeth_main ()) ; ignore (Maeth.maeth_main ()) ;
done ;; done ;
Maeth.result_screen () ;
mainloop () ;;
(* (*
let difficulty = ref 1 ;; let difficulty = ref 1 ;;

BIN
main.o

Binary file not shown.

BIN
math

Binary file not shown.

BIN
math.cmx

Binary file not shown.

BIN
math.o

Binary file not shown.

BIN
menus.cmi

Binary file not shown.

BIN
menus.cmx

Binary file not shown.

View File

@ -364,6 +364,7 @@ let action_on_interface () =
build_empty_interface "Main Menu" 128 128 128 ;; build_empty_interface "Main Menu" 128 128 128 ;;
build_empty_interface "Options" 32 32 32 ;; build_empty_interface "Options" 32 32 32 ;;
build_empty_interface "End screen" 32 32 200 ;;
build_button "Start" {x = Csts.__width__/2 - 150; y = 270; w = 300; h = 100} 32 255 32 (Warp (-2)) ;; build_button "Start" {x = Csts.__width__/2 - 150; y = 270; w = 300; h = 100} 32 255 32 (Warp (-2)) ;;
build_button "Options" {x = Csts.__width__/2 - 150; y = 160; w = 300; h = 100} 255 32 255 (Warp 1) ;; build_button "Options" {x = Csts.__width__/2 - 150; y = 160; w = 300; h = 100} 255 32 255 (Warp 1) ;;
@ -377,6 +378,9 @@ build_button "Total time" {x = Csts.__width__/2 - 200; y = 270; w = 400; h = 10
build_button "Difficulty" {x = Csts.__width__/2 - 200; y = 160; w = 400; h = 100} 32 32 255 (Tweak (build_tweak Csts.difficulty 1 10 1 [] [])) ;; build_button "Difficulty" {x = Csts.__width__/2 - 200; y = 160; w = 400; h = 100} 32 32 255 (Tweak (build_tweak Csts.difficulty 1 10 1 [] [])) ;;
build_button "Back" {x = Csts.__width__/2 - 200; y = 50; w = 400; h = 100} 32 32 32 (Warp 0) ;; build_button "Back" {x = Csts.__width__/2 - 200; y = 50; w = 400; h = 100} 32 32 32 (Warp 0) ;;
build_button "Exit" {x = Csts.__width__/2 - 150; y = 50; w = 300; h = 100} 1 1 1 (Warp (-1)) ;;
build_button "Main Menu" {x = Csts.__width__/2 - 150; y = 160; w = 300; h = 100} 128 128 128 (Warp 0) ;;
(*Printf.printf "(B : %d ; I : %d)\n" arr_buttons.len arr_interfaces.len ;;*) (*Printf.printf "(B : %d ; I : %d)\n" arr_buttons.len arr_interfaces.len ;;*)
add_button_to_interface 0 0 ; add_button_to_interface 0 0 ;
add_button_to_interface 0 1 ; add_button_to_interface 0 1 ;
@ -388,3 +392,5 @@ add_button_to_interface 1 6 ;
add_button_to_interface 1 7 ; add_button_to_interface 1 7 ;
add_button_to_interface 1 8 ; add_button_to_interface 1 8 ;
add_button_to_interface 1 9 ; add_button_to_interface 1 9 ;
add_button_to_interface 2 10 ;
add_button_to_interface 2 11 ;

BIN
menus.o

Binary file not shown.