diff options
author | Kjetil Orbekk <kj@orbekk.com> | 2022-09-06 21:19:32 -0400 |
---|---|---|
committer | Kjetil Orbekk <kj@orbekk.com> | 2022-09-06 21:19:32 -0400 |
commit | 92c68e821ee381ee2aa52bdfcbaebdccc76f0870 (patch) | |
tree | 80815947cc557cef07edf695b54370391ec51368 | |
parent | c19d8d2d475d12b45b85e44682f39aaa70923d74 (diff) |
Set up initial shared (empty) bidding state
-rw-r--r-- | webapp/src/bridge_engine.rs | 13 | ||||
-rw-r--r-- | webapp/src/default.css | 2 | ||||
-rw-r--r-- | webapp/src/main.rs | 16 |
3 files changed, 17 insertions, 14 deletions
diff --git a/webapp/src/bridge_engine.rs b/webapp/src/bridge_engine.rs index 573b2f1..fd52c33 100644 --- a/webapp/src/bridge_engine.rs +++ b/webapp/src/bridge_engine.rs @@ -263,7 +263,7 @@ impl Bidding { } } - fn highest_bid(&self) -> Option<Raise> { + pub fn highest_bid(&self) -> Option<Raise> { for bid in self.bids.iter().rev() { if let Some(raise) = bid.as_raise() { return Some(raise); @@ -314,7 +314,11 @@ pub enum BiddingResult { } impl BiddingResult { - pub fn bidding(self) -> Bidding { + pub fn new(dealer: Player) -> Self { + BiddingResult::InProgress(Bidding::new(dealer)) + } + + pub fn bidding(&self) -> &Bidding { match self { BiddingResult::InProgress(bidding) => bidding, BiddingResult::Contract(_, bidding) => bidding, @@ -375,7 +379,10 @@ mod tests { let mut checked_raises = 0; for bid in Raise::all_raises() { assert_eq!(bid, Raise::from_str(format!("{}", bid).as_str()).unwrap()); - assert_eq!(Bid::Raise(bid), Bid::from_str(format!("{}", bid).as_str()).unwrap()); + assert_eq!( + Bid::Raise(bid), + Bid::from_str(format!("{}", bid).as_str()).unwrap() + ); checked_raises += 1; } assert_eq!(checked_raises, 35); diff --git a/webapp/src/default.css b/webapp/src/default.css index 7e34b66..724cce9 100644 --- a/webapp/src/default.css +++ b/webapp/src/default.css @@ -65,8 +65,10 @@ body { .bidding-table { max-width: 250px; + min-height: 50px; display: grid; grid-template-columns: repeat(4, 1fr); + grid-template-rows: min-content; border: 2px solid #000; border-radius: 10px; background-color: #eee; diff --git a/webapp/src/main.rs b/webapp/src/main.rs index dd69eca..c99eeee 100644 --- a/webapp/src/main.rs +++ b/webapp/src/main.rs @@ -6,6 +6,7 @@ pub mod bridge_engine; pub mod card; use bridge_engine::Bid; use bridge_engine::Bidding; +use bridge_engine::BiddingResult; use bridge_engine::Player; use bridge_engine::Raise; extern crate wee_alloc; @@ -33,6 +34,8 @@ pub fn app() -> Html { let south = use_state(|| HandProps::from_iter(deal.south.into_iter())); let east = use_state(|| HandProps::from_iter(deal.east.into_iter())); + let bidding_state = use_state(|| BiddingResult::new(Player::East)); + let shuffle = { let north = north.clone(); let west = west.clone(); @@ -50,21 +53,12 @@ pub fn app() -> Html { }) }; - let bidding = Bidding::new(Player::North); - let bidding = bidding.bid("1NT".parse().unwrap()).unwrap().bidding(); - let bidding = bidding.bid("pass".parse().unwrap()).unwrap().bidding(); - let bidding = bidding.bid("2♦".parse().unwrap()).unwrap().bidding(); - let bidding = bidding.bid("pass".parse().unwrap()).unwrap().bidding(); - let bidding = bidding.bid("2♥".parse().unwrap()).unwrap().bidding(); - let bidding = bidding.bid("pass".parse().unwrap()).unwrap().bidding(); - let bidding = bidding.bid("4♥".parse().unwrap()).unwrap().bidding(); - html! { <> <p>{ "Bidding table" }</p> - <BiddingTable { bidding } /> + <BiddingTable bidding={ (*bidding_state).clone().bidding().clone() } /> <p>{ "Bidding box" }</p> - <BiddingBox current_bid={Some("1H".parse::<Raise>().unwrap())} /> + <BiddingBox current_bid={ (*bidding_state).clone().bidding().highest_bid() } /> <p>{ "North" }</p> <Hand ..(*north).clone() /> <p>{ "West" }</p> |