Crate twentyone[−][src]
A blackjack engine for Rust.
Quick Start
Here is an example to get the library working. It automatically makes the player hit when their hand value is <17, and stand when it’s >= 17.
use twentyone::game::get_hand_value; use twentyone::prelude::*; // Callback that will be used to return player's actions such as betting or hitting fn callback(request: DealerRequest, player: Option<&Player>, dealer: &Dealer) -> PlayerAction { match request { // Dealer asking player to play, along with a hand index DealerRequest::Play(i) => { // Get the value of the player's hand let value = get_hand_value(&player.unwrap().hands()[i], true); println!("Player's hand value is {}", value); // Hit if the hand value is <17, stand if it isn't if value < 17 { println!("Player is hitting"); PlayerAction::Hit } else { println!("Player is standing"); PlayerAction::Stand } } // Dealer requesting a bet DealerRequest::Bet => { // Bet $10 println!("Player is betting $10"); PlayerAction::Bet(10) } // Dealer showing their hand when the game is over DealerRequest::DealerHand(hand) => { // Get the value of the player's and the dealer's hand let dealer_hand_value = get_hand_value(&hand, true); let player_hand_value = get_hand_value(&dealer.players()[0].hands()[0], true); // Print both println!("Player hand value is {}", player_hand_value); println!("Dealer hand value is {}", dealer_hand_value); // Print whether the player won, lost, or had a push if (player_hand_value > dealer_hand_value && player_hand_value <= 21) || (player_hand_value <= 21 && dealer_hand_value > 21) { println!("Player Won!"); } else if player_hand_value == dealer_hand_value && player_hand_value <= 21 { println!("Push."); } else { println!("Player Lost."); } PlayerAction::None } // Dealer returning an error with the last action // Panic for error-checking reasons DealerRequest::Error(_) => panic!("An error occurred"), // Other events that don't require specific handling _ => PlayerAction::None, } } fn main() { // Create a six-deck shoe and shuffle it let mut shoe = create_shoe(6); shuffle_deck(&mut shoe); // Create a dealer let mut dealer = Dealer::new(shoe, DEFAULT_CONFIG, &callback); // Create a player with $1000 let player = Player::new(1000); // Add the player to the dealer dealer.players_mut().push(player); // Auto-play five rounds for _ in 0..5 { dealer.play_round(true); } }
More examples are available in the examples folder of the repository.
Modules
cards | Card-related functions, such as deck creation and shuffling |
game | Game-related functions and structures, such as the dealer or hand value checking |
prelude | Functions and structures required in almost all situations |