diff options
| author | Florian Fischer <florian.fl.fischer@fau.de> | 2017-02-16 17:20:06 +0100 |
|---|---|---|
| committer | Florian Fischer <florian.fl.fischer@fau.de> | 2017-02-16 17:20:06 +0100 |
| commit | dfe7ec47b87f5151abc9e28e3e943b006ffab464 (patch) | |
| tree | 886e02df6c97246a939160b0cc9791659d333ae8 | |
| parent | d123fa015393f6036f9854a49c38fa59d3b2140c (diff) | |
| download | goffel-dfe7ec47b87f5151abc9e28e3e943b006ffab464.tar.gz goffel-dfe7ec47b87f5151abc9e28e3e943b006ffab464.zip | |
remove restrictive interface
| -rw-r--r-- | goffel.go | 54 | ||||
| -rw-r--r-- | uis/client.go | 12 | ||||
| -rw-r--r-- | uis/interactive.go | 74 | ||||
| -rw-r--r-- | uis/server.go | 14 |
4 files changed, 70 insertions, 84 deletions
@@ -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") } |
