|
|
@@ -1,20 +1,22 @@
|
|
1
|
1
|
use params;
|
|
2
|
2
|
use deck;
|
|
3
|
3
|
use card;
|
|
4
|
|
-use std::collections::BTreeSet;
|
|
5
|
4
|
|
|
6
|
|
-type Heap = Vec<card::Card>;
|
|
|
5
|
+type Heap = Vec<(card::Card, i32)>;
|
|
|
6
|
+
|
|
|
7
|
+#[derive(Clone)]
|
|
7
|
8
|
pub struct Player {
|
|
8
|
9
|
pub id: i32,
|
|
9
|
10
|
pub name: String,
|
|
10
|
11
|
pub hand: deck::Hand,
|
|
11
|
12
|
}
|
|
12
|
13
|
|
|
|
14
|
+// Empty the hands and names vector and creates a player vector instead
|
|
13
|
15
|
pub fn initialize_players(hands: &mut Vec<deck::Hand>, names: &mut Vec<String>) -> Vec<Player> {
|
|
14
|
16
|
if hands.len() != names.len() {}
|
|
15
|
17
|
let mut counter = 0;
|
|
16
|
18
|
let mut players = Vec::new();
|
|
17
|
|
- for i in 0..hands.len() {
|
|
|
19
|
+ for _ in 0..hands.len() {
|
|
18
|
20
|
let name = match names.pop() {
|
|
19
|
21
|
Some(name) => name,
|
|
20
|
22
|
None => panic!("the number of hands is different from the number of players"),
|
|
|
@@ -33,7 +35,7 @@ pub fn initialize_players(hands: &mut Vec<deck::Hand>, names: &mut Vec<String>)
|
|
33
|
35
|
players
|
|
34
|
36
|
}
|
|
35
|
37
|
|
|
36
|
|
-pub fn start_game(dog: &deck::Hand, players: &mut Vec<Player>) {
|
|
|
38
|
+pub fn start_game(_: &deck::Hand, mut players: &mut Vec<Player>) {
|
|
37
|
39
|
let cards_per_player = players[0].hand.len();
|
|
38
|
40
|
//Check if all players have same number of cards
|
|
39
|
41
|
for i in 1..params::NUMBER_OF_PLAYERS {
|
|
|
@@ -41,10 +43,25 @@ pub fn start_game(dog: &deck::Hand, players: &mut Vec<Player>) {
|
|
41
|
43
|
panic!("the players don't have the same number of cards")
|
|
42
|
44
|
}
|
|
43
|
45
|
}
|
|
44
|
|
- for i in 0..cards_per_player {
|
|
45
|
|
- for player in players.iter_mut() {}
|
|
|
46
|
+ let mut starting_player_id = 1;
|
|
|
47
|
+ for _ in 0..cards_per_player {
|
|
|
48
|
+ // For each round of the game
|
|
|
49
|
+ let mut cards_played: Heap = Vec::new();
|
|
|
50
|
+ sort_by_playing_order(&mut players, starting_player_id);
|
|
|
51
|
+ for player in players.iter_mut() {
|
|
|
52
|
+ // For each player
|
|
|
53
|
+ play_card(player, &mut cards_played)
|
|
|
54
|
+ }
|
|
|
55
|
+ // Decide who has won
|
|
|
56
|
+ starting_player_id = winning_player(&cards_played);
|
|
46
|
57
|
}
|
|
47
|
|
- unimplemented!();
|
|
|
58
|
+}
|
|
|
59
|
+
|
|
|
60
|
+fn sort_by_playing_order(mut players: &mut Vec<Player>, starting_player_id: i32) {
|
|
|
61
|
+ players.sort_by(|p1, p2| {
|
|
|
62
|
+ (p1.id + starting_player_id % params::NUMBER_OF_PLAYERS as i32)
|
|
|
63
|
+ .cmp(&(p2.id + starting_player_id % params::NUMBER_OF_PLAYERS as i32))
|
|
|
64
|
+ });
|
|
48
|
65
|
}
|
|
49
|
66
|
|
|
50
|
67
|
fn play_card(player: &mut Player, cards_played: &mut Heap) {
|
|
|
@@ -59,6 +76,6 @@ fn select_card(player: &Player, cards_played: &Heap) -> card::Card {
|
|
59
|
76
|
unimplemented!();
|
|
60
|
77
|
}
|
|
61
|
78
|
|
|
62
|
|
-fn winning_card(cards: &Heap) -> usize {
|
|
|
79
|
+fn winning_player(cards: &Heap) -> i32 {
|
|
63
|
80
|
unimplemented!();
|
|
64
|
81
|
}
|