wip test get_jans
This commit is contained in:
parent
a2b700db7c
commit
6be25f699c
47
Cargo.lock
generated
47
Cargo.lock
generated
|
|
@ -2358,6 +2358,28 @@ version = "2.6.4"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167"
|
checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "merge"
|
||||||
|
version = "0.1.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "10bbef93abb1da61525bbc45eeaff6473a41907d19f8f9aa5168d214e10693e9"
|
||||||
|
dependencies = [
|
||||||
|
"merge_derive",
|
||||||
|
"num-traits",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "merge_derive"
|
||||||
|
version = "0.1.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "209d075476da2e63b4b29e72a2ef627b840589588e71400a25e3565c4f849d07"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro-error",
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"syn 1.0.109",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "metal"
|
name = "metal"
|
||||||
version = "0.24.0"
|
version = "0.24.0"
|
||||||
|
|
@ -2885,6 +2907,30 @@ dependencies = [
|
||||||
"toml_edit",
|
"toml_edit",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "proc-macro-error"
|
||||||
|
version = "1.0.4"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro-error-attr",
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"syn 1.0.109",
|
||||||
|
"version_check",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "proc-macro-error-attr"
|
||||||
|
version = "1.0.4"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"version_check",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "proc-macro2"
|
name = "proc-macro2"
|
||||||
version = "1.0.69"
|
version = "1.0.69"
|
||||||
|
|
@ -3297,6 +3343,7 @@ version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"base64 0.21.7",
|
"base64 0.21.7",
|
||||||
"log",
|
"log",
|
||||||
|
"merge",
|
||||||
"rand",
|
"rand",
|
||||||
"serde",
|
"serde",
|
||||||
"transpose",
|
"transpose",
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,7 @@ edition = "2021"
|
||||||
[dependencies]
|
[dependencies]
|
||||||
base64 = "0.21.7"
|
base64 = "0.21.7"
|
||||||
log = "0.4.20"
|
log = "0.4.20"
|
||||||
|
merge = "0.1.0"
|
||||||
rand = "0.8.5"
|
rand = "0.8.5"
|
||||||
serde = { version = "1.0", features = ["derive"] }
|
serde = { version = "1.0", features = ["derive"] }
|
||||||
transpose = "0.2.2"
|
transpose = "0.2.2"
|
||||||
|
|
|
||||||
|
|
@ -22,23 +22,29 @@ enum Jan {
|
||||||
// - si on ne peut pas jouer ses deux dés
|
// - si on ne peut pas jouer ses deux dés
|
||||||
}
|
}
|
||||||
|
|
||||||
// #[derive(Debug)]
|
type PossibleJans = HashMap<Jan, Vec<(CheckerMove, CheckerMove)>>;
|
||||||
// struct PossibleJan {
|
|
||||||
// pub jan: Jan,
|
|
||||||
// pub ways: Vec<(CheckerMove, CheckerMove)>,
|
|
||||||
// }
|
|
||||||
|
|
||||||
#[derive(Default)]
|
trait PossibleJansMethods {
|
||||||
struct PossibleJans(HashMap<Jan, Vec<(CheckerMove, CheckerMove)>>);
|
fn push(&mut self, jan: Jan, cmoves: (CheckerMove, CheckerMove));
|
||||||
|
fn merge(&mut self, other: Self);
|
||||||
|
}
|
||||||
|
|
||||||
impl PossibleJans {
|
impl PossibleJansMethods for PossibleJans {
|
||||||
pub fn push(&mut self, jan: Jan, cmoves: (CheckerMove, CheckerMove)) {
|
fn push(&mut self, jan: Jan, cmoves: (CheckerMove, CheckerMove)) {
|
||||||
if let Some(ways) = self.0.get_mut(&jan) {
|
if let Some(ways) = self.get_mut(&jan) {
|
||||||
if !ways.contains(&cmoves) {
|
if !ways.contains(&cmoves) {
|
||||||
ways.push(cmoves);
|
ways.push(cmoves);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
self.0.insert(jan, [cmoves].into());
|
self.insert(jan, [cmoves].into());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn merge(&mut self, other: Self) {
|
||||||
|
for (jan, cmoves_list) in other {
|
||||||
|
for cmoves in cmoves_list {
|
||||||
|
self.push(jan.clone(), cmoves);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -72,15 +78,11 @@ impl PointsRules {
|
||||||
|
|
||||||
fn get_jans(&self, board: &Board, dices: &Vec<u8>) -> PossibleJans {
|
fn get_jans(&self, board: &Board, dices: &Vec<u8>) -> PossibleJans {
|
||||||
let mut jans = PossibleJans::default();
|
let mut jans = PossibleJans::default();
|
||||||
if dices.is_empty() {
|
|
||||||
return jans;
|
|
||||||
}
|
|
||||||
let color = Color::White;
|
|
||||||
let mut dices = dices.clone();
|
let mut dices = dices.clone();
|
||||||
let mut board = board.clone();
|
|
||||||
let fields = board.get_color_fields(color);
|
|
||||||
if let Some(dice) = dices.pop() {
|
if let Some(dice) = dices.pop() {
|
||||||
for (from, _) in fields {
|
let color = Color::White;
|
||||||
|
let mut board = board.clone();
|
||||||
|
for (from, _) in board.get_color_fields(color) {
|
||||||
let to = if from + dice as usize > 24 {
|
let to = if from + dice as usize > 24 {
|
||||||
0
|
0
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -98,13 +100,15 @@ impl PointsRules {
|
||||||
}
|
}
|
||||||
Ok(()) => {
|
Ok(()) => {
|
||||||
// TODO : check if it's a jan
|
// TODO : check if it's a jan
|
||||||
let next_dice_jan = self.get_jans(&board, &dices);
|
|
||||||
// TODO : merge jans du dé courant et du prochain dé
|
// TODO : merge jans du dé courant et du prochain dé
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
let next_dice_jan = self.get_jans(&board, &dices);
|
||||||
|
jans.merge(next_dice_jan);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO : mouvements en tout d'une asdf
|
// TODO : mouvements en tout d'une asdf
|
||||||
// - faire un dé d1+d2 et regarder si hit
|
// - faire un dé d1+d2 et regarder si hit
|
||||||
// - si hit : regarder s'il existe le truehit intermédiaire
|
// - si hit : regarder s'il existe le truehit intermédiaire
|
||||||
|
|
@ -121,7 +125,8 @@ impl PointsRules {
|
||||||
// Jans de remplissage
|
// Jans de remplissage
|
||||||
let filling_moves_sequences = self.move_rules.get_quarter_filling_moves_sequences();
|
let filling_moves_sequences = self.move_rules.get_quarter_filling_moves_sequences();
|
||||||
points += 4 * filling_moves_sequences.len();
|
points += 4 * filling_moves_sequences.len();
|
||||||
// Points par simple par moyen Points par doublet par moyen Nombre de moyens possibles Bénéficiaire
|
// cf. https://fr.wikipedia.org/wiki/Trictrac
|
||||||
|
// Points par simple par moyen | Points par doublet par moyen Nombre de moyens possibles Bénéficiaire
|
||||||
// « JAN RARE »
|
// « JAN RARE »
|
||||||
// Jan de six tables 4 n/a 1 Joueur
|
// Jan de six tables 4 n/a 1 Joueur
|
||||||
// Jan de deux tables 4 6 1 Joueur
|
// Jan de deux tables 4 6 1 Joueur
|
||||||
|
|
@ -129,12 +134,8 @@ impl PointsRules {
|
||||||
// Contre jan de deux tables 4 6 1 Adversaire
|
// Contre jan de deux tables 4 6 1 Adversaire
|
||||||
// Contre jan de mézéas 4 6 1 Adversaire
|
// Contre jan de mézéas 4 6 1 Adversaire
|
||||||
// « JAN DE RÉCOMPENSE »
|
// « JAN DE RÉCOMPENSE »
|
||||||
// Battre à vrai une dame
|
// Battre à vrai une dame située dans la table des grands jans 2 | 4 1, 2 ou 3 (sauf doublet) Joueur
|
||||||
// située dans la table des grands jans 2 1, 2 ou 3 Joueur
|
// Battre à vrai une dame située dans la table des petits jans 4 | 6 1, 2 ou 3 Joueur
|
||||||
// 4 1 ou 2 Joueur
|
|
||||||
// Battre à vrai une dame
|
|
||||||
// située dans la table des petits jans 4 1, 2 ou 3 Joueur
|
|
||||||
// 6 1 ou 2 Joueur
|
|
||||||
// Battre le coin adverse 4 6 1 Joueur
|
// Battre le coin adverse 4 6 1 Joueur
|
||||||
// « JAN QUI NE PEUT »
|
// « JAN QUI NE PEUT »
|
||||||
// Battre à faux une dame
|
// Battre à faux une dame
|
||||||
|
|
@ -152,3 +153,55 @@ impl PointsRules {
|
||||||
points
|
points
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use super::*;
|
||||||
|
#[test]
|
||||||
|
fn get_jans() {
|
||||||
|
let mut rules = PointsRules::default();
|
||||||
|
rules.board.set_positions([
|
||||||
|
2, 0, -1, -1, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
|
]);
|
||||||
|
|
||||||
|
let jans = rules.get_jans(&rules.board, &vec![2, 3]);
|
||||||
|
assert_eq!(1, jans.len());
|
||||||
|
assert_eq!(2, jans.get(&Jan::TrueHit).unwrap().len());
|
||||||
|
|
||||||
|
let jans = rules.get_jans(&rules.board, &vec![2, 2]);
|
||||||
|
assert_eq!(1, jans.len());
|
||||||
|
assert_eq!(1, jans.get(&Jan::TrueHit).unwrap().len());
|
||||||
|
|
||||||
|
rules.board.set_positions([
|
||||||
|
2, 0, -1, -1, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
|
]);
|
||||||
|
|
||||||
|
let jans = rules.get_jans(&rules.board, &vec![2, 3]);
|
||||||
|
assert_eq!(1, jans.len());
|
||||||
|
assert_eq!(2, jans.get(&Jan::TrueHit).unwrap().len());
|
||||||
|
|
||||||
|
rules.board.set_positions([
|
||||||
|
2, 0, -1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
|
]);
|
||||||
|
|
||||||
|
let jans = rules.get_jans(&rules.board, &vec![2, 3]);
|
||||||
|
assert_eq!(1, jans.len());
|
||||||
|
assert_eq!(2, jans.get(&Jan::TrueHit).unwrap().len());
|
||||||
|
|
||||||
|
rules.board.set_positions([
|
||||||
|
2, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
|
]);
|
||||||
|
|
||||||
|
let jans = rules.get_jans(&rules.board, &vec![2, 3]);
|
||||||
|
assert_eq!(1, jans.len());
|
||||||
|
assert_eq!(1, jans.get(&Jan::TrueHit).unwrap().len());
|
||||||
|
|
||||||
|
rules.board.set_positions([
|
||||||
|
2, 0, 1, 1, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
|
]);
|
||||||
|
|
||||||
|
let jans = rules.get_jans(&rules.board, &vec![2, 3]);
|
||||||
|
assert_eq!(1, jans.len());
|
||||||
|
assert_eq!(3, jans.get(&Jan::TrueHit).unwrap().len());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue