From 36ce1385da6d7507cf9ada0fa1277a770c9af78b Mon Sep 17 00:00:00 2001 From: Mashy Date: Mon, 22 Jul 2019 18:31:26 +1000 Subject: [PATCH 1/3] wip --- server/src/vbox.rs | 51 +++++++++++++++++++++++++--------------------- 1 file changed, 28 insertions(+), 23 deletions(-) diff --git a/server/src/vbox.rs b/server/src/vbox.rs index 6123f910..fe93ab85 100644 --- a/server/src/vbox.rs +++ b/server/src/vbox.rs @@ -22,7 +22,7 @@ use item::*; #[derive(Debug,Clone,Serialize,Deserialize)] pub struct Vbox { pub bits: u16, - pub free: Vec>, + pub free: Vec>>, pub bound: Vec, } @@ -69,35 +69,32 @@ impl Vbox { .map(|item_type| { let items = match item_type { ItemType::Colours => vec![ - (Item::Red, 1), - (Item::Green, 1), - (Item::Blue, 1), + (Some(Item::Red), 1), + (Some(Item::Green), 1), + (Some(Item::Blue), 1), ], ItemType::Skills => vec![ - (Item::Attack, 1), - (Item::Block, 1), - (Item::Buff, 1), - (Item::Debuff, 1), - (Item::Stun, 1), + (Some(Item::Attack), 1), + (Some(Item::Block), 1), + (Some(Item::Buff), 1), + (Some(Item::Debuff), 1), + (Some(Item::Stun), 1), ], ItemType::Specs => vec![ - (Item::Power, 1), - (Item::Life, 1), - (Item::Speed, 1), + (Some(Item::Power), 1), + (Some(Item::Life), 1), + (Some(Item::Speed), 1), ], }; let dist = WeightedIndex::new(items.iter().map(|item| item.1)).unwrap(); - iter::repeat_with(|| { - items[dist.sample(&mut rng)].0 + iter::repeat_with(|| { + items[dist.sample(&mut rng)].0}).take(match item_type { + ItemType::Colours => 6, + _ => 3, + }).collect::>>() }) - .take(match item_type { - ItemType::Colours => 6, - _ => 3, - }) - .collect::>() - }) - .collect::>>(); + .collect::>>>(); self } @@ -113,11 +110,19 @@ impl Vbox { .get(j).ok_or(format_err!("no item at index {:?}", j))?; // check can purchase - let cost = self.free[i][j].cost(); + let cost = match self.free[i][j] { + None => 0, + _ => self.free[i][j].unwrap().cost() + }; self.balance_sub(cost)?; // actually move - self.bound.push(self.free[i].remove(j)); + match self.free[i][j] { + None => (), + _ => self.bound.push(self.free[i][j].unwrap()) + } + // self.bound.push(self.free[i][j].unwrap()); + self.free[i][j] = None; // self.bound.sort_unstable(); Ok(self) From 8a60a181d122929b5632503571c8a8d57c2efee6 Mon Sep 17 00:00:00 2001 From: Mashy Date: Mon, 22 Jul 2019 19:55:57 +1000 Subject: [PATCH 2/3] fixed bots --- server/src/player.rs | 20 ++++++++++++++++---- server/src/vbox.rs | 5 +++++ 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/server/src/player.rs b/server/src/player.rs index c3ca2aaa..ac4a8d6b 100644 --- a/server/src/player.rs +++ b/server/src/player.rs @@ -136,12 +136,19 @@ impl Player { } // get 2 colours and something else - if self.vbox.free[0].len() < 2 { + let free_colours = self.vbox.free[0].iter().fold(0, |count, item| { + match item.is_some() { + true => count + 1, + false => count + } + }); + if free_colours < 2 { break; } - self.vbox_accept(0, 0).expect("could't accept colour 0"); - self.vbox_accept(0, 0).expect("could't accept colour 1"); - self.vbox_accept(group_i, 0).expect("could't accept group 0"); + debug!("Looping"); + self.bot_vbox_accept(0).expect("could't accept colour 0"); + self.bot_vbox_accept(0).expect("could't accept colour 1"); + self.bot_vbox_accept(group_i).expect("could't accept group 0"); } // info!("{:?}", self.vbox.bound); @@ -168,6 +175,11 @@ impl Player { Ok(self) } + pub fn bot_vbox_accept(&mut self, group: usize) -> Result<&mut Player, Error> { + self.vbox.bot_accept(group)?; + Ok(self) + } + pub fn vbox_accept(&mut self, group: usize, index: usize) -> Result<&mut Player, Error> { self.vbox.accept(group, index)?; Ok(self) diff --git a/server/src/vbox.rs b/server/src/vbox.rs index fe93ab85..866bed49 100644 --- a/server/src/vbox.rs +++ b/server/src/vbox.rs @@ -128,6 +128,11 @@ impl Vbox { Ok(self) } + pub fn bot_accept(&mut self, i: usize) -> Result<&mut Vbox, Error> { + let buy_index = self.free[i].iter().position(|item| item.is_some()); + self.accept(i, buy_index.expect("no valid buys")) + } + pub fn reclaim(&mut self, i: usize) -> Result<&mut Vbox, Error> { self.bound.get(i).ok_or(format_err!("no item at index {:?}", i))?; let reclaimed = self.bound.remove(i); From dd98016e2ab0778ba391b0c2294671311342b823 Mon Sep 17 00:00:00 2001 From: Mashy Date: Mon, 22 Jul 2019 19:58:08 +1000 Subject: [PATCH 3/3] remove log --- server/src/player.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/server/src/player.rs b/server/src/player.rs index ac4a8d6b..ca233a34 100644 --- a/server/src/player.rs +++ b/server/src/player.rs @@ -145,7 +145,6 @@ impl Player { if free_colours < 2 { break; } - debug!("Looping"); self.bot_vbox_accept(0).expect("could't accept colour 0"); self.bot_vbox_accept(0).expect("could't accept colour 1"); self.bot_vbox_accept(group_i).expect("could't accept group 0");