initial commit

This commit is contained in:
Daniel Noulet 2026-10-07 15:16:00 +02:00
commit ac9aa86d33
14 changed files with 1021 additions and 0 deletions

111
internal/game/cards.go Normal file
View 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]
}