aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Fischer <florian.fl.fischer@fau.de>2017-02-18 22:26:35 +0100
committerFlorian Fischer <florian.fl.fischer@fau.de>2017-02-19 19:20:57 +0100
commit7fdbc971afac5831d8c31295000af38d56021f51 (patch)
treea6a843e7066883aa11fcb83411fc947c1e43613f
parent6566f09803377bb22b5460f9decb7d201b861ff4 (diff)
downloadgoffel-7fdbc971afac5831d8c31295000af38d56021f51.tar.gz
goffel-7fdbc971afac5831d8c31295000af38d56021f51.zip
logic: generalize Player struct
-rw-r--r--logic/player.go9
-rw-r--r--uis/interactive.go31
-rw-r--r--uis/server.go29
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))