diff options
| author | Florian Fischer <florian.fl.fischer@fau.de> | 2017-02-18 22:26:35 +0100 |
|---|---|---|
| committer | Florian Fischer <florian.fl.fischer@fau.de> | 2017-02-19 19:20:57 +0100 |
| commit | 7fdbc971afac5831d8c31295000af38d56021f51 (patch) | |
| tree | a6a843e7066883aa11fcb83411fc947c1e43613f | |
| parent | 6566f09803377bb22b5460f9decb7d201b861ff4 (diff) | |
| download | goffel-7fdbc971afac5831d8c31295000af38d56021f51.tar.gz goffel-7fdbc971afac5831d8c31295000af38d56021f51.zip | |
logic: generalize Player struct
| -rw-r--r-- | logic/player.go | 9 | ||||
| -rw-r--r-- | uis/interactive.go | 31 | ||||
| -rw-r--r-- | uis/server.go | 29 |
3 files changed, 36 insertions, 33 deletions
diff --git a/logic/player.go b/logic/player.go new file mode 100644 index 0000000..31aa5d0 --- /dev/null +++ b/logic/player.go @@ -0,0 +1,9 @@ +// Copyright (c) 2016 Florian Fischer. All rights reserved. +// Use of this source code is governed by a MIT license found in the LICENSE file. + +package logic + +type Player struct { + Name string + Score Score +} diff --git a/uis/interactive.go b/uis/interactive.go index e493878..8210122 100644 --- a/uis/interactive.go +++ b/uis/interactive.go @@ -11,13 +11,8 @@ import ( . "muhq.space/go/muhq/goffel/logic" ) -type intPlayer struct { - name string - score Score -} - type Interactive struct { - players []intPlayer + players []Player } var dices Dice @@ -41,7 +36,7 @@ func (i *Interactive) init() { if err != nil { break } - i.players = append(i.players, intPlayer{name, NewScore()}) + i.players = append(i.players, Player{name, NewScore()}) count++ } @@ -53,10 +48,10 @@ func (ui *Interactive) round(r int) { } } -func turn(p *intPlayer) { +func turn(p *Player) { dices.Roll(nil) - fmt.Printf("%s's turn:\n", p.name) + fmt.Printf("%s's turn:\n", p.Name) fmt.Println(dices) var cmd Cmd @@ -80,13 +75,13 @@ func turn(p *intPlayer) { fmt.Println(helpLine) } case "p": - fmt.Println(p.score) + fmt.Println(p.Score) case "d": fmt.Println(dices) case "q": os.Exit(0) case "i": - points, err := p.score.Insert(dices, cmd.Argv[0]) + points, err := p.Score.Insert(dices, cmd.Argv[0]) if err != nil { fmt.Println("Insert failed:", err) continue @@ -94,7 +89,7 @@ func turn(p *intPlayer) { fmt.Printf("You inserted %d into %v.\n", points, ScoreNames[cmd.Argv[0]]) return case "c": - err = p.score.Cancel(cmd.Argv[0]) + err = p.Score.Cancel(cmd.Argv[0]) if err != nil { fmt.Println(err) continue @@ -120,21 +115,21 @@ func turn(p *intPlayer) { func (ui *Interactive) broadcastWinner() { fmt.Println("Fin!") - winners := []intPlayer{} + winners := []Player{} max := 0 for _, player := range ui.players { - t := player.score.Score() + t := player.Score.Score() if t > max || len(winners) == 0 { for _, winner := range winners { - fmt.Printf("\t%v scored %v points\n", winner.name, max) + fmt.Printf("\t%v scored %v points\n", winner.Name, max) } max = t - winners = []intPlayer{player} + winners = []Player{player} } else if t == max { winners = append(winners, player) } else { - fmt.Printf("\t%v scored %v points\n", player.name, t) + fmt.Printf("\t%v scored %v points\n", player.Name, t) } } @@ -144,6 +139,6 @@ func (ui *Interactive) broadcastWinner() { fmt.Println("The Winners are:") } for _, winner := range winners { - fmt.Printf("\t%v with %v points\n", winner.name, max) + fmt.Printf("\t%v with %v points\n", winner.Name, max) } } diff --git a/uis/server.go b/uis/server.go index f4e51e8..220699c 100644 --- a/uis/server.go +++ b/uis/server.go @@ -91,13 +91,12 @@ func (msg sMsg) String() string { } type player struct { - name string - score logic.Score + logic.Player client *client } func (p player) String() string { - return p.name + return p.Name } type client struct { @@ -149,7 +148,7 @@ func (c *client) getBest() ([]player, int) { best := []player{} max := 0 for _, p := range c.players { - t := p.score.Score() + t := p.Score.Score() if t > max { best = []player{p} max = t @@ -170,7 +169,7 @@ func (c *client) round(round int, wg *sync.WaitGroup) { cmd := logic.Cmd{} var err error rerolls := 0 - err = c.send(sMsg{94, []interface{}{round, p.name, dice}}) + err = c.send(sMsg{94, []interface{}{round, p.Name, dice}}) if err != nil { fin = true } @@ -189,7 +188,7 @@ func (c *client) round(round int, wg *sync.WaitGroup) { msg.Payload = logic.CmdHelp(cmd.Argv[0]) case "p": msg.Response = 12 - msg.Payload = p.score + msg.Payload = p.Score case "d": msg.Response = 13 msg.Payload = dice @@ -198,23 +197,23 @@ func (c *client) round(round int, wg *sync.WaitGroup) { err = errors.New("Quit") c.sock.Close() case "i": - i, err := p.score.Insert(dice, cmd.Argv[0]) + i, err := p.Score.Insert(dice, cmd.Argv[0]) if err != nil { msg.Response = 31 msg.Payload = err } else { msg.Response = 14 - msg.Payload = []interface{}{cmd, i, p.score} + msg.Payload = []interface{}{cmd, i, p.Score} fin = true } case "c": - err := p.score.Cancel(cmd.Argv[0]) + err := p.Score.Cancel(cmd.Argv[0]) if err != nil { msg.Response = 32 msg.Payload = err } else { msg.Response = 15 - msg.Payload = []interface{}{cmd, p.score} + msg.Payload = []interface{}{cmd, p.Score} fin = true } case "r": @@ -241,7 +240,7 @@ func (c *client) round(round int, wg *sync.WaitGroup) { if err != nil { msg = sMsg{96, err} } else { - msg = sMsg{95, []interface{}{p.name, msg}} + msg = sMsg{95, []interface{}{p.Name, msg}} } c.results <- msg } @@ -263,7 +262,7 @@ func (s session) String() (ret string) { names := make([]string, 0, s.maxPlayers) for _, c := range s.clients { for _, p := range c.players { - names = append(names, p.name) + names = append(names, p.Name) } } return fmt.Sprintf("%s%v", ret, names) @@ -283,7 +282,7 @@ func (s *session) terminate(reason sMsg) { func (s *session) addClient(c *client) { newNames := make([]string, 0, len(c.players)) for _, n := range c.players { - newNames = append(newNames, n.name) + newNames = append(newNames, n.Name) } okClients := make([]*client, 0, len(c.players)) for _, other := range s.clients { @@ -324,7 +323,7 @@ func (s *session) play() { // collect broken clients if res.Response == 96 { badClients[c] = true - res = sMsg{96, []interface{}{p.name, res.Payload}} + res = sMsg{96, []interface{}{p.Name, res.Payload}} } for j, c2 := range s.clients { if i != j { @@ -424,7 +423,7 @@ func (s *Server) Serve() error { helo.Players = line[1:] } for _, name := range helo.Players { - c.players = append(c.players, player{name, logic.NewScore(), &c}) + c.players = append(c.players, player{logic.Player{name, logic.NewScore()}, &c}) } c.results = make(chan sMsg, len(c.players)) |
