Update to new protocol (Update)
This commit is contained in:
parent
d3e7a247c8
commit
14297191ed
10
client.go
10
client.go
@ -31,7 +31,7 @@ type Client struct {
|
|||||||
Player Player
|
Player Player
|
||||||
Game server.GameParam
|
Game server.GameParam
|
||||||
|
|
||||||
boardstate server.Boardstate
|
boardstate *server.Boardstate
|
||||||
enc encoder
|
enc encoder
|
||||||
dec decoder
|
dec decoder
|
||||||
ws *websocket.Conn
|
ws *websocket.Conn
|
||||||
@ -164,16 +164,14 @@ func (c *Client) Negociate(clientType string) (err error) {
|
|||||||
func (c *Client) Play() error {
|
func (c *Client) Play() error {
|
||||||
log.Printf("%s: starting loop", c.Name)
|
log.Printf("%s: starting loop", c.Name)
|
||||||
|
|
||||||
|
bs := &server.Boardstate{}
|
||||||
var err error
|
var err error
|
||||||
for {
|
for {
|
||||||
err = c.dec.Decode(&c.boardstate)
|
err = c.dec.Decode(bs)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.New(fmt.Sprintf("%s: Connection likely lost: %s", c.Name, err))
|
return errors.New(fmt.Sprintf("%s: Connection likely lost: %s", c.Name, err))
|
||||||
}
|
}
|
||||||
c.Player.Recv(&c.boardstate)
|
err = c.enc.Encode(c.Player.Update(bs))
|
||||||
|
|
||||||
instruction := c.Player.Instruction()
|
|
||||||
err = c.enc.Encode(instruction)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
39
player.go
39
player.go
@ -14,8 +14,7 @@ import (
|
|||||||
// The general case will be to implement a Player type that contains the magic
|
// 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.
|
// required to slay other robots quickly while staying alive for a long time.
|
||||||
type Player interface {
|
type Player interface {
|
||||||
Recv(bs *server.Boardstate)
|
Update(bs *server.Boardstate) map[string]server.Instruction
|
||||||
Instruction() map[string]server.Instruction
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// SimplePlayer is our default player and stands as a starting point for your
|
// SimplePlayer is our default player and stands as a starting point for your
|
||||||
@ -43,17 +42,32 @@ func NewSimplePlayer(width, height float64) *SimplePlayer {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Recv is our implementation of receiving a server.Boardstate from the server
|
// Update is our implementation of recieving and processing a server.Boardstate
|
||||||
func (p *SimplePlayer) Recv(bs *server.Boardstate) {
|
// from the server
|
||||||
p.speed = p.maxSpeed
|
func (p *SimplePlayer) Update(bs *server.Boardstate) map[string]server.Instruction {
|
||||||
if len(bs.MyRobots) > 0 {
|
instructions := make(map[string]server.Instruction)
|
||||||
p.me = bs.MyRobots[0]
|
|
||||||
} else {
|
for _, bot := range bs.MyRobots {
|
||||||
return
|
p.me = bot
|
||||||
|
p.speed = 1000
|
||||||
|
if p.me.Health <= 0 {
|
||||||
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
p.recon(bs)
|
p.recon(bs)
|
||||||
p.navigate()
|
p.navigate()
|
||||||
|
|
||||||
|
probe_point := p.me.Position.Add(p.me.Heading.Scale(p.safeDistance))
|
||||||
|
|
||||||
|
instructions[bot.Id] = server.Instruction{
|
||||||
|
MoveTo: p.moveto,
|
||||||
|
TargetSpeed: &p.speed,
|
||||||
|
FireAt: p.fireat,
|
||||||
|
Probe: &probe_point,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return instructions
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *SimplePlayer) navigate() {
|
func (p *SimplePlayer) navigate() {
|
||||||
@ -81,12 +95,7 @@ func (p *SimplePlayer) navigate() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (p *SimplePlayer) recon(bs *server.Boardstate) {
|
func (p *SimplePlayer) recon(bs *server.Boardstate) {
|
||||||
for _, o := range bs.Objects {
|
// XXX: need to keep track of seen objects ..
|
||||||
obj := MiniObstacle(o)
|
|
||||||
if _, ok := p.knownObstacles[obj.Id()]; !ok {
|
|
||||||
p.knownObstacles[obj.Id()] = obj.ToObstacle()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// simplest shooting strategy ... need to do the following:
|
// simplest shooting strategy ... need to do the following:
|
||||||
// not shoot through buildings
|
// not shoot through buildings
|
||||||
|
Loading…
Reference in New Issue
Block a user