summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKjetil Orbekk <kj@orbekk.com>2022-09-06 21:19:32 -0400
committerKjetil Orbekk <kj@orbekk.com>2022-09-06 21:19:32 -0400
commit92c68e821ee381ee2aa52bdfcbaebdccc76f0870 (patch)
tree80815947cc557cef07edf695b54370391ec51368
parentc19d8d2d475d12b45b85e44682f39aaa70923d74 (diff)
Set up initial shared (empty) bidding state
-rw-r--r--webapp/src/bridge_engine.rs13
-rw-r--r--webapp/src/default.css2
-rw-r--r--webapp/src/main.rs16
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>