|
|
@@ -4,57 +4,61 @@ use card;
|
|
4
|
4
|
use std::collections::BTreeSet;
|
|
5
|
5
|
|
|
6
|
6
|
type Heap = Vec<card::Card>;
|
|
|
7
|
+pub struct Player {
|
|
|
8
|
+ pub id: i32,
|
|
|
9
|
+ pub name: String,
|
|
|
10
|
+ pub hand: deck::Hand,
|
|
|
11
|
+}
|
|
|
12
|
+
|
|
|
13
|
+pub fn initialize_players(hands: &mut Vec<deck::Hand>, names: &mut Vec<String>) -> Vec<Player> {
|
|
|
14
|
+ if hands.len() != names.len() {}
|
|
|
15
|
+ let mut counter = 0;
|
|
|
16
|
+ let mut players = Vec::new();
|
|
|
17
|
+ for i in 0..hands.len() {
|
|
|
18
|
+ let name = match names.pop() {
|
|
|
19
|
+ Some(name) => name,
|
|
|
20
|
+ None => panic!("the number of hands is different from the number of players"),
|
|
|
21
|
+ };
|
|
|
22
|
+ let hand = match hands.pop() {
|
|
|
23
|
+ Some(hand) => hand,
|
|
|
24
|
+ None => panic!("the number of hands is different from the number of players"),
|
|
|
25
|
+ };
|
|
|
26
|
+ players.push(Player {
|
|
|
27
|
+ id: counter,
|
|
|
28
|
+ name: name,
|
|
|
29
|
+ hand: hand,
|
|
|
30
|
+ });
|
|
|
31
|
+ counter += 1;
|
|
|
32
|
+ }
|
|
|
33
|
+ players
|
|
|
34
|
+}
|
|
7
|
35
|
|
|
8
|
|
-pub fn start_game(dog: deck::Hand, hands: [deck::Hand; params::NUMBER_OF_PLAYERS]) {
|
|
9
|
|
- let cards_per_player = hands[0].1.len();
|
|
|
36
|
+pub fn start_game(dog: &deck::Hand, players: &mut Vec<Player>) {
|
|
|
37
|
+ let cards_per_player = players[0].hand.len();
|
|
10
|
38
|
//Check if all players have same number of cards
|
|
11
|
39
|
for i in 1..params::NUMBER_OF_PLAYERS {
|
|
12
|
|
- if cards_per_player != hands[i].1.len() {
|
|
|
40
|
+ if cards_per_player != players[i].hand.len() {
|
|
13
|
41
|
panic!("the players don't have the same number of cards")
|
|
14
|
42
|
}
|
|
15
|
43
|
}
|
|
16
|
|
- //If yes start the game
|
|
17
|
|
- let starting_player = 0;
|
|
18
|
|
- (1..cards_per_player).fold((starting_player, hands), |(starting_player, hands), _| {
|
|
19
|
|
- //For each turn
|
|
20
|
|
- let mut new_hands: [deck::Hand; params::NUMBER_OF_PLAYERS] = [(0, BTreeSet::new()),
|
|
21
|
|
- (1, BTreeSet::new()),
|
|
22
|
|
- (2, BTreeSet::new()),
|
|
23
|
|
- (3, BTreeSet::new())];
|
|
24
|
|
- let end_heap = hands.into_iter().enumerate().fold(Vec::new(), |heap, (i, hand)| {
|
|
25
|
|
- // For each player
|
|
26
|
|
- let (new_hand, new_heap) = play_card(hand.clone(), heap);
|
|
27
|
|
- new_hands[i - starting_player % params::NUMBER_OF_PLAYERS] = new_hand;
|
|
28
|
|
- new_heap
|
|
29
|
|
- });
|
|
30
|
|
- let new_starting_player = winning_card(end_heap.clone());
|
|
31
|
|
- println!("Les joueurs ont joué : {:?}", end_heap);
|
|
32
|
|
- (new_starting_player, new_hands)
|
|
33
|
|
- });
|
|
|
44
|
+ for i in 0..cards_per_player {
|
|
|
45
|
+ for player in players.iter_mut() {}
|
|
|
46
|
+ }
|
|
|
47
|
+ unimplemented!();
|
|
34
|
48
|
}
|
|
35
|
49
|
|
|
36
|
|
-fn play_card((player, hand): deck::Hand, cards_played: Heap) -> (deck::Hand, Heap) {
|
|
37
|
|
- let valid_cards = valid_cards((player, hand.clone()), cards_played.clone());
|
|
38
|
|
- let card_to_play = select_card(valid_cards, cards_played.clone());
|
|
39
|
|
- println!("Card to play: {:?}", card_to_play.clone());
|
|
40
|
|
- let mut new_hand = hand.clone();
|
|
41
|
|
- new_hand.take(&card_to_play);
|
|
42
|
|
- let mut new_cards_played = cards_played.clone();
|
|
43
|
|
- new_cards_played.push(card_to_play);
|
|
44
|
|
- ((player, new_hand), new_cards_played)
|
|
|
50
|
+fn play_card(player: &mut Player, cards_played: &mut Heap) {
|
|
|
51
|
+ unimplemented!();
|
|
45
|
52
|
}
|
|
46
|
53
|
|
|
47
|
|
-fn valid_cards(hand: deck::Hand, cards_played: Heap) -> deck::Hand {
|
|
48
|
|
- hand
|
|
|
54
|
+fn valid_cards(hand: &deck::Hand, cards_played: &Heap) -> deck::Hand {
|
|
|
55
|
+ unimplemented!();
|
|
49
|
56
|
}
|
|
50
|
57
|
|
|
51
|
|
-fn select_card((player, valid_cards): deck::Hand, cards_played: Heap) -> card::Card {
|
|
52
|
|
- match valid_cards.into_iter().next() {
|
|
53
|
|
- Some(card) => card,
|
|
54
|
|
- None => panic!("there is no valid card to play"),
|
|
55
|
|
- }
|
|
|
58
|
+fn select_card(player: &Player, cards_played: &Heap) -> card::Card {
|
|
|
59
|
+ unimplemented!();
|
|
56
|
60
|
}
|
|
57
|
61
|
|
|
58
|
|
-fn winning_card(cards: Heap) -> usize {
|
|
59
|
|
- 0
|
|
|
62
|
+fn winning_card(cards: &Heap) -> usize {
|
|
|
63
|
+ unimplemented!();
|
|
60
|
64
|
}
|