-
Notifications
You must be signed in to change notification settings - Fork 0
/
play.go
81 lines (73 loc) · 2.19 KB
/
play.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
package handlers
import (
"encoding/json"
"net/http"
"github.com/redestro/zeronet/server/pkg/handlers/helpers"
"github.com/redestro/zeronet/server/pkg/sessions"
"github.com/redestro/zeronet/server/pkg/players"
)
// PlayResponse object for sending move responses
type PlayResponse struct {
Move int `json:"move"`
Symbol string `json:"symbol`
Board [9]string `json:"board"`
RecoMove int `json:"recoMove"`
RecoSymbol string `json:"recoSymbol`
}
// PlayHuman handler for returning moves from human
func PlayHuman(w http.ResponseWriter, r *http.Request) {
db := sessions.GetDB()
token := r.Context().Value("token").(string)
session, ok := db.Store[token]
if ok == false {
panic("Session error")
}
playerPos := helpers.ConvertStringToInt(r.PostFormValue("player"))
var player, alterPlayer *players.Player
if playerPos == 1 {
player = session.Player2 // If we receive response from player1 then player2 should play
alterPlayer = session.Player1
} else if playerPos == 2 {
player = session.Player1 // If we receive response from player2 then player1 should play
alterPlayer = session.Player2
} else {
panic("Invalid player")
}
replyMove, replySymbol := player.Play(session.Board)
if session.Player1.Kind != "Human" || session.Player2.Kind != "Human" {
session.Update(replyMove, replySymbol)
}
recoMove, recoSymbol := alterPlayer.Play(session.Board)
reponse := PlayResponse{
replyMove,
replySymbol,
session.Board,
recoMove,
recoSymbol,
}
res, _ := json.Marshal(reponse)
w.Write([]byte(res))
}
// PlayAI handler for returning first move from AI
func PlayAI(w http.ResponseWriter, r *http.Request) {
db := sessions.GetDB()
token := r.Context().Value("token").(string)
session, ok := db.Store[token]
if ok == false {
panic("Session error")
}
player := session.Player1 // AI will always be first player in this case
alterPlayer := session.Player2
replyMove, replySymbol := player.Play(session.Board)
session.Update(replyMove, replySymbol)
recoMove, recoSymbol := alterPlayer.Play(session.Board)
reponse := PlayResponse{
replyMove,
replySymbol,
session.Board,
recoMove,
recoSymbol,
}
res, _ := json.Marshal(reponse)
w.Write([]byte(res))
}