aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Fischer <florian.fl.fischer@fau.de>2017-02-16 17:20:06 +0100
committerFlorian Fischer <florian.fl.fischer@fau.de>2017-02-16 17:20:06 +0100
commitdfe7ec47b87f5151abc9e28e3e943b006ffab464 (patch)
tree886e02df6c97246a939160b0cc9791659d333ae8
parentd123fa015393f6036f9854a49c38fa59d3b2140c (diff)
downloadgoffel-dfe7ec47b87f5151abc9e28e3e943b006ffab464.tar.gz
goffel-dfe7ec47b87f5151abc9e28e3e943b006ffab464.zip
remove restrictive interface
-rw-r--r--goffel.go54
-rw-r--r--uis/client.go12
-rw-r--r--uis/interactive.go74
-rw-r--r--uis/server.go14
4 files changed, 70 insertions, 84 deletions
diff --git a/goffel.go b/goffel.go
index aab20ee..3ee90e0 100644
--- a/goffel.go
+++ b/goffel.go
@@ -9,46 +9,34 @@ import (
"muhq.space/go/muhq/goffel/uis"
)
-type UI interface {
- Init() error
- Round(r int) error
- BroadcastWinner()
-}
-
-func play(ui UI) {
- err := ui.Init()
- if err != nil {
- panic(err)
- }
-
- for round := 1; round <= 13; round++ {
- err = ui.Round(round)
- if err != nil {
- panic(err)
- }
- }
- ui.BroadcastWinner()
-}
+var (
+ port string
+ server bool
+ greeting string
+ client bool
+ fancy bool
+)
func main() {
rand.Seed(time.Now().Unix())
- var port = flag.Int("p", 1337, "port to listen for connections")
- var server = flag.Bool("s", false, "start a goffel server")
- var client = flag.Bool("c", false, "start a goffel client")
- var fancy = flag.Bool("f", false, "print utf8 dice runes")
+ flag.StringVar(&port, "p", "1337", "port to listen for connections")
+ flag.BoolVar(&server, "s", false, "start a goffel server")
+ flag.StringVar(&greeting, "g", "", "Welcome message")
+ flag.BoolVar(&client, "c", false, "start a goffel client")
+ flag.BoolVar(&fancy, "f", false, "print utf8 dice runes")
flag.Parse()
- logic.SetFancyPrint(*fancy)
-
- var ui UI
+ logic.SetFancyPrint(fancy)
- if *server {
- ui = &uis.Server{Port: *port}
- } else if *client {
- ui = &uis.Client{Port: *port}
+ if server {
+ s := uis.NewServer(port, greeting)
+ s.Serve()
+ } else if client {
+ c := uis.Client{Port: port}
+ c.Run()
} else {
- ui = &uis.Interactive{}
+ i := uis.Interactive{}
+ i.Run()
}
- play(ui)
}
diff --git a/uis/client.go b/uis/client.go
index 6b1d1d9..beca3a6 100644
--- a/uis/client.go
+++ b/uis/client.go
@@ -4,15 +4,9 @@
package uis
type Client struct {
- Port int
+ Port string
}
-func (ui *Client) Init() error {
- return nil
+func (ui *Client) Run() {
+ println("Not Implemented")
}
-
-func (ui *Client) Round(r int) error {
- return nil
-}
-
-func (ui *Client) BroadcastWinner() {}
diff --git a/uis/interactive.go b/uis/interactive.go
index f742d9a..ab23971 100644
--- a/uis/interactive.go
+++ b/uis/interactive.go
@@ -23,7 +23,15 @@ type Interactive struct {
var dices Dices
var reader = bufio.NewReader(os.Stdin)
-func (i *Interactive) Init() error {
+func (i *Interactive) Run() {
+ i.init()
+ for r := 1; r < 14; r++ {
+ i.round(r)
+ }
+ i.broadcastWinner()
+}
+
+func (i *Interactive) init() {
name := ""
count := 0
fmt.Println("Please enter your player names. An empty line ends the player registration.")
@@ -37,44 +45,12 @@ func (i *Interactive) Init() error {
count++
}
- return nil
}
-func (ui *Interactive) Round(r int) error {
+func (ui *Interactive) round(r int) {
fmt.Printf("Round %d\n", r)
for i := range ui.players {
turn(&ui.players[i])
}
- return nil
-}
-
-func (ui *Interactive) BroadcastWinner() {
- fmt.Println("Fin!")
- winners := []intPlayer{}
- max := 0
-
- for _, player := range ui.players {
- 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)
- }
- max = t
- winners = []intPlayer{player}
- } else if t == max {
- winners = append(winners, player)
- } else {
- fmt.Printf("\t%v scored %v points\n", player.name, t)
- }
- }
-
- if len(winners) == 1 {
- fmt.Println("The Winner is:")
- } else {
- fmt.Println("The Winners are:")
- }
- for _, winner := range winners {
- fmt.Printf("\t%v with %v points\n", winner.name, max)
- }
}
func turn(p *intPlayer) {
@@ -141,3 +117,33 @@ func turn(p *intPlayer) {
}
}
}
+
+func (ui *Interactive) broadcastWinner() {
+ fmt.Println("Fin!")
+ winners := []intPlayer{}
+ max := 0
+
+ for _, player := range ui.players {
+ 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)
+ }
+ max = t
+ winners = []intPlayer{player}
+ } else if t == max {
+ winners = append(winners, player)
+ } else {
+ fmt.Printf("\t%v scored %v points\n", player.name, t)
+ }
+ }
+
+ if len(winners) == 1 {
+ fmt.Println("The Winner is:")
+ } else {
+ fmt.Println("The Winners are:")
+ }
+ for _, winner := range winners {
+ fmt.Printf("\t%v with %v points\n", winner.name, max)
+ }
+}
diff --git a/uis/server.go b/uis/server.go
index 890abb9..daafef9 100644
--- a/uis/server.go
+++ b/uis/server.go
@@ -4,16 +4,14 @@
package uis
type Server struct {
- Port int
+ Port string
+ greeting string
}
-func (s *Server) Init() error {
- return nil
+func NewServer(port string, greeting string) Server {
+ return Server{port, greeting}
}
-func (s *Server) Round(r int) error {
- return nil
-}
-
-func (s *Server) BroadcastWinner() {
+func (s *Server) Serve() {
+ println("Not Implemented")
}