refactor for bot

This commit is contained in:
sm
2013-09-03 23:26:40 -07:00
parent 835303c53d
commit b495b16065
7 changed files with 121 additions and 249 deletions
+16 -32
View File
@@ -1,6 +1,7 @@
package main
import (
"bitbucket.org/hackerbots/bot"
"log"
"sort"
"time"
@@ -9,8 +10,8 @@ import (
type game struct {
id string
players map[*player]bool
projectiles map[*projectile]bool
splosions map[*splosion]bool
projectiles map[*bot.Projectile]bool
splosions map[*bot.Splosion]bool
register chan *player
unregister chan *player
robot_id chan int
@@ -27,8 +28,8 @@ func NewGame(id string, width, height float64) *game {
id: id,
register: make(chan *player),
unregister: make(chan *player),
projectiles: make(map[*projectile]bool),
splosions: make(map[*splosion]bool),
projectiles: make(map[*bot.Projectile]bool),
splosions: make(map[*bot.Splosion]bool),
players: make(map[*player]bool),
turn: 0,
width: width,
@@ -40,29 +41,6 @@ func NewGame(id string, width, height float64) *game {
}
}
type Config struct {
ID string `json:"id"`
Stats stats `json:"stats"`
}
type boardstate struct {
Robots []robot `json:"robots"`
Projectiles []projectile `json:"projectiles"`
Splosions []splosion `json:"splosions"`
Reset bool `json:"reset"`
Type string `json:"type"`
Turn int `json:"turn"`
}
func NewBoardstate(id int) *boardstate {
return &boardstate{
Robots: []robot{},
Projectiles: []projectile{},
Type: "boardstate",
Turn: id,
}
}
func (g *game) run() {
g.robot_id = make(chan int)
go func() {
@@ -88,13 +66,15 @@ func (g *game) run() {
case <-time.Tick(time.Duration(*tick) * time.Millisecond):
g.turn++
t0 := time.Now()
if *verbose {
log.Printf("\033[2JTurn: %v", g.turn)
log.Printf("Players: %v", len(g.players))
log.Printf("Projectiles: %v", len(g.projectiles))
log.Printf("Explosions: %v", len(g.splosions))
}
payload := NewBoardstate(g.turn)
payload := bot.NewBoardstate(g.turn)
robots_remaining := 0
@@ -103,21 +83,25 @@ func (g *game) run() {
robots_remaining++
p.scan()
p.nudge()
// XXX: change to pointer, check for pointer as (0, 0) is valid target
if p.Robot.FireAt.X != 0 && p.Robot.FireAt.Y != 0 {
p.fire()
proj := p.fire()
if proj != nil {
g.projectiles[proj] = true
}
}
}
payload.Robots = append(payload.Robots, p.Robot)
}
sort.Sort(robotSorter{payload.Robots})
sort.Sort(bot.RobotSorter{payload.Robots})
for p := range g.projectiles {
p.nudge()
// XXX: p.nudge()
payload.Projectiles = append(payload.Projectiles, *p)
}
for s := range g.splosions {
s.tick()
// XXX: s.tick()
payload.Splosions = append(payload.Splosions, *s)
}