go_games_collection/blackjack_bot.go
2026-07-04 13:51:04 +03:00

39 lines
1.3 KiB
Go

package main
// BlackjackBot — единственная (без градации уровней) стратегия
// бота для Блэкджека: играет по упрощённой базовой стратегии —
// берёт карту, пока сумма меньше 17 (как и дилер), и удваивает
// ставку на жёсткой сумме 11 из первых двух карт, если хватает
// капитала.
type BlackjackBot struct{}
// DecideAction решает, что делать текущему игроку: "hit", "stand"
// или "double".
func (BlackjackBot) DecideAction(g *BlackjackGameState) string {
p := g.current()
total := handTotal(p.Hand)
if len(p.Hand) == 2 && total == 11 && p.Balance >= p.Bet {
return "double"
}
if total < 17 {
return "hit"
}
return "stand"
}
// PlayFullTurn исполняет одно решение бота — используется при
// автоматической прокрутке партии.
func (b BlackjackBot) PlayFullTurn(g *BlackjackGameState) error {
if g.Phase != BJPhasePlayerTurn {
return nil
}
switch b.DecideAction(g) {
case "double":
return g.DoubleDown()
case "hit":
return g.Hit()
default:
return g.Stand()
}
}