Advertisement
Guest User

Untitled

a guest
Feb 21st, 2020
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.75 KB | None | 0 0
  1. let compute_maxlen_cemetery (players , p : t_player array * t_param):int =
  2.  
  3. let biggest_cemetery : int ref = ref 0 in
  4. ( for i=0 to p.nbplayer -1
  5. do if !biggest_cemetery<len(!(players.(i).cemetery))
  6. then biggest_cemetery:=len(!(players.(i).cemetery));
  7.  
  8. done;
  9. !biggest_cemetery;)
  10. ;;
  11.  
  12. let compute_winners(players , p : t_player array * t_param):int list =
  13. let biggest_cemetery: int = compute_maxlen_cemetery (players , p) in
  14. let winners_list : int list ref = ref [] in
  15. (for i=0 to p.nbplayer -1
  16. do if biggest_cemetery =len(!(players.(i).cemetery))
  17. then winners_list := add_lst(!winners_list , players.(i).number);
  18. done;
  19. !winners_list)
  20. ;;
  21. let same_card_rank(card_1 , card_2 : t_card * t_card): bool =
  22. card_1.rank = card_2.rank;;
  23.  
  24. let rec aux_find_index_in_board (board , card ,n : t_card list * t_card* int):bool*int =
  25.  
  26.  
  27. if board = []
  28. then (false , 0)
  29. else if same_card_rank((fst(board)) ,card)
  30. then (true, n)
  31. else aux_find_index_in_board (rem_fst(board) , card, n+1);;
  32.  
  33. let find_index_in_board (board , card : t_card list * t_card):bool*int =
  34. aux_find_index_in_board (board , card , 0)
  35.  
  36.  
  37. ;;
  38.  
  39. let rec aux_find_pair (board , hand , x: t_card list*t_card list* int ): bool* int *int =
  40. if hand = []
  41. then (false, 0 , 0)
  42.  
  43. else let (found,index) : bool * int = find_index_in_board (board , fst(hand)) in
  44. if found
  45. then (found , index , x)
  46. else aux_find_pair (board , rem_fst(hand) , x+1)
  47. ;;
  48. let find_pair(board , hand : t_card list*t_card list):bool*int*int=
  49. aux_find_pair(board, hand , 0);;
  50.  
  51.  
  52. let play_one_player(board, players, ind_players : t_card list ref * t_player array * int) : unit =
  53. if players.(ind_players).hand = ref []
  54. then failwith " main du joueur vide"
  55. else
  56. let (found, int1, int2): bool*int*int = find_pair(!board, !(players.(ind_players).hand)) in
  57. let random : int = rand_int(0, len(!(players.(ind_players).hand))) in
  58. if found = true
  59. then(
  60. players.(ind_players).cemetery := add_fst(!(players.(ind_players).cemetery),nth(!board,int1));
  61.  
  62. players.(ind_players).cemetery := add_fst(!(players.(ind_players).cemetery),nth(!(players.(ind_players).hand),int2));
  63. board := rem_nth(!board,int1);
  64. players.(ind_players).hand := rem_nth(!(players.(ind_players).hand),int2);
  65. )
  66.  
  67. else (
  68. board := add_nth(!board, nth(!(players.(ind_players).hand),random), 0);
  69. players.(ind_players).hand := rem_nth(!(players.(ind_players).hand),random);
  70. )
  71. ;;
  72.  
  73. let play_one_turn (board, players , deck , p : t_card list ref * t_player array * t_card list ref * t_param):unit=
  74. distribute_4cards (players , deck , p);
  75. (
  76. for i=0 to p.nbplayer-1
  77. do play_one_player(board, players , i)
  78. done;
  79. );;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement