Преглед изворни кода

Starting to implement game

Denis Merigoux пре 9 година
родитељ
комит
77b15a8800
3 измењених фајлова са 34 додато и 14 уклоњено
  1. 3 0
      src/deck.rs
  2. 25 8
      src/game.rs
  3. 6 6
      src/main.rs

+ 3 - 0
src/deck.rs

30
 pub fn distribute_cards(deck: &Deck) -> (Hand, Vec<Hand>) {
30
 pub fn distribute_cards(deck: &Deck) -> (Hand, Vec<Hand>) {
31
     let mut dog: Hand = BTreeSet::new();
31
     let mut dog: Hand = BTreeSet::new();
32
     let mut hands: Vec<Hand> = Vec::new();
32
     let mut hands: Vec<Hand> = Vec::new();
33
+    for _ in 0..(params::NUMBER_OF_PLAYERS) {
34
+        hands.push(BTreeSet::new())
35
+    }
33
     for i in 0..deck.len() {
36
     for i in 0..deck.len() {
34
         if i < params::DOG_SIZE {
37
         if i < params::DOG_SIZE {
35
             dog.insert(deck[i]);
38
             dog.insert(deck[i]);

+ 25 - 8
src/game.rs

1
 use params;
1
 use params;
2
 use deck;
2
 use deck;
3
 use card;
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
 pub struct Player {
8
 pub struct Player {
8
     pub id: i32,
9
     pub id: i32,
9
     pub name: String,
10
     pub name: String,
10
     pub hand: deck::Hand,
11
     pub hand: deck::Hand,
11
 }
12
 }
12
 
13
 
14
+// Empty the hands and names vector and creates a player vector instead
13
 pub fn initialize_players(hands: &mut Vec<deck::Hand>, names: &mut Vec<String>) -> Vec<Player> {
15
 pub fn initialize_players(hands: &mut Vec<deck::Hand>, names: &mut Vec<String>) -> Vec<Player> {
14
     if hands.len() != names.len() {}
16
     if hands.len() != names.len() {}
15
     let mut counter = 0;
17
     let mut counter = 0;
16
     let mut players = Vec::new();
18
     let mut players = Vec::new();
17
-    for i in 0..hands.len() {
19
+    for _ in 0..hands.len() {
18
         let name = match names.pop() {
20
         let name = match names.pop() {
19
             Some(name) => name,
21
             Some(name) => name,
20
             None => panic!("the number of hands is different from the number of players"),
22
             None => panic!("the number of hands is different from the number of players"),
33
     players
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
     let cards_per_player = players[0].hand.len();
39
     let cards_per_player = players[0].hand.len();
38
     //Check if all players have same number of cards
40
     //Check if all players have same number of cards
39
     for i in 1..params::NUMBER_OF_PLAYERS {
41
     for i in 1..params::NUMBER_OF_PLAYERS {
41
             panic!("the players don't have the same number of cards")
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
 fn play_card(player: &mut Player, cards_played: &mut Heap) {
67
 fn play_card(player: &mut Player, cards_played: &mut Heap) {
59
     unimplemented!();
76
     unimplemented!();
60
 }
77
 }
61
 
78
 
62
-fn winning_card(cards: &Heap) -> usize {
79
+fn winning_player(cards: &Heap) -> i32 {
63
     unimplemented!();
80
     unimplemented!();
64
 }
81
 }

+ 6 - 6
src/main.rs

10
 pub const CARDS_PER_DISTRIBUTION: usize = 3;
10
 pub const CARDS_PER_DISTRIBUTION: usize = 3;
11
 
11
 
12
 fn main() {
12
 fn main() {
13
+    let mut names: Vec<String> =
14
+        vec!["A".to_string(), "B".to_string(), "C".to_string(), "D".to_string()];
13
     let deck = deck::new_deck();
15
     let deck = deck::new_deck();
14
     let (dog, mut hands) = deck::distribute_cards(&deck);
16
     let (dog, mut hands) = deck::distribute_cards(&deck);
17
+    let mut players = game::initialize_players(&mut hands, &mut names);
15
     println!("-> Cartes du chien :");
18
     println!("-> Cartes du chien :");
16
     for card in dog.iter() {
19
     for card in dog.iter() {
17
         println!("{}", card);
20
         println!("{}", card);
18
     }
21
     }
19
-    for hand in hands.iter() {
20
-        println!("-> Cartes du joueur {}:", 0);
21
-        for card in hand.iter() {
22
+    for player in players.iter() {
23
+        println!("-> Cartes du joueur {}:", player.id);
24
+        for card in player.hand.iter() {
22
             println!("{}", card);
25
             println!("{}", card);
23
         }
26
         }
24
     }
27
     }
25
-    let mut names: Vec<String> =
26
-        vec!["A".to_string(), "B".to_string(), "C".to_string(), "D".to_string()];
27
-    let mut players = game::initialize_players(&mut hands, &mut names);
28
     game::start_game(&dog, &mut players);
28
     game::start_game(&dog, &mut players);
29
 }
29
 }