diff options
| -rw-r--r-- | logic/player.go | 17 | ||||
| -rw-r--r-- | net/server.go | 41 |
2 files changed, 22 insertions, 36 deletions
diff --git a/logic/player.go b/logic/player.go index 0642495..c522ac2 100644 --- a/logic/player.go +++ b/logic/player.go @@ -4,10 +4,25 @@ package logic type Player struct { - Name string + Name string Score Score } func NewPlayer(name string) Player { return Player{name, NewScore()} } + +func FindBest(players []Player) ([]Player, int) { + best := []Player{} + max := 0 + for _, p := range players { + t := p.Score.Score() + if t > max { + best = []Player{p} + max = t + } else if t == max { + best = append(best, p) + } + } + return best, max +} diff --git a/net/server.go b/net/server.go index 3c65b20..0716100 100644 --- a/net/server.go +++ b/net/server.go @@ -90,15 +90,6 @@ func (msg sMsg) String() string { return fmt.Sprintf("%s%s%v", response, res, payload) } -type player struct { - logic.Player - client *client -} - -func (p player) String() string { - return p.Name -} - type client struct { sock net.Conn reader *bufio.Reader @@ -106,7 +97,7 @@ type client struct { encoder *json.Encoder decoder *json.Decoder encoding string - players []player + players []logic.Player results chan sMsg } @@ -144,21 +135,6 @@ func (c *client) recvCmd() (logic.Cmd, error) { return cmd, err } -func (c *client) getBest() ([]player, int) { - best := []player{} - max := 0 - for _, p := range c.players { - t := p.Score.Score() - if t > max { - best = []player{p} - max = t - } else if t == max { - best = append(best, p) - } - } - return best, max -} - func (c *client) round(round int, wg *sync.WaitGroup) { dice := logic.Dice{} var msg sMsg @@ -342,17 +318,12 @@ func (s *session) play() { } s.clients = okClients } - winners := []player{} - max := 0 + best := make([]logic.Player, 0, len(s.clients)) for _, c := range s.clients { - best, m := c.getBest() - if m > max { - winners = best - max = m - } else if m == max { - winners = append(winners, best...) - } + b, _ := logic.FindBest(c.players) + best = append(best, b...) } + winners, max := logic.FindBest(best) msg = sMsg{97, []interface{}{max, winners}} for _, c := range s.clients { c.send(msg) @@ -423,7 +394,7 @@ func (s *Server) Serve() error { helo.Players = line[1:] } for _, name := range helo.Players { - c.players = append(c.players, player{logic.NewPlayer(name), &c}) + c.players = append(c.players, logic.NewPlayer(name)) } c.results = make(chan sMsg, len(c.players)) |
