Bonjour,
j'ai déjà poster un message sur ce forum pour un projet, néanmoins mon problème étant différent je me permet de créer une nouvelle discussion.

Dans le cadre d'un projet universitaire, nous devons retranscrire le jeu des batons en Ocaml.

Pour cela nous devons faire choisir à l'utilisateur le nombre de baton qu'il souhaite enlever ainsi que le nombre de baton total.
Ce que j'essaye de faire, c'est de créer une fonction me permettant d'afficher des boutons : "-" "+" "confirmer" "mon nombre de baton. Voici le rendu que je souhaiterais obtenir :

Nom : jeubaton.png
Affichages : 276
Taille : 8,2 Ko

Pour cela, voici ce que j'ai fait :

Mon code initial :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
#load "graphics.cma";;
Graphics.open_graph " 1100x600";;
Graphics.set_window_title "Test";;
let rang =ref 1;;
let boucle = ref 1;;
let nombrebaton=ref 1;;
1) Ma fonction me permettant d'afficher les boutons.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
let affichagechoixbaton () = 
  let open Graphics in 
      set_color (rgb 0 204 204);
      fill_rect 100 450 100 100;
      moveto 140 490;
      set_color (rgb 255 255 255);
      draw_string "-";
 
      set_color (rgb 0 204 204);
      fill_rect 900 450 100 100;
      moveto 940 490;
      set_color (rgb 255 255 255);
      draw_string "+";
 
      set_color (rgb 0 204 204);
      fill_rect 440 450 200 70;
      moveto 480 490;
      set_color (rgb 255 255 255);
      draw_string "Confirmer";;
2) Ma fonction me permettant de choisir le nombre de baton en fonction de l'emplacement de la souris et du clique (il faut également, dans le principe, qu'il y ai un clic de souris à cet endroit)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
let rec choixbaton() =
  let open Graphics in 
      let clic= wait_next_event [Button_down] in begin
	let x=mouse_x in
	let y=mouse_y in
	if (clic.button) then
	if (y<1000 && x <550 && y>900 &&x>450)
	  nombrebaton:= !nombrebaton+1;
	if (x>100 && x<200 && y>450 && y<550)
	  nombrebaton := !nombrebaton-1;
	  let nbr = string_of_int !nombrebaton in
	set_color (0 0 0);
	moveto 200 200;
	draw_string nbr;
	choixbaton();;
Dans ce code, il manque l'emplacement pour afficher le nombre de baton (nbr). C'est pour cela que j'ai "moveto 200 200", qui pointe vers un endroit que je sais non utiliser, simplement pour vérifier que cela marche. Si je parviens à comprendre comment faire, adapter mon programme ne sera pas trop un soucis je pense !

J'ai également ce code :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
let enleverbaton () =
  let open Graphics in 
      set_color (rgb 255 255 255);
      let s = wait_next_event [Button_down] in  
      if (s.button && !rang < 20) the
	for (i=0 to nombrebaton) do
	  fill_rect (50 * !rang+20) 200 5 200;
	done;;
Code qui m'a été donner sur la base de ce que j'avais fait par une personne de ce forum, j'ai essayé (sans succès) de le modifier pour réussir à enlever tout les batons en cliquant plusieurs fois (une fois par baton).
Je le précise car j'ai deux erreurs dans mon code (qui sont affichées, il y en a surement plein d'autre) :

Syntax error sur for (i=0 to nombrebaton)

et

choixbaton();;
Error : unbound value choixbaton

Si certain ont des éléments de réponse concernant ce que je souhaite faire je suis preneur !
Je ne parviens pas à déterminer les erreurs de ma syntaxe, ce qui me bloque énormément et je me retrouve à perdre énormément de temps à "bidouiller" ce code, en tentant d'enlever une parenthèse, rajouter un espace, rajouter un "!", mais rien n'y fait.