initial commit
This commit is contained in:
commit
ac9aa86d33
14 changed files with 1021 additions and 0 deletions
111
internal/game/cards.go
Normal file
111
internal/game/cards.go
Normal file
|
|
@ -0,0 +1,111 @@
|
|||
package game
|
||||
|
||||
import "math/rand"
|
||||
|
||||
type Rank int
|
||||
|
||||
const (
|
||||
RankAce Rank = iota
|
||||
Rank2
|
||||
Rank3
|
||||
Rank4
|
||||
Rank5
|
||||
Rank6
|
||||
Rank7
|
||||
Rank8
|
||||
Rank9
|
||||
Rank10
|
||||
RankJack
|
||||
RankQueen
|
||||
RankKing
|
||||
)
|
||||
|
||||
func (r Rank) String() string {
|
||||
switch r {
|
||||
case RankAce:
|
||||
return "A"
|
||||
case Rank2:
|
||||
return "2"
|
||||
case Rank3:
|
||||
return "3"
|
||||
case Rank4:
|
||||
return "4"
|
||||
case Rank5:
|
||||
return "5"
|
||||
case Rank6:
|
||||
return "6"
|
||||
case Rank7:
|
||||
return "7"
|
||||
case Rank8:
|
||||
return "8"
|
||||
case Rank9:
|
||||
return "9"
|
||||
case Rank10:
|
||||
return "10"
|
||||
case RankJack:
|
||||
return "J"
|
||||
case RankQueen:
|
||||
return "Q"
|
||||
case RankKing:
|
||||
return "K"
|
||||
}
|
||||
return "?"
|
||||
}
|
||||
|
||||
type Suit int
|
||||
|
||||
const (
|
||||
SuitClubs Suit = iota
|
||||
SuitDiamonds
|
||||
SuitHearts
|
||||
SuitSpades
|
||||
)
|
||||
|
||||
func (s Suit) String() string {
|
||||
switch s {
|
||||
case SuitClubs:
|
||||
return "♣"
|
||||
case SuitDiamonds:
|
||||
return "♦"
|
||||
case SuitHearts:
|
||||
return "♥"
|
||||
case SuitSpades:
|
||||
return "♠"
|
||||
}
|
||||
return "?"
|
||||
}
|
||||
|
||||
type Card struct {
|
||||
Rank Rank
|
||||
Suit Suit
|
||||
}
|
||||
|
||||
func NewDeck() []Card {
|
||||
var deck []Card
|
||||
for suit := SuitClubs; suit <= SuitSpades; suit++ {
|
||||
for rank := RankAce; rank <= RankKing; rank++ {
|
||||
deck = append(deck, Card{Rank: rank, Suit: suit})
|
||||
}
|
||||
}
|
||||
return deck
|
||||
}
|
||||
|
||||
func Shuffle(deck []Card) []Card {
|
||||
result := make([]Card, len(deck))
|
||||
copy(result, deck)
|
||||
for i := len(result) - 1; i > 0; i-- {
|
||||
j := rand.Intn(i + 1)
|
||||
result[i], result[j] = result[j], result[i]
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
var faceCards = map[Rank]bool{
|
||||
RankJack: true,
|
||||
RankQueen: true,
|
||||
RankKing: true,
|
||||
}
|
||||
|
||||
func IsFaceCard(r Rank) bool {
|
||||
return faceCards[r]
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue