From a2436fe8d8c9924a75acbe0272e9189880c5f35f Mon Sep 17 00:00:00 2001 From: Fraser Graham Date: Sat, 26 Apr 2014 13:59:32 -0600 Subject: [PATCH] chaneg the player interface to be more consistent with the JS version --- client.go | 10 +++++++--- player.go | 31 +++++++++++++++---------------- 2 files changed, 22 insertions(+), 19 deletions(-) diff --git a/client.go b/client.go index e63401f..07449bc 100644 --- a/client.go +++ b/client.go @@ -163,10 +163,14 @@ func (c *Client) Play() error { if err != nil { return errors.New(fmt.Sprintf("%s: Connection likely lost: %s", c.Name, err)) } - c.Player.Recv(&c.boardstate) - instruction := c.Player.Instruction() - err = c.enc.Encode(instruction) + instructions := make(map[string]server.Instruction) + + for _,bot := range(c.boardstate.MyRobots){ + instructions[bot.Id] = c.Player.Update(&bot, &c.boardstate) + } + + err = c.enc.Encode(instructions) if err != nil { return err } diff --git a/player.go b/player.go index 8c80d22..f06580d 100644 --- a/player.go +++ b/player.go @@ -15,8 +15,7 @@ import ( // The general case will be to implement a Player type that contains the magic // required to slay other robots quickly while staying alive for a long time. type Player interface { - Recv(bs *server.Boardstate) - Instruction() map[string]server.Instruction + Update(bot *server.Robot, bs *server.Boardstate) server.Instruction } // SimplePlayer is our default player and stands as a starting point for your @@ -45,16 +44,28 @@ func NewSimplePlayer(width, height float32) *SimplePlayer { } // Recv is our implementation of receiving a server.Boardstate from the server -func (p *SimplePlayer) Recv(bs *server.Boardstate) { +func (p *SimplePlayer) Update(bot *server.Robot, bs *server.Boardstate) server.Instruction{ + instruction := server.Instruction{ + MoveTo: nil, + TargetSpeed: nil, + FireAt: nil, + } + p.speed = p.maxSpeed if len(bs.MyRobots) > 0 { p.me = bs.MyRobots[0] } else { - return + return instruction } p.recon(bs) p.navigate() + + return server.Instruction{ + MoveTo: p.moveto, + TargetSpeed: &p.speed, + FireAt: p.fireat, + } } func (p *SimplePlayer) navigate() { @@ -107,18 +118,6 @@ func (p *SimplePlayer) recon(bs *server.Boardstate) { } } -// Instruction is our default implementation of preparing a map of information -// to be sent to server. -func (p *SimplePlayer) Instruction() map[string]server.Instruction { - return map[string]server.Instruction{ - p.me.Id: { - MoveTo: p.moveto, - TargetSpeed: &p.speed, - FireAt: p.fireat, - }, - } -} - func (p *SimplePlayer) randomDirection() *vector.Point2d { pt := vector.Vector2d{ X: rand.Float32() * p.width,