From d80569de319c9ec5063b4022a43d40d5da7d2949 Mon Sep 17 00:00:00 2001 From: Trevor Slocum Date: Sat, 9 Dec 2023 12:23:20 -0800 Subject: [PATCH] Fix panic while calculating legal moves --- game.go | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/game.go b/game.go index a23276d..95e6678 100644 --- a/game.go +++ b/game.go @@ -381,7 +381,7 @@ func (g *Game) LegalMoves(local bool) [][]int { return c } - useDiceRoll := func(from, to int) { + useDiceRoll := func(from, to int) bool { if to == SpaceHomePlayer || to == SpaceHomeOpponent { needRoll := from if to == SpaceHomeOpponent { @@ -390,29 +390,32 @@ func (g *Game) LegalMoves(local bool) [][]int { for i, roll := range rolls { if roll == needRoll { rolls = append(rolls[:i], rolls[i+1:]...) - return + return true } } for i, roll := range rolls { if roll > needRoll { rolls = append(rolls[:i], rolls[i+1:]...) - return + return true } } - log.Panicf("no dice roll to use for %d/%d", from, to) + return false } diff := SpaceDiff(from, to, g.Acey) for i, roll := range rolls { if roll == diff { rolls = append(rolls[:i], rolls[i+1:]...) - return + return true } } + return false } for _, move := range g.Moves { - useDiceRoll(move[0], move[1]) + if !useDiceRoll(move[0], move[1]) { + return nil + } } var moves [][]int