Fix crash when playing forced moves

This commit is contained in:
Trevor Slocum 2024-01-22 12:29:23 -08:00
parent 3607efee41
commit 5aa42bb888
3 changed files with 24 additions and 4 deletions

2
go.mod
View file

@ -3,7 +3,7 @@ module code.rocket9labs.com/tslocum/bgammon
go 1.17
require (
code.rocket9labs.com/tslocum/tabula v0.0.0-20240108183445-695ea428ae21
code.rocket9labs.com/tslocum/tabula v0.0.0-20240118055336-21a3dea3f702
github.com/alexedwards/argon2id v1.0.0
github.com/gobwas/ws v1.3.2
github.com/gorilla/mux v1.8.1

4
go.sum
View file

@ -1,7 +1,7 @@
code.rocket9labs.com/tslocum/bei v0.0.0-20240108012722-6db380cc190b h1:Y0a14Kf/hSYepSmp4ZfDeE4CZZGBGBS97CNjCbKJm0c=
code.rocket9labs.com/tslocum/bei v0.0.0-20240108012722-6db380cc190b/go.mod h1:tS60/VNAJphKvDBkSLQhKALa15msIAuWWfEKNc4oFZc=
code.rocket9labs.com/tslocum/tabula v0.0.0-20240108183445-695ea428ae21 h1:1VG88tdhCSVv7wGoIKQe8A8KfBXJsdz5pDsyP4ymDwk=
code.rocket9labs.com/tslocum/tabula v0.0.0-20240108183445-695ea428ae21/go.mod h1:WEJXESKXqrMFLAArikQ79lpRibNeeE1C0VruxXYMF5M=
code.rocket9labs.com/tslocum/tabula v0.0.0-20240118055336-21a3dea3f702 h1:NGZILSBynzLZF84WKZyAuoWsZFq37uvEcP2dFvPsY/8=
code.rocket9labs.com/tslocum/tabula v0.0.0-20240118055336-21a3dea3f702/go.mod h1:WEJXESKXqrMFLAArikQ79lpRibNeeE1C0VruxXYMF5M=
github.com/Masterminds/goutils v1.1.1 h1:5nUrii3FMTL5diU80unEVvNevw1nH4+ZV4DSLVJLSYI=
github.com/Masterminds/goutils v1.1.1/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU=
github.com/Masterminds/semver v1.4.2/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y=

View file

@ -86,6 +86,9 @@ func (g *serverGame) playForcedMoves() bool {
} else {
FORCEDMOVES:
for _, m1 := range allMoves[0] {
if m1[0] == 0 && m1[1] == 0 {
break
}
for i := range allMoves {
if i == 0 {
continue
@ -109,6 +112,19 @@ func (g *serverGame) playForcedMoves() bool {
if len(forcedMoves) == 0 {
return false
}
gc := g.Copy(true)
for _, move := range forcedMoves {
if gc.Winner != 0 {
break
} else if gc.HaveDiceRoll(move[0], move[1]) == 0 {
return false
}
ok, _ := gc.AddMoves([][]int8{{move[0], move[1]}}, false)
if !ok {
log.Printf("ERROR: failed to play forced move during validation %v: %v %v (%v) (%v) (%v)", move, forcedMoves, gc.DiceRolls(), gc, gc.Board, allMoves)
return false
}
}
g.eachClient(func(client *serverClient) {
g.sendBoard(client, true)
})
@ -118,7 +134,11 @@ func (g *serverGame) playForcedMoves() bool {
}
ok, _ := g.AddMoves([][]int8{{move[0], move[1]}}, false)
if !ok {
log.Fatalf("failed to play forced move %v: %v %v (%v) (%v)", move, forcedMoves, g.DiceRolls(), g.Game, g.Board)
log.Printf("ERROR: failed to play forced move %v: %v %v (%v) (%v) (%v)", move, forcedMoves, g.DiceRolls(), g.Game, g.Board, allMoves)
g.eachClient(func(client *serverClient) {
g.sendBoard(client, false)
})
return false
}
g.eachClient(func(client *serverClient) {
ev := &bgammon.EventMoved{