1 use std
::cmp
::{ Ordering
, PartialOrd
};
2 use rand
::{thread_rng
, Rng
};
3 use rand
::distributions
::{Distribution
, Uniform
};
5 #[derive(PartialEq, Debug, Clone)]
14 impl PartialOrd
for Card
{
15 fn partial_cmp(&self, other
: &Self) -> Option
<Ordering
> {
17 return Some(Ordering
::Equal
);
20 let figures
= vec
![Card
::As
, Card
::King
, Card
::Queen
, Card
::Jack
];
22 for figure
in figures
{
24 return Some(Ordering
::Greater
);
27 return Some(Ordering
::Less
);
32 (Card
::Value(self_val
), Card
::Value(other_val
)) => self_val
.partial_cmp(other_val
),
39 fn create_deck() -> Vec
<Card
> {
40 let mut deck
: Vec
<Card
> = vec
![];
43 deck
.push(Card
::King
);
44 deck
.push(Card
::Queen
);
45 deck
.push(Card
::Jack
);
47 deck
.push(Card
::Value(v
));
53 fn shuffle_deck(deck
: &mut Vec
<Card
>) {
54 let mut rng
= thread_rng();
55 let deck_range
= Uniform
::new(0, deck
.len());
57 for _
in 0 .. deck
.len() * 100 {
58 let a
= deck_range
.sample(&mut rng
);
59 let b
= deck_range
.sample(&mut rng
);
72 let mut current_turn
= 0u32;
74 let mut deck
= create_deck();
75 shuffle_deck(&mut deck
);
77 let mut player1_deck
= deck
[0..deck
.len() / 2].to_vec();
78 let mut player1_captured
= Vec
::<Card
>::new();
80 let mut player2_deck
= deck
[deck
.len() / 2 .. deck
.len()].to_vec();
81 let mut player2_captured
= Vec
::<Card
>::new();
83 while player1_deck
.len() + player1_captured
.len() > 0 && player2_deck
.len() + player2_captured
.len() > 0 {
86 if player1_deck
.len() == 0 {
87 player1_deck
.clone_from_slice(&player1_captured
);
88 shuffle_deck(&mut player1_deck
);
89 player1_captured
.clear();
92 if player2_deck
.len() == 0 {
93 player2_deck
.clone_from_slice(&player2_captured
);
94 shuffle_deck(&mut player2_deck
);
95 player2_captured
.clear();
98 let c1
= player1_deck
.pop().unwrap()
99 let c2
= player1_deck
.pop().unwrap()
113 println!("Bataille simulator");
117 let nb_of_turns
= play();
128 fn test_card_comparisons() {
129 assert!(Card
::As
== Card
::As
);
130 assert!(Card
::King
== Card
::King
);
131 assert!(Card
::Queen
== Card
::Queen
);
132 assert!(Card
::Jack
== Card
::Jack
);
133 assert!(Card
::Value(10) == Card
::Value(10));
134 assert!(Card
::Value(2) == Card
::Value(2));
135 assert!(Card
::As
> Card
::King
);
136 assert!(Card
::As
> Card
::Queen
);
137 assert!(Card
::As
> Card
::Jack
);
138 assert!(Card
::As
> Card
::Value(10));
139 assert!(Card
::King
> Card
::Queen
);
140 assert!(Card
::King
> Card
::Jack
);
141 assert!(Card
::King
> Card
::Value(10));
142 assert!(Card
::Queen
> Card
::Jack
);
143 assert!(Card
::Queen
> Card
::Value(10));
144 assert!(Card
::Jack
> Card
::Value(10));
145 assert!(Card
::Value(10) > Card
::Value(9));