Skip to content

samuelj1519/go-blackjack

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

19 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐Ÿƒ Intelligent Blackjack Game

๐ŸŒ Language / ่ฏญ่จ€้€‰ๆ‹ฉ: English | ไธญๆ–‡

A fully-featured blackjack game written in Go, integrated with Monte Carlo probability analysis, Kelly Criterion bankroll management, and intelligent decision recommendation systems.

โœจ Core Features

๐ŸŽฏ Intelligent Probability Analysis

  • Real-time probability calculation: Based on Monte Carlo simulation (10,000 trials) to calculate winning probabilities
  • Action win rate comparison: Analyzes expected win rates for hit, stand, double down, and other actions
  • Optimal strategy recommendation: Automatically recommends the best decision based on basic strategy

๐Ÿ’ฐ Kelly Criterion Bankroll Management

  • Intelligent betting suggestions: Provides scientific betting amount recommendations based on bankroll status
  • Risk assessment: Real-time evaluation of current bankroll status and risk level
  • Double down decision analysis: Evaluates expected ROI and risk-reward ratio for doubling down

๐Ÿง  Decision Support System

  • Basic strategy integration: Built-in professional blackjack basic strategy
  • Real-time data analysis: Displays key indicators like bust probability, 21-point probability, etc.
  • Entertainment cost estimation: Helps players understand expected entertainment costs

๐Ÿš€ Quick Start

Requirements

  • Go 1.22+
  • UTF-8 compatible terminal

Install Dependencies

go mod tidy

Run the Game

# Method 1: Run directly go run ./cmd # Method 2: Build and run go build -o blackjack ./cmd ./blackjack

๐ŸŽฎ Game Controls

Basic Actions

  • h / hit - Hit (take a card)
  • s / stand - Stand
  • d / double / doubledown - Double down
  • q / quit - Quit game
  • y / yes - Continue game
  • n / no - End game

Menu Options

  • 1 - Start game
  • 2 - View game rules
  • 3 - Exit program

๐Ÿƒ Game Rules

๐ŸŽฏ Game Objective

Get your hand as close to 21 as possible without going over, while beating the dealer's hand.

๐ŸŽด Card Values

  • Number cards (2-10): Face value
  • Face cards (J,Q,K): 10 points each
  • Ace: Intelligently calculated as 1 or 11 (whichever is more favorable)

๐Ÿ’ฐ Betting System

  • Starting chips: 1000
  • Betting options: 10, 25, 50, 100, 200 chips
  • Smart betting: Automatic all-in option when chips are insufficient
  • Payout rules:
    • ๐Ÿ† Regular win: 1:1
    • ๐ŸŒŸ Blackjack win: 3:2 (non-double situations)
    • ๐Ÿค Push: Return original amount

โšก Double Down Feature

  • Trigger condition: Available on first two cards
  • Chip requirement: Current chips โ‰ฅ current bet amount
  • Game rule: Can only take one more card after doubling
  • Payout adjustment: Blackjack pays 1:1 after doubling

๐ŸŽฒ Game Flow

  1. Betting phase โ†’ Choose bet amount + bankroll management advice
  2. Dealing phase โ†’ Player and dealer each get 2 cards (dealer has 1 hidden card)
  3. Player turn โ†’ Choose hit/stand/double + probability analysis
  4. Dealer turn โ†’ Dealer follows automatic rules
  5. Settlement phase โ†’ Compare points and settle chips

๐Ÿ“Š Intelligent Analysis System

๐ŸŽฏ Real-time Probability Analysis

The game displays detailed probability analysis each turn:

๐Ÿ“Š Current Win Probability Analysis โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ ๐ŸŸข Player Win Probability: 45.6% ๐Ÿ”ด Dealer Win Probability: 16.7% ๐ŸŸก Push Probability: 37.6% ๐Ÿ“ˆ Detailed Analysis: ๐Ÿ’ฅ Player Bust Probability: 85.1% ๐Ÿ’ฅ Dealer Bust Probability: 22.7% ๐ŸŽฏ Player 21 Probability: 8.5% ๐ŸŽฏ Dealer 21 Probability: 6.3% ๐ŸŽฏ Action Win Rate Comparison: โœ‹ Stand: 45.8% โญ (Recommended) ๐Ÿ‘† Hit: 41.9% โšก Double: 36.3% 

๐Ÿ’ฐ Kelly Criterion Bankroll Management

Betting Phase Advice

๐Ÿ’ฐ Bankroll Management Advice: ๐Ÿ“Š Recommended Bet: 15 chips (1.5% of bankroll) ๐Ÿ’ก Your bankroll status is good, moderate betting recommended ๐ŸŸข Risk Status: Sufficient funds, controllable risk ๐ŸŽฎ Expected Entertainment Cost: 0.06% per hand 

Double Down Decision Analysis

๐Ÿ’ฐ Kelly Criterion Double Analysis: โšก Recommend Double (Expected ROI: 18.0%) ๐Ÿ”ด Double Risk Level: High (Kelly fraction: 0.180) 

๐Ÿงฎ Tiered Bankroll Management Strategy

Bankroll Level Recommended % Risk Level Strategy Description
โ‰ฅ 1000 chips 1.5% ๐ŸŸข Low Sufficient funds, moderate betting
โ‰ฅ 500 chips 1.0% ๐ŸŸข Low Conservative betting, risk control
โ‰ฅ 200 chips 0.5% ๐ŸŸก Medium More conservative, minimum betting
< 200 chips Minimum ๐Ÿ”ด High Recommend caution or leave game

๐Ÿง  Probability Calculation Principles

๐ŸŽฒ Monte Carlo Simulation Method

The game uses Monte Carlo simulation to calculate various probabilities:

  1. Simulation count: 10,000 simulations per analysis
  2. Strategy simulation: Player uses basic strategy, dealer follows fixed rules
  3. Remaining deck: Based on current known cards and remaining deck
  4. Statistical results: Statistics on frequency of various outcomes

๐Ÿ“ˆ Advantages Over Direct Calculation

Aspect Monte Carlo Simulation Direct Calculation
Complexity Management โœ… Handles complex strategies simply โŒ Combinatorial explosion
Strategy Integration โœ… Naturally integrates basic strategy โŒ Difficult to handle strategy changes
Extensibility โœ… Easy to add new rules โŒ Need to rewrite calculation logic
Multi-variable Handling โœ… Naturally handles multiple factors โŒ Complexity explodes with dimensions
Dynamic Adaptation โœ… Automatically adapts to deck changes โŒ Need to re-derive formulas

๐Ÿ’ก Kelly Criterion Application

Basic Formula

f* = (bp - q) / b 
  • f*: Optimal betting fraction
  • b: Odds (1:1 or 3:2)
  • p: Win probability
  • q: Loss probability

Practical Application Strategy

  1. Conservative factor: Use 25% of Kelly fraction to reduce risk
  2. Tiered management: Different strategies based on bankroll status
  3. Entertainment-oriented: Focus on bankroll management rather than strict expected returns

๐Ÿ—๏ธ Architecture Design

๐Ÿ“ Project Structure

go-blackjack/ โ”œโ”€โ”€ cmd/ # ๐Ÿš€ Program entry โ”‚ โ””โ”€โ”€ main.go โ”œโ”€โ”€ internal/ # ๐Ÿ”’ Internal modules โ”‚ โ”œโ”€โ”€ domain/ # ๐ŸŽฏ Domain layer - Core business logic โ”‚ โ”‚ โ””โ”€โ”€ entities/ โ”‚ โ”‚ โ”œโ”€โ”€ game.go # Game aggregate root โ”‚ โ”‚ โ”œโ”€โ”€ player.go # Player entity โ”‚ โ”‚ โ”œโ”€โ”€ dealer.go # Dealer entity โ”‚ โ”‚ โ”œโ”€โ”€ card.go # Card entity โ”‚ โ”‚ โ”œโ”€โ”€ deck.go # Deck entity โ”‚ โ”‚ โ”œโ”€โ”€ hand.go # Hand entity โ”‚ โ”‚ โ””โ”€โ”€ types.go # Type definitions โ”‚ โ”œโ”€โ”€ application/ # ๐Ÿ”„ Application layer - Use case orchestration โ”‚ โ”‚ โ”œโ”€โ”€ services/ โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ game.go # Game application service โ”‚ โ”‚ โ”‚ โ””โ”€โ”€ probability.go # Probability calculation service โ”‚ โ”‚ โ””โ”€โ”€ dtos/ โ”‚ โ”‚ โ””โ”€โ”€ game.go # Data transfer objects โ”‚ โ””โ”€โ”€ interfaces/ # ๐Ÿ–ฅ๏ธ Interface layer - User interaction โ”‚ โ””โ”€โ”€ cli/ โ”‚ โ”œโ”€โ”€ game.go # CLI handler โ”‚ โ””โ”€โ”€ display.go # Display service โ”œโ”€โ”€ go.mod # ๐Ÿ“ฆ Dependency management โ”œโ”€โ”€ go.sum โ””โ”€โ”€ README.md # ๐Ÿ“– Project documentation 

๐ŸŽฏ Architecture Layers

Domain Layer

  • Responsibility: Core business logic and rules
  • Characteristics: No external dependencies, pure business code
  • Contains: Game entities, business rules, state management
// Game aggregate root - Unified game state management type Game struct { ID string Player *Player Dealer *Dealer Deck *Deck State GameState // State machine management RoundNumber int }

Application Layer

  • Responsibility: Use case orchestration, domain object coordination
  • Characteristics: Handles business processes, data transformation
  • Contains: Application services, probability calculation, DTO objects
// Game application service - Orchestrates game use cases type GameApplicationService struct { game *entities.Game probabilityCalc *ProbabilityCalculator } // Probability calculator - Monte Carlo simulation type ProbabilityCalculator struct { trials int // Number of simulations rng *rand.Rand }

Interface Layer

  • Responsibility: User interaction, input/output handling
  • Characteristics: Extensible for multiple interface implementations
  • Contains: CLI handler, display service
// CLI game handler type GameHandler struct { gameService *services.GameApplicationService display *DisplayService }

๐Ÿ”„ Data Flow

User Input โ†’ CLI Handler โ†’ Application Service โ†’ Probability Calculator โ†“ โ†“ Domain Entities โ† Application Service โ† Monte Carlo Simulation โ†“ CLI Display โ† Kelly Formula Analysis 

๐Ÿงช Core Features

๐ŸŽฎ State Machine Management

type GameState int const ( StateWaitingToBet GameState = iota StatePlayerTurn StateDealerTurn StateGameOver )

๐Ÿƒ Intelligent Card Value Calculation

Automatically calculates optimal Ace value (1 or 11) to ensure best possible hand value.

๐Ÿ“Š Probability Analysis Engine

type ProbabilityResult struct { PlayerWinProbability float64 DealerWinProbability float64 PlayerBustProbability float64 ActionAnalysis *ActionAnalysis }

๐Ÿ’ฐ Kelly Criterion Decision Making

type KellyRecommendation struct { RecommendedBetAmount int RecommendedBetFraction float64 ShouldDouble bool RiskLevel string }

๐Ÿ’ก Business Rule Validation

Strict business rule validation in the domain layer ensures game logic correctness.

๐Ÿ”ง Extensible Design

  • Multi-interface support: Easy to add web, mobile interfaces
  • Feature extension: Easy to add split, surrender features
  • Algorithm optimization: Supports different probability calculation methods

๐ŸŽฏ Game Screenshots Examples

Betting Phase - Bankroll Management Advice

๐Ÿ’ฐ Current Chips: 1000 Please select bet amount: 1. 10 chips 2. 25 chips 3. 50 chips 4. 100 chips 5. 200 chips 6. Exit game ๐Ÿ’ฐ Bankroll Management Advice: ๐Ÿ“Š Recommended Bet: 15 chips (1.5% of bankroll) ๐Ÿ’ก Your bankroll status is good, moderate betting recommended ๐ŸŸข Risk Status: Sufficient funds, controllable risk ๐ŸŽฎ Expected Entertainment Cost: 0.06% per hand 

Game Round - Intelligent Analysis

๐Ÿ‘จ Dealer Hand (first card hidden): ๐Ÿ‚  ๐ŸƒA ๐Ÿ‘จ Player Hand (Value: 9): ๐Ÿƒ5 ๐Ÿƒ4 โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ ๐Ÿ“Š Current Win Probability Analysis โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ ๐ŸŸข Player Win Probability: 59.1% ๐Ÿ”ด Dealer Win Probability: 34.0% ๐ŸŸก Push Probability: 6.8% ๐Ÿ“ˆ Detailed Analysis: ๐Ÿ’ฅ Player Bust Probability: 0.0% ๐Ÿ’ฅ Dealer Bust Probability: 44.4% ๐ŸŽฏ Player 21 Probability: 0.0% ๐ŸŽฏ Dealer 21 Probability: 8.7% ๐ŸŽฏ Action Win Rate Comparison: โœ‹ Stand: 44.2% ๐Ÿ‘† Hit: 56.4% โšก Double: 59.0% โญ (Recommended) ๐Ÿ† Optimal Strategy Expected Win Rate: 59.0% ๐Ÿ’ฐ Kelly Criterion Double Analysis: โšก Recommend Double (Expected ROI: 18.0%) ๐Ÿ”ด Double Risk Level: High (Kelly fraction: 0.180) โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ 

๐ŸŽฏ Future Plans

Short-term Goals

  • ๐Ÿงช Complete unit test coverage
  • ๐Ÿ“ˆ Add historical statistics feature
  • ๐ŸŽฎ Implement split functionality
  • ๐Ÿ”„ Add surrender option

Medium-term Goals

  • ๐ŸŒ Develop web interface version
  • ๐Ÿ’พ Implement game data persistence
  • ๐Ÿ“ฑ Mobile adaptation
  • ๐Ÿค– AI opponent mode

Long-term Goals

  • ๐Ÿ† Multiplayer functionality
  • ๐Ÿ“Š Detailed statistical reports
  • ๐ŸŽฏ Custom rule settings
  • ๐ŸŒ Internationalization support

๐Ÿค Contributing

Issues and Pull Requests are welcome!

Development Environment Setup

git clone https://github.com/yourusername/go-blackjack.git cd go-blackjack go mod tidy go test ./...

Code Style

  • Follow Go official coding standards
  • Use meaningful variable and function names
  • Add appropriate comments and documentation

๐Ÿ“„ License

This project is licensed under the MIT License - see the LICENSE file for details


โญ If this project helps you, please give us a star!

About

A fully-featured blackjack game written in Go, integrated with Monte Carlo probability analysis, Kelly Criterion bankroll management, and intelligent decision recommendation systems.

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors