You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
87 lines
1.5 KiB
87 lines
1.5 KiB
package main |
|
|
|
import ( |
|
"fmt" |
|
|
|
"strings" |
|
|
|
"gitlab.com/tslocum/joker" |
|
) |
|
|
|
// Game phases |
|
const ( |
|
PhaseEnd = -1 |
|
PhaseSetup = 0 |
|
PhasePick = 1 |
|
PhasePeg = 2 |
|
PhaseScore = 3 |
|
) |
|
|
|
type playerCard struct { |
|
joker.Card |
|
Player int |
|
} |
|
|
|
func (c playerCard) String() string { |
|
return fmt.Sprintf("{%d}%s", c.Player, c.Card) |
|
} |
|
|
|
type playerCards []playerCard |
|
|
|
func (c playerCards) String() string { |
|
var s strings.Builder |
|
for i := range c { |
|
if i > 0 { |
|
s.WriteRune(',') |
|
} |
|
s.WriteString(c[i].String()) |
|
} |
|
return s.String() |
|
} |
|
|
|
func (c playerCards) Len() int { |
|
return len(c) |
|
} |
|
|
|
func (c playerCards) Less(i, j int) bool { |
|
return c[i].Value() < c[j].Value() |
|
} |
|
|
|
func (c playerCards) Swap(i, j int) { |
|
c[i], c[j] = c[j], c[i] |
|
} |
|
|
|
func (c playerCards) Cards() joker.Cards { |
|
var cards = make(joker.Cards, len(c)) |
|
for i, card := range c { |
|
cards[i] = card.Card |
|
} |
|
return cards |
|
} |
|
|
|
func (c playerCards) PlayerCards(player int) int { |
|
var i int |
|
for _, card := range c { |
|
if card.Player == player { |
|
i++ |
|
} |
|
} |
|
return i |
|
} |
|
|
|
type gameState struct { |
|
Phase int `json:"phase"` |
|
Player int `json:"player"` |
|
Dealer int `json:"dealer"` |
|
Turn int `json:"turn"` |
|
Starter joker.Card `json:"starter"` |
|
|
|
Hand1 joker.Cards `json:"hand1"` |
|
Hand2 joker.Cards `json:"hand2"` |
|
Crib joker.Cards `json:"crib"` |
|
Score1 int `json:"score1"` |
|
Score2 int `json:"score2"` |
|
|
|
ThrowPile playerCards `json:"throwpile"` |
|
Status string `json:"status"` |
|
}
|
|
|