88 lines
1.8 KiB
Go
88 lines
1.8 KiB
Go
package main
|
|
|
|
import (
|
|
"math/rand"
|
|
"strconv"
|
|
)
|
|
|
|
func GetDefaultDeck() []Card {
|
|
cards := make([]Card, 0)
|
|
for _, color := range []string{"GREEN", "BLUE", "RED", "YELLOW"} {
|
|
for i := 0; i < 10; i++ {
|
|
cards = append(cards, Card{
|
|
color, strconv.Itoa(i),
|
|
})
|
|
}
|
|
cards = append(cards, Card{
|
|
color, "RETURN",
|
|
})
|
|
cards = append(cards, Card{
|
|
color, "BLOCK",
|
|
})
|
|
cards = append(cards, Card{
|
|
color, "DRAW2",
|
|
})
|
|
}
|
|
cards = append(cards, Card{
|
|
"BLACK", "CHOOSE",
|
|
})
|
|
cards = append(cards, Card{
|
|
"BLACK", "DRAW4",
|
|
})
|
|
return cards
|
|
}
|
|
|
|
func GetGame(id string) *Game {
|
|
return games[id]
|
|
}
|
|
|
|
func GetRandomCard(cards []Card) *Card {
|
|
index := rand.Intn(len(cards))
|
|
return &cards[index]
|
|
}
|
|
|
|
func FindCard(cards []Card, color string, value string) (*Card, bool) {
|
|
for _, card := range cards {
|
|
if card.Color == color && card.Value == value {
|
|
return &card, true
|
|
}
|
|
}
|
|
return nil, false
|
|
}
|
|
|
|
func FindOnHand(player *Player, card *Card) int {
|
|
for index, handCard := range player.Hand {
|
|
if handCard.Color == card.Color && handCard.Value == card.Value {
|
|
return index
|
|
}
|
|
}
|
|
return -1
|
|
}
|
|
|
|
func RemoveFromHand(player *Player, index int) []*Card {
|
|
player.Hand[len(player.Hand)-1], player.Hand[index] = player.Hand[index], player.Hand[len(player.Hand)-1]
|
|
return player.Hand[:len(player.Hand)-1]
|
|
}
|
|
|
|
func InitPlayer(game *Game, player *Player) {
|
|
player.Game = game
|
|
for i := 0; i < 10; i++ {
|
|
player.Hand = append(player.Hand, GetRandomCard(game.AvailableCards))
|
|
}
|
|
}
|
|
|
|
func DrawNextPlayer(game *Game, count int) {
|
|
nextPlayer := game.GetNextPlayer()
|
|
for i := 0; i < count; i++ {
|
|
nextPlayer.Hand = append(nextPlayer.Hand, GetRandomCard(game.AvailableCards))
|
|
}
|
|
|
|
game.send("card.drawn", map[string]interface{}{
|
|
"playerID": nextPlayer.ID,
|
|
"count": count,
|
|
})
|
|
nextPlayer.send("player.hand", map[string]interface{}{
|
|
"cards": nextPlayer.Hand,
|
|
})
|
|
}
|