Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: initial checkin of play card functionality #19

Merged
merged 5 commits into from
Jan 23, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions cmd/api/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,7 @@ func main() {
router.PUT("/api/v1/game/:gameId/call", auth.EnsureValidTokenGin([]string{auth.WriteGame}), gameHandler.Call)
router.PUT("/api/v1/game/:gameId/suit", auth.EnsureValidTokenGin([]string{auth.WriteGame}), gameHandler.SelectSuit)
router.PUT("/api/v1/game/:gameId/buy", auth.EnsureValidTokenGin([]string{auth.WriteGame}), gameHandler.Buy)
router.PUT("/api/v1/game/:gameId/play", auth.EnsureValidTokenGin([]string{auth.WriteGame}), gameHandler.Play)
router.GET("/api/v1/game/all", auth.EnsureValidTokenGin([]string{auth.ReadGame}), gameHandler.GetAll)
router.PUT("/api/v1/game", auth.EnsureValidTokenGin([]string{auth.WriteAdmin}), gameHandler.Create)
router.DELETE("/api/v1/game/:gameId", auth.EnsureValidTokenGin([]string{auth.WriteAdmin}), gameHandler.Delete)
Expand Down
246 changes: 241 additions & 5 deletions pkg/game/deck-utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,19 +16,29 @@ func ShuffleCards(cards []CardName) []CardName {
return shuffled
}

func DealCards(deck []CardName, numPlayers int) ([]CardName, [][]CardName, error) {
hands := make([][]CardName, numPlayers+1)
// DealCards deals the cards to the players and returns the remaining cards
// and the dummy hand.
func DealCards(deck []CardName, numPlayers int) ([]CardName, []CardName, [][]CardName, error) {
if numPlayers < 2 || numPlayers > 6 {
return nil, nil, nil, fmt.Errorf("invalid number of players")
}
dummy := make([]CardName, 5)
hands := make([][]CardName, numPlayers)
// Deal the cards
for i := 0; i < 5; i++ {
for j := 0; j < numPlayers+1; j++ {
if len(deck) == 0 {
return nil, nil, fmt.Errorf("deck is empty")
return nil, nil, nil, fmt.Errorf("deck is empty")
}
if j == numPlayers {
dummy[i] = deck[0]
} else {
hands[j] = append(hands[j], deck[0])
}
hands[j] = append(hands[j], deck[0])
deck = deck[1:]
}
}
return deck, hands, nil
return deck, dummy, hands, nil
}

func BuyCards(deck []CardName, cards []CardName) ([]CardName, []CardName, error) {
Expand Down Expand Up @@ -103,3 +113,229 @@ func NewDeck() []CardName {
JOKER,
}
}

func ParseCardName(s string) (CardName, error) {
switch s {
case "TWO_HEARTS":
return TWO_HEARTS, nil
case "THREE_HEARTS":
return THREE_HEARTS, nil
case "FOUR_HEARTS":
return FOUR_HEARTS, nil
case "SIX_HEARTS":
return SIX_HEARTS, nil
case "SEVEN_HEARTS":
return SEVEN_HEARTS, nil
case "EIGHT_HEARTS":
return EIGHT_HEARTS, nil
case "NINE_HEARTS":
return NINE_HEARTS, nil
case "TEN_HEARTS":
return TEN_HEARTS, nil
case "QUEEN_HEARTS":
return QUEEN_HEARTS, nil
case "KING_HEARTS":
return KING_HEARTS, nil
case "ACE_HEARTS":
return ACE_HEARTS, nil
case "JACK_HEARTS":
return JACK_HEARTS, nil
case "FIVE_HEARTS":
return FIVE_HEARTS, nil
case "TWO_DIAMONDS":
return TWO_DIAMONDS, nil
case "THREE_DIAMONDS":
return THREE_DIAMONDS, nil
case "FOUR_DIAMONDS":
return FOUR_DIAMONDS, nil
case "SIX_DIAMONDS":
return SIX_DIAMONDS, nil
case "SEVEN_DIAMONDS":
return SEVEN_DIAMONDS, nil
case "EIGHT_DIAMONDS":
return EIGHT_DIAMONDS, nil
case "NINE_DIAMONDS":
return NINE_DIAMONDS, nil
case "TEN_DIAMONDS":
return TEN_DIAMONDS, nil
case "QUEEN_DIAMONDS":
return QUEEN_DIAMONDS, nil
case "KING_DIAMONDS":
return KING_DIAMONDS, nil
case "ACE_DIAMONDS":
return ACE_DIAMONDS, nil
case "JACK_DIAMONDS":
return JACK_DIAMONDS, nil
case "FIVE_DIAMONDS":
return FIVE_DIAMONDS, nil
case "TEN_CLUBS":
return TEN_CLUBS, nil
case "NINE_CLUBS":
return NINE_CLUBS, nil
case "EIGHT_CLUBS":
return EIGHT_CLUBS, nil
case "SEVEN_CLUBS":
return SEVEN_CLUBS, nil
case "SIX_CLUBS":
return SIX_CLUBS, nil
case "FOUR_CLUBS":
return FOUR_CLUBS, nil
case "THREE_CLUBS":
return THREE_CLUBS, nil
case "TWO_CLUBS":
return TWO_CLUBS, nil
case "QUEEN_CLUBS":
return QUEEN_CLUBS, nil
case "KING_CLUBS":
return KING_CLUBS, nil
case "ACE_CLUBS":
return ACE_CLUBS, nil
case "JACK_CLUBS":
return JACK_CLUBS, nil
case "FIVE_CLUBS":
return FIVE_CLUBS, nil
case "TEN_SPADES":
return TEN_SPADES, nil
case "NINE_SPADES":
return NINE_SPADES, nil
case "EIGHT_SPADES":
return EIGHT_SPADES, nil
case "SEVEN_SPADES":
return SEVEN_SPADES, nil
case "SIX_SPADES":
return SIX_SPADES, nil
case "FOUR_SPADES":
return FOUR_SPADES, nil
case "THREE_SPADES":
return THREE_SPADES, nil
case "TWO_SPADES":
return TWO_SPADES, nil
case "QUEEN_SPADES":
return QUEEN_SPADES, nil
case "KING_SPADES":
return KING_SPADES, nil
case "ACE_SPADES":
return ACE_SPADES, nil
case "JACK_SPADES":
return JACK_SPADES, nil
case "FIVE_SPADES":
return FIVE_SPADES, nil
case "JOKER":
return JOKER, nil
default:
return EMPTY_CARD, fmt.Errorf("invalid card name")
}
}

func ParseCard(c CardName) Card {
switch c {
case TWO_HEARTS:
return TwoHearts
case THREE_HEARTS:
return ThreeHearts
case FOUR_HEARTS:
return FourHearts
case FIVE_HEARTS:
return FiveHearts
case SIX_HEARTS:
return SixHearts
case SEVEN_HEARTS:
return SevenHearts
case EIGHT_HEARTS:
return EightHearts
case NINE_HEARTS:
return NineHearts
case TEN_HEARTS:
return TenHearts
case JACK_HEARTS:
return JackHearts
case QUEEN_HEARTS:
return QueenHearts
case KING_HEARTS:
return KingHearts
case ACE_HEARTS:
return AceHearts
case TWO_DIAMONDS:
return TwoDiamonds
case THREE_DIAMONDS:
return ThreeDiamonds
case FOUR_DIAMONDS:
return FourDiamonds
case FIVE_DIAMONDS:
return FiveDiamonds
case SIX_DIAMONDS:
return SixDiamonds
case SEVEN_DIAMONDS:
return SevenDiamonds
case EIGHT_DIAMONDS:
return EightDiamonds
case NINE_DIAMONDS:
return NineDiamonds
case TEN_DIAMONDS:
return TenDiamonds
case JACK_DIAMONDS:
return JackDiamonds
case QUEEN_DIAMONDS:
return QueenDiamonds
case KING_DIAMONDS:
return KingDiamonds
case ACE_DIAMONDS:
return AceDiamonds
case TWO_CLUBS:
return TwoClubs
case THREE_CLUBS:
return ThreeClubs
case FOUR_CLUBS:
return FourClubs
case FIVE_CLUBS:
return FiveClubs
case SIX_CLUBS:
return SixClubs
case SEVEN_CLUBS:
return SevenClubs
case EIGHT_CLUBS:
return EightClubs
case NINE_CLUBS:
return NineClubs
case TEN_CLUBS:
return TenClubs
case JACK_CLUBS:
return JackClubs
case QUEEN_CLUBS:
return QueenClubs
case KING_CLUBS:
return KingClubs
case ACE_CLUBS:
return AceClubs
case TWO_SPADES:
return TwoSpades
case THREE_SPADES:
return ThreeSpades
case FOUR_SPADES:
return FourSpades
case FIVE_SPADES:
return FiveSpades
case SIX_SPADES:
return SixSpades
case SEVEN_SPADES:
return SevenSpades
case EIGHT_SPADES:
return EightSpades
case NINE_SPADES:
return NineSpades
case TEN_SPADES:
return TenSpades
case JACK_SPADES:
return JackSpades
case QUEEN_SPADES:
return QueenSpades
case KING_SPADES:
return KingSpades
case ACE_SPADES:
return AceSpades
case JOKER:
return Joker
default:
return EmptyCard
}
}
Loading
Loading