package game import ( "golang.org/x/exp/slices" ) func KingGame(s *State) []*Player { foundKings := map[*Player]struct{}{} for _, u := range s.Units { if u.card.Name != "King" { continue } foundKings[u.owner] = struct{}{} } if len(foundKings) == len(s.Players) { return []*Player{} } loosers := make([]*Player, 0, len(s.Players)) copy(loosers, s.Players) for p := range foundKings { i := slices.Index(loosers, p) loosers[i] = loosers[len(loosers)-1] loosers = loosers[:len(loosers)-1] } winners := []*Player{} for _, p := range s.Players { if !slices.Contains(loosers, p) { winners = append(winners, p) } } return winners }