39 lines
1.3 KiB
Go
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()
|
|
}
|
|
}
|