chaneg the player interface to be more consistent with the JS version
This commit is contained in:
parent
2d8b878f50
commit
a2436fe8d8
10
client.go
10
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
|
||||
}
|
||||
|
31
player.go
31
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,
|
||||
|
Loading…
Reference in New Issue
Block a user