aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--logic/player.go17
-rw-r--r--net/server.go41
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))