From e7167b17d96cea1c31ca77e36cc0248c18b818c6 Mon Sep 17 00:00:00 2001 From: Kjetil Orbekk Date: Sun, 18 Dec 2022 12:38:13 -0500 Subject: Implement advance_play for passing bidding bot --- protocol/src/simple_bots.rs | 2 +- server/src/play.rs | 25 +++++++++++++++++++++---- 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/protocol/src/simple_bots.rs b/protocol/src/simple_bots.rs index f5be424..b7986b6 100644 --- a/protocol/src/simple_bots.rs +++ b/protocol/src/simple_bots.rs @@ -2,7 +2,7 @@ use async_trait::async_trait; use crate::{bot::BiddingBot, bridge_engine::{BiddingStatePlayerView, Bid}}; -struct AlwaysPassBiddingBot {} +pub struct AlwaysPassBiddingBot {} #[async_trait] impl BiddingBot for AlwaysPassBiddingBot { diff --git a/server/src/play.rs b/server/src/play.rs index 17d5819..c4dc5c7 100644 --- a/server/src/play.rs +++ b/server/src/play.rs @@ -1,9 +1,10 @@ use async_trait::async_trait; -use protocol::{bridge_engine::{GameState, Player, Bid, Deal}}; +use protocol::{bridge_engine::{GameState, Player, Bid, Deal, BiddingStatePlayerView}, simple_bots::AlwaysPassBiddingBot, bot::BiddingBot}; use rand::random; use serde::{Deserialize, Serialize}; use serde_json::json; use sqlx::{query, PgPool}; +use tracing::error; use uuid::Uuid; use crate::error::BridgeError; @@ -140,8 +141,24 @@ impl Table { } -pub fn advance_play(table: &mut Table) { - todo!() +pub async fn advance_play(table: &mut Table) -> Result<(), BridgeError> { + let current_player = match table.game().current_player() { + Some(player) => player, + None => { + return Err(BridgeError::InvalidRequest(format!("No play to make for game"))); + }, + }; + match table.game() { + GameState::Bidding(bidding) => { + let player_view = BiddingStatePlayerView::from_bidding_state(bidding, current_player); + let bot = AlwaysPassBiddingBot {}; + let bid = bot.bid(&player_view).await; + table.bid(bid).await?; + Ok(()) + }, + GameState::Play(_) => todo!(), + GameState::PassedOut { dealer, deal, bidding } => todo!(), + } } #[cfg(test)] @@ -215,7 +232,7 @@ mod test { async fn test_advance_play() { let mut t1: Table = Table::new(Default::default()).await.unwrap(); let player = t1.game().current_player(); - advance_play(&mut t1); + advance_play(&mut t1).await.unwrap(); assert_ne!(player, t1.game().current_player()); } } -- cgit v1.2.3