Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- let compute_maxlen_cemetery (players , p : t_player array * t_param):int =
- let biggest_cemetery : int ref = ref 0 in
- ( for i=0 to p.nbplayer -1
- do if !biggest_cemetery<len(!(players.(i).cemetery))
- then biggest_cemetery:=len(!(players.(i).cemetery));
- done;
- !biggest_cemetery;)
- ;;
- let compute_winners(players , p : t_player array * t_param):int list =
- let biggest_cemetery: int = compute_maxlen_cemetery (players , p) in
- let winners_list : int list ref = ref [] in
- (for i=0 to p.nbplayer -1
- do if biggest_cemetery =len(!(players.(i).cemetery))
- then winners_list := add_lst(!winners_list , players.(i).number);
- done;
- !winners_list)
- ;;
- let same_card_rank(card_1 , card_2 : t_card * t_card): bool =
- card_1.rank = card_2.rank;;
- let rec aux_find_index_in_board (board , card ,n : t_card list * t_card* int):bool*int =
- if board = []
- then (false , 0)
- else if same_card_rank((fst(board)) ,card)
- then (true, n)
- else aux_find_index_in_board (rem_fst(board) , card, n+1);;
- let find_index_in_board (board , card : t_card list * t_card):bool*int =
- aux_find_index_in_board (board , card , 0)
- ;;
- let rec aux_find_pair (board , hand , x: t_card list*t_card list* int ): bool* int *int =
- if hand = []
- then (false, 0 , 0)
- else let (found,index) : bool * int = find_index_in_board (board , fst(hand)) in
- if found
- then (found , index , x)
- else aux_find_pair (board , rem_fst(hand) , x+1)
- ;;
- let find_pair(board , hand : t_card list*t_card list):bool*int*int=
- aux_find_pair(board, hand , 0);;
- let play_one_player(board, players, ind_players : t_card list ref * t_player array * int) : unit =
- if players.(ind_players).hand = ref []
- then failwith " main du joueur vide"
- else
- let (found, int1, int2): bool*int*int = find_pair(!board, !(players.(ind_players).hand)) in
- let random : int = rand_int(0, len(!(players.(ind_players).hand))) in
- if found = true
- then(
- players.(ind_players).cemetery := add_fst(!(players.(ind_players).cemetery),nth(!board,int1));
- players.(ind_players).cemetery := add_fst(!(players.(ind_players).cemetery),nth(!(players.(ind_players).hand),int2));
- board := rem_nth(!board,int1);
- players.(ind_players).hand := rem_nth(!(players.(ind_players).hand),int2);
- )
- else (
- board := add_nth(!board, nth(!(players.(ind_players).hand),random), 0);
- players.(ind_players).hand := rem_nth(!(players.(ind_players).hand),random);
- )
- ;;
- let play_one_turn (board, players , deck , p : t_card list ref * t_player array * t_card list ref * t_param):unit=
- distribute_4cards (players , deck , p);
- (
- for i=0 to p.nbplayer-1
- do play_one_player(board, players , i)
- done;
- );;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement