From 01b49c364c3e05f739bfdb76a8f187328da9c951 Mon Sep 17 00:00:00 2001 From: Dominic Masters Date: Tue, 12 Oct 2021 08:43:22 -0700 Subject: [PATCH] Added set dealer method. --- src/poker/actions/blinds.c | 1 - src/poker/actions/flop.c | 2 -- src/poker/actions/match.c | 33 --------------------- src/poker/actions/match.h | 21 ------------- src/poker/poker.c | 10 +++++-- src/poker/poker.h | 9 ++++++ test/poker/poker.c | 61 ++++++++++++++++++++++++++++++++++---- 7 files changed, 72 insertions(+), 65 deletions(-) delete mode 100644 src/poker/actions/match.c delete mode 100644 src/poker/actions/match.h diff --git a/src/poker/actions/blinds.c b/src/poker/actions/blinds.c index 74f2c488..dd0e6d25 100644 --- a/src/poker/actions/blinds.c +++ b/src/poker/actions/blinds.c @@ -17,7 +17,6 @@ void _pokerActionBlindsOnStart(queue_t *queue,queueaction_t *action,uint8_t i) { queueNext(queue); } - queueaction_t * pokerActionBlindsAdd(queue_t *queue, poker_t *poker) { queueaction_t *action; action = queueAdd(queue); diff --git a/src/poker/actions/flop.c b/src/poker/actions/flop.c index 78d77c2f..9592aee3 100644 --- a/src/poker/actions/flop.c +++ b/src/poker/actions/flop.c @@ -11,8 +11,6 @@ void _pokerActionFlopDo(queue_t *queue, queueaction_t *action, uint8_t count) { poker_t *poker; poker = (poker_t *)action->data; - // TODO: Fix State - // poker->state = POKER_STATE_CARDS_FLOPPING; pokerBurn(poker, POKER_FLOP_BURN_COUNT); pokerTurn(poker, count); diff --git a/src/poker/actions/match.c b/src/poker/actions/match.c deleted file mode 100644 index fe263b1d..00000000 --- a/src/poker/actions/match.c +++ /dev/null @@ -1,33 +0,0 @@ -/** - * Copyright (c) 2021 Dominic Masters - * - * This software is released under the MIT License. - * https://opensource.org/licenses/MIT - */ - -#include "match.h" - -void _pokerActionMatchOnStart(queue_t *queue, queueaction_t *action, uint8_t i){ - poker_t *poker; - uint8_t x; - - poker = (poker_t *)action->data; - - // TODO: Fix state - // poker->state = POKER_STATE_STARTING_MATCH; - - // Reset the main game state. This will also init the round. - pokerInit(&poker); - - //TODO: Add Players here - - queueNext(queue); -} - -queueaction_t * pokerActionMatchAdd(queue_t *queue, poker_t *poker) { - queueaction_t *action; - action = queueAdd(queue); - action->data = (void *)poker; - action->onStart = &_pokerActionMatchOnStart; - return action; -} \ No newline at end of file diff --git a/src/poker/actions/match.h b/src/poker/actions/match.h deleted file mode 100644 index 6767226b..00000000 --- a/src/poker/actions/match.h +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright (c) 2021 Dominic Masters -// -// This software is released under the MIT License. -// https://opensource.org/licenses/MIT - -#pragma once -#include "../../libs.h" -#include "../../display/animation/queue.h" -#include "../poker.h" - -/** Callback for when the poker match aciton starts */ -void _pokerActionMatchOnStart(queue_t *queue, queueaction_t *action, uint8_t i); - -/** - * Adds a Poker Match Begin Action onto a queue. - * - * @param queue Queue to add to - * @param poker Poker game instance to use. - * @return The queued match start action. - */ -queueaction_t * pokerActionMatchAdd(queue_t *queue, poker_t *poker); \ No newline at end of file diff --git a/src/poker/poker.c b/src/poker/poker.c index afe2f163..13b69bb4 100644 --- a/src/poker/poker.c +++ b/src/poker/poker.c @@ -70,17 +70,21 @@ void pokerResetBettingRound(poker_t *poker) { } void pokerNewDealer(poker_t *poker) { - uint8_t i, j, k; + pokerSetDealer(poker, poker->playerDealer + 1); +} + +void pokerSetDealer(poker_t *poker, uint8_t dealer) { + uint8_t i, k; pokerplayer_t *player; bool foundDealer; bool foundSmall; foundDealer = false; foundSmall = false; + poker->playerDealer = dealer; - j = poker->playerDealer + 1; for(i = 0; i < poker->playerCount; i++) { - k = (j + i) % poker->playerCount; + k = (dealer + i) % poker->playerCount; player = poker->players + k; if(player->state & POKER_PLAYER_STATE_OUT) continue; if(!foundDealer) { diff --git a/src/poker/poker.h b/src/poker/poker.h index 4c01c5a3..1e32ebd3 100644 --- a/src/poker/poker.h +++ b/src/poker/poker.h @@ -217,6 +217,15 @@ void pokerResetBettingRound(poker_t *poker); */ void pokerNewDealer(poker_t *poker); +/** + * Set a next dealer. This will also select the new small and big blind players. + * This will automatically skip out players if you provide one. + * + * @param poker Poker game to select a new dealer for. + * @param dealer Dealer to become the new dealer. + */ +void pokerSetDealer(poker_t *poker, uint8_t dealer); + /** * Take the blinds from the blind players. * diff --git a/test/poker/poker.c b/test/poker/poker.c index 3b746dbd..d5ab8e28 100644 --- a/test/poker/poker.c +++ b/test/poker/poker.c @@ -125,8 +125,48 @@ void test_pokerNewDealer_should_FindANewDealer(void) { TEST_ASSERT_EQUAL_UINT8(1, poker.playerBigBlind); } -void test_pokerNewDealer_should_SkipOutPlayers(void) { +void test_pokerSetDealer_should_SetANewSetOfPlayers(void) { + poker_t poker; + pokerInit(&poker); + + pokerPlayerChipsAdd(poker.players + pokerPlayerAdd(&poker), 1000); + pokerPlayerChipsAdd(poker.players + pokerPlayerAdd(&poker), 1000); + pokerPlayerChipsAdd(poker.players + pokerPlayerAdd(&poker), 1000); + pokerPlayerChipsAdd(poker.players + pokerPlayerAdd(&poker), 1000); + pokerPlayerChipsAdd(poker.players + pokerPlayerAdd(&poker), 1000); + pokerSetDealer(&poker, 0x00); + TEST_ASSERT_EQUAL_UINT8(0, poker.playerDealer); + TEST_ASSERT_EQUAL_UINT8(1, poker.playerSmallBlind); + TEST_ASSERT_EQUAL_UINT8(2, poker.playerBigBlind); + + pokerSetDealer(&poker, 0x01); + TEST_ASSERT_EQUAL_UINT8(1, poker.playerDealer); + TEST_ASSERT_EQUAL_UINT8(2, poker.playerSmallBlind); + TEST_ASSERT_EQUAL_UINT8(3, poker.playerBigBlind); + + pokerSetDealer(&poker, 0x02); + TEST_ASSERT_EQUAL_UINT8(2, poker.playerDealer); + TEST_ASSERT_EQUAL_UINT8(3, poker.playerSmallBlind); + TEST_ASSERT_EQUAL_UINT8(4, poker.playerBigBlind); + + pokerSetDealer(&poker, 0x03); + TEST_ASSERT_EQUAL_UINT8(3, poker.playerDealer); + TEST_ASSERT_EQUAL_UINT8(4, poker.playerSmallBlind); + TEST_ASSERT_EQUAL_UINT8(0, poker.playerBigBlind); + + pokerSetDealer(&poker, 0x04); + TEST_ASSERT_EQUAL_UINT8(4, poker.playerDealer); + TEST_ASSERT_EQUAL_UINT8(0, poker.playerSmallBlind); + TEST_ASSERT_EQUAL_UINT8(1, poker.playerBigBlind); + + pokerSetDealer(&poker, 0x00); + TEST_ASSERT_EQUAL_UINT8(0, poker.playerDealer); + TEST_ASSERT_EQUAL_UINT8(1, poker.playerSmallBlind); + TEST_ASSERT_EQUAL_UINT8(2, poker.playerBigBlind); +} + +void test_pokerSetDealer_should_SkipOutPlayers(void) { poker_t poker; pokerInit(&poker); @@ -136,17 +176,27 @@ void test_pokerNewDealer_should_SkipOutPlayers(void) { pokerPlayerChipsAdd(poker.players + pokerPlayerAdd(&poker), 1000); pokerPlayerAdd(&poker); - pokerNewDealer(&poker); + pokerSetDealer(&poker, 0x00); + TEST_ASSERT_EQUAL_UINT8(0, poker.playerDealer); + TEST_ASSERT_EQUAL_UINT8(1, poker.playerSmallBlind); + TEST_ASSERT_EQUAL_UINT8(3, poker.playerBigBlind); + + pokerSetDealer(&poker, 0x01); TEST_ASSERT_EQUAL_UINT8(1, poker.playerDealer); TEST_ASSERT_EQUAL_UINT8(3, poker.playerSmallBlind); TEST_ASSERT_EQUAL_UINT8(0, poker.playerBigBlind); - pokerNewDealer(&poker); + pokerSetDealer(&poker, 0x02); TEST_ASSERT_EQUAL_UINT8(3, poker.playerDealer); TEST_ASSERT_EQUAL_UINT8(0, poker.playerSmallBlind); TEST_ASSERT_EQUAL_UINT8(1, poker.playerBigBlind); - pokerNewDealer(&poker); + pokerSetDealer(&poker, 0x03); + TEST_ASSERT_EQUAL_UINT8(3, poker.playerDealer); + TEST_ASSERT_EQUAL_UINT8(0, poker.playerSmallBlind); + TEST_ASSERT_EQUAL_UINT8(1, poker.playerBigBlind); + + pokerSetDealer(&poker, 0x04); TEST_ASSERT_EQUAL_UINT8(0, poker.playerDealer); TEST_ASSERT_EQUAL_UINT8(1, poker.playerSmallBlind); TEST_ASSERT_EQUAL_UINT8(3, poker.playerBigBlind); @@ -1544,7 +1594,8 @@ int test_poker() { RUN_TEST(test_pokerPotAdd_should_ResetThePot); RUN_TEST(test_pokerPotHasPlayer_should_DetermineIfPlayerInThePot); RUN_TEST(test_pokerNewDealer_should_FindANewDealer); - RUN_TEST(test_pokerNewDealer_should_SkipOutPlayers); + RUN_TEST(test_pokerSetDealer_should_SetANewSetOfPlayers); + RUN_TEST(test_pokerSetDealer_should_SkipOutPlayers); RUN_TEST(test_pokerTakeBlinds_should_TakeTheBlinds); RUN_TEST(test_pokerPotAddPlayer_should_AddAPlayer); RUN_TEST(test_pokerPlayerAdd_should_ResetThePlayer);