added startGame side band
This commit is contained in:
parent
aaaff34448
commit
a1470c102a
8
game.go
8
game.go
@ -12,7 +12,7 @@ type game struct {
|
|||||||
splosions map[*splosion]bool
|
splosions map[*splosion]bool
|
||||||
register chan *player
|
register chan *player
|
||||||
unregister chan *player
|
unregister chan *player
|
||||||
id chan int
|
robot_id chan int
|
||||||
turn int
|
turn int
|
||||||
spectators map[*Spectator]bool
|
spectators map[*Spectator]bool
|
||||||
sregister chan *Spectator
|
sregister chan *Spectator
|
||||||
@ -59,10 +59,10 @@ func NewBoardstate(id int) *boardstate {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (g *game) run() {
|
func (g *game) run() {
|
||||||
g.id = make(chan int)
|
g.robot_id = make(chan int)
|
||||||
go func() {
|
go func() {
|
||||||
for i := 0; ; i++ {
|
for i := 0; ; i++ {
|
||||||
g.id <- i
|
g.robot_id <- i
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
@ -120,6 +120,8 @@ func (g *game) run() {
|
|||||||
for p := range g.players {
|
for p := range g.players {
|
||||||
if p.Robot.Health > 0 {
|
if p.Robot.Health > 0 {
|
||||||
log.Printf("Robot %v Wins", p.Robot.Id)
|
log.Printf("Robot %v Wins", p.Robot.Id)
|
||||||
|
log.Printf("game over: %+v", g)
|
||||||
|
return
|
||||||
}
|
}
|
||||||
p.reset()
|
p.reset()
|
||||||
}
|
}
|
||||||
|
12
http.go
Normal file
12
http.go
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"net/http"
|
||||||
|
)
|
||||||
|
|
||||||
|
type JsonHandler func(http.ResponseWriter, *http.Request)
|
||||||
|
|
||||||
|
func (h JsonHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) {
|
||||||
|
w.Header().Set("Content-Type", "application/json")
|
||||||
|
h(w, req)
|
||||||
|
}
|
23
main.go
23
main.go
@ -21,16 +21,21 @@ var height = flag.Float64("height", 550, "height of field")
|
|||||||
var delta float64
|
var delta float64
|
||||||
var g *game
|
var g *game
|
||||||
|
|
||||||
|
var games map[string]*game
|
||||||
|
var idg *IdGenerator
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
rand.Seed(time.Now().UnixNano())
|
rand.Seed(time.Now().UnixNano())
|
||||||
flag.Parse()
|
flag.Parse()
|
||||||
|
|
||||||
|
games = make(map[string]*game)
|
||||||
|
idg = NewIdGenerator()
|
||||||
|
|
||||||
delta = float64(*tick) / 1000
|
delta = float64(*tick) / 1000
|
||||||
|
|
||||||
http.Handle("/ws/", websocket.Handler(addPlayer))
|
http.Handle("/ws/", websocket.Handler(addPlayer))
|
||||||
|
http.Handle("/game/start/", JsonHandler(startGame))
|
||||||
g = NewGame()
|
// http.Handle("/game/stop/", stopGame)
|
||||||
go g.run()
|
|
||||||
|
|
||||||
err := http.ListenAndServe(*addr, nil)
|
err := http.ListenAndServe(*addr, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -38,8 +43,18 @@ func main() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func startGame(w http.ResponseWriter, req *http.Request) {
|
||||||
|
new_game_name := idg.Hash()
|
||||||
|
|
||||||
|
_g := NewGame()
|
||||||
|
go _g.run()
|
||||||
|
|
||||||
|
games[new_game_name] = _g
|
||||||
|
w.Write([]byte(fmt.Sprintf(`{"id": "%s"}`, new_game_name)))
|
||||||
|
}
|
||||||
|
|
||||||
func addPlayer(ws *websocket.Conn) {
|
func addPlayer(ws *websocket.Conn) {
|
||||||
id := fmt.Sprintf("robot%d", <-g.id)
|
id := fmt.Sprintf("robot%d", <-g.robot_id)
|
||||||
|
|
||||||
conf, err := Negociate(ws, id, *width, *height)
|
conf, err := Negociate(ws, id, *width, *height)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
Loading…
Reference in New Issue
Block a user