-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtypes.go
75 lines (65 loc) · 988 Bytes
/
types.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
package main
type Result int64
const (
WON Result = iota
LOST
TIE
)
func (s Result) String() string {
switch s {
case WON:
return "won"
case LOST:
return "lost"
case TIE:
return "tie"
}
return "unknown"
}
type Take int64
const (
ROCK Take = iota
PAPER
SCISSORS
)
func (t Take) String() string {
switch t {
case ROCK:
return "rock"
case PAPER:
return "paper"
case SCISSORS:
return "scissors"
}
return "unknown"
}
var outcomeMap = map[Take]map[Take]Result{
ROCK: {
PAPER: LOST,
SCISSORS: WON,
},
PAPER: {
ROCK: WON,
SCISSORS: LOST,
},
SCISSORS: {
ROCK: LOST,
PAPER: WON,
},
}
func (t Take) Match(o Take) Result {
if t == o {
return TIE
} else {
return outcomeMap[t][o]
}
}
type GameRequest struct {
UserTake Take `json:"take"`
}
type GameResponse struct {
RobotTake Take `json:"robotTake"`
RobotResult Result `json:"robotResult"`
UserTake Take `json:"userTake"`
UserResult Result `json:"userResult"`
}