--- /dev/null
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "bataille"
+version = "0.1.0"
+dependencies = [
+ "rand",
+]
+
+[[package]]
+name = "cfg-if"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
+
+[[package]]
+name = "getrandom"
+version = "0.1.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7abc8dd8451921606d809ba32e95b6111925cd2906060d2dcc29c070220503eb"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.71"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9457b06509d27052635f90d6466700c65095fdf75409b3fbdd903e988b886f49"
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "237a5ed80e274dbc66f86bd59c1e25edc039660be53194b5fe0a482e0f2612ea"
+
+[[package]]
+name = "rand"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03"
+dependencies = [
+ "getrandom",
+ "libc",
+ "rand_chacha",
+ "rand_core",
+ "rand_hc",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402"
+dependencies = [
+ "ppv-lite86",
+ "rand_core",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "rand_hc"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c"
+dependencies = [
+ "rand_core",
+]
+
+[[package]]
+name = "wasi"
+version = "0.9.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519"
--- /dev/null
+use std::cmp::{ Ordering, PartialOrd };
+use rand::{thread_rng, Rng};
+use rand::distributions::{Distribution, Uniform};
+
+#[derive(PartialEq, Debug, Clone)]
+enum Card {
+ As,
+ King,
+ Queen,
+ Jack,
+ Value(u8) // 2 to 10.
+}
+
+impl PartialOrd for Card {
+ fn partial_cmp(&self, other: &Self) -> Option<Ordering> {
+ if self == other {
+ return Some(Ordering::Equal);
+ }
+
+ let figures = vec![Card::As, Card::King, Card::Queen, Card::Jack];
+
+ for figure in figures {
+ if self == &figure {
+ return Some(Ordering::Greater);
+ }
+ if other == &figure {
+ return Some(Ordering::Less);
+ }
+ }
+
+ match (self, other) {
+ (Card::Value(self_val), Card::Value(other_val)) => self_val.partial_cmp(other_val),
+ _ => None
+ }
+ }
+
+}
+
+fn create_deck() -> Vec<Card> {
+ let mut deck: Vec<Card> = vec![];
+ for i in 0..4 {
+ deck.push(Card::As);
+ deck.push(Card::King);
+ deck.push(Card::Queen);
+ deck.push(Card::Jack);
+ for v in 2..=10 {
+ deck.push(Card::Value(v));
+ }
+ }
+ deck
+}
+
+fn shuffle_deck(deck: &mut Vec<Card>) {
+ let mut rng = thread_rng();
+ let deck_range = Uniform::new(0, deck.len());
+
+ for _ in 0 .. deck.len() * 100 {
+ let a = deck_range.sample(&mut rng);
+ let b = deck_range.sample(&mut rng);
+ if a != b {
+ deck.swap(a, b);
+ }
+ }
+}
+
+struct Deck {
+ main: Vec<Card>,
+ captured: Vec<Card>
+}
+
+fn play() -> u32 {
+ let mut current_turn = 0u32;
+
+ let mut deck = create_deck();
+ shuffle_deck(&mut deck);
+
+ let mut player1_deck = deck[0..deck.len() / 2].to_vec();
+ let mut player1_captured = Vec::<Card>::new();
+
+ let mut player2_deck = deck[deck.len() / 2 .. deck.len()].to_vec();
+ let mut player2_captured = Vec::<Card>::new();
+
+ while player1_deck.len() + player1_captured.len() > 0 && player2_deck.len() + player2_captured.len() > 0 {
+ current_turn += 1;
+
+ if player1_deck.len() == 0 {
+ player1_deck.clone_from_slice(&player1_captured);
+ shuffle_deck(&mut player1_deck);
+ player1_captured.clear();
+ }
+
+ if player2_deck.len() == 0 {
+ player2_deck.clone_from_slice(&player2_captured);
+ shuffle_deck(&mut player2_deck);
+ player2_captured.clear();
+ }
+
+ let c1 = player1_deck.pop().unwrap()
+ let c2 = player1_deck.pop().unwrap()
+
+/*
+ if {
+ return current_turn;
+ }*/
+ }
+
+ //dbg!(deck);
+
+ current_turn
+}
+
+fn main() {
+ println!("Bataille simulator");
+
+ let n = 1;
+ for i in 0..n {
+ let nb_of_turns = play();
+ dbg!(nb_of_turns);
+ }
+}
+
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn test_card_comparisons() {
+ assert!(Card::As == Card::As);
+ assert!(Card::King == Card::King);
+ assert!(Card::Queen == Card::Queen);
+ assert!(Card::Jack == Card::Jack);
+ assert!(Card::Value(10) == Card::Value(10));
+ assert!(Card::Value(2) == Card::Value(2));
+ assert!(Card::As > Card::King);
+ assert!(Card::As > Card::Queen);
+ assert!(Card::As > Card::Jack);
+ assert!(Card::As > Card::Value(10));
+ assert!(Card::King > Card::Queen);
+ assert!(Card::King > Card::Jack);
+ assert!(Card::King > Card::Value(10));
+ assert!(Card::Queen > Card::Jack);
+ assert!(Card::Queen > Card::Value(10));
+ assert!(Card::Jack > Card::Value(10));
+ assert!(Card::Value(10) > Card::Value(9));
+ }
+}