Fix crash when playing forced moves
This commit is contained in:
parent
3607efee41
commit
5aa42bb888
3 changed files with 24 additions and 4 deletions
2
go.mod
2
go.mod
|
@ -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
4
go.sum
|
@ -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=
|
||||
|
|
|
@ -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{
|
||||
|
|
Loading…
Reference in a new issue