Progress has been made.
This commit is contained in:
120
src/conversation/items/better.c
Normal file
120
src/conversation/items/better.c
Normal file
@@ -0,0 +1,120 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) 2022 Dominic Masters
|
||||||
|
*
|
||||||
|
* This software is released under the MIT License.
|
||||||
|
* https://opensource.org/licenses/MIT
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "better.h"
|
||||||
|
#include "../../poker/poker.h"
|
||||||
|
#include "../textbox.h"
|
||||||
|
|
||||||
|
void conversationQueueBeginBetting() {
|
||||||
|
pokerturn_t turn;
|
||||||
|
turn.chips = 0;
|
||||||
|
// Begin the betting process. First we need to decide if the player or the
|
||||||
|
// AI is betting, then based on that we decide what to do next.
|
||||||
|
|
||||||
|
// TODO: Actually bet.
|
||||||
|
if(POKER_PLAYER_BETTER == POKER_HUMAN_INDEX) {
|
||||||
|
// This is the human player.
|
||||||
|
BGB_MESSAGE("Player folding.");
|
||||||
|
conversationTextboxSetText(STR_DEBUG_PLAYER);
|
||||||
|
POKER_PLAYERS[POKER_PLAYER_BETTER].state |= POKER_PLAYER_STATE_FOLDED;
|
||||||
|
} else {
|
||||||
|
// This is an AI player, get their turn.
|
||||||
|
BGB_MESSAGE("AI turn to bet");
|
||||||
|
pokerAi(POKER_PLAYER_BETTER, &turn);
|
||||||
|
BGB_printf("AI Decided to %u, with %u chips and %u confidence, bluffin: %u", turn.type, turn.chips, turn.confidence, turn.bluff);
|
||||||
|
|
||||||
|
switch(turn.type) {
|
||||||
|
case POKER_TURN_TYPE_FOLD:
|
||||||
|
POKER_PLAYERS[POKER_PLAYER_BETTER].state |= POKER_PLAYER_STATE_FOLDED;
|
||||||
|
conversationTextboxSetText(STR_POKER_GAME_AI_FOLD);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case POKER_TURN_TYPE_BET:
|
||||||
|
if(turn.bluff) {
|
||||||
|
conversationTextboxSetText(STR_POKER_GAME_AI_RAISE_BLUFF);
|
||||||
|
} else {
|
||||||
|
conversationTextboxSetText(STR_POKER_GAME_AI_RAISE);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case POKER_TURN_TYPE_CALL:
|
||||||
|
if(turn.bluff) {
|
||||||
|
conversationTextboxSetText(STR_POKER_GAME_AI_CALL_BLUFF);
|
||||||
|
} else {
|
||||||
|
conversationTextboxSetText(STR_POKER_GAME_AI_CALL);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case POKER_TURN_TYPE_ALL_IN:
|
||||||
|
if(turn.bluff) {
|
||||||
|
conversationTextboxSetText(STR_POKER_GAME_AI_ALL_IN_BLUFF);
|
||||||
|
} else {
|
||||||
|
conversationTextboxSetText(STR_POKER_GAME_AI_ALL_IN);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case POKER_TURN_TYPE_CHECK:
|
||||||
|
if(turn.bluff) {
|
||||||
|
conversationTextboxSetText(STR_POKER_GAME_AI_CHECK_BLUFF);
|
||||||
|
} else {
|
||||||
|
conversationTextboxSetText(STR_POKER_GAME_AI_CHECK);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Now we have their turn, decide what to say based on that.
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update bet state
|
||||||
|
POKER_PLAYERS[POKER_PLAYER_BETTER].state |= (
|
||||||
|
POKER_PLAYER_STATE_HAS_BET_THIS_ROUND
|
||||||
|
);
|
||||||
|
|
||||||
|
if(turn.chips > 0) {
|
||||||
|
pokerBet(POKER_PLAYER_BETTER, turn.chips);
|
||||||
|
}
|
||||||
|
|
||||||
|
QUEUE_ITEM = QUEUE_NEXT_BETTER;
|
||||||
|
}
|
||||||
|
|
||||||
|
void conversationQueueNextBetter() {
|
||||||
|
uint8_t i, j, countStillInGame;
|
||||||
|
|
||||||
|
// Now we decide the next better.
|
||||||
|
countStillInGame = 0;
|
||||||
|
for(i = 0; i < POKER_PLAYER_COUNT; i++) {
|
||||||
|
//In theory I don't think the current better can ever be selected again.
|
||||||
|
// if(i == POKER_PLAYER_BETTER) continue; // Commented because we now count
|
||||||
|
|
||||||
|
// Next better is the better to the right of the current better.
|
||||||
|
j = (POKER_PLAYER_BETTER + i) % POKER_PLAYER_COUNT;
|
||||||
|
if(!pokerDoesPlayerNeedToBet(j)) {
|
||||||
|
if((POKER_PLAYERS[j].state & (POKER_PLAYER_STATE_FOLDED | POKER_PLAYER_STATE_OUT)) == 0) {
|
||||||
|
countStillInGame++;
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// They haven't bet yet, make them the "next better"
|
||||||
|
POKER_PLAYER_BETTER = j;
|
||||||
|
|
||||||
|
QUEUE_ITEM = QUEUE_BEGIN_BETTING;
|
||||||
|
conversationQueueNext();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// If we reach this point then we either need to begin the betting round, or
|
||||||
|
// we are going to move to the winning decider.
|
||||||
|
if(POKER_COMMUNITY_SIZE_MAX == POKER_COMMUNITY_SIZE || countStillInGame == 1) {
|
||||||
|
QUEUE_ITEM = QUEUE_WINNER_DECIDE;
|
||||||
|
conversationQueueNext();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
QUEUE_ITEM = QUEUE_FLOP;
|
||||||
|
conversationQueueNext();
|
||||||
|
}
|
13
src/conversation/items/better.h
Normal file
13
src/conversation/items/better.h
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) 2022 Dominic Masters
|
||||||
|
*
|
||||||
|
* This software is released under the MIT License.
|
||||||
|
* https://opensource.org/licenses/MIT
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
#include "../../libs.h"
|
||||||
|
#include "../queue.h"
|
||||||
|
|
||||||
|
void conversationQueueBeginBetting();
|
||||||
|
void conversationQueueNextBetter();
|
57
src/conversation/items/flop.c
Normal file
57
src/conversation/items/flop.c
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) 2022 Dominic Masters
|
||||||
|
*
|
||||||
|
* This software is released under the MIT License.
|
||||||
|
* https://opensource.org/licenses/MIT
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "flop.h"
|
||||||
|
#include "../queue.h"
|
||||||
|
|
||||||
|
void conversationQueueFlopTurnRiver() {
|
||||||
|
uint8_t i, count;
|
||||||
|
pokerplayer_t *player;
|
||||||
|
|
||||||
|
|
||||||
|
switch(POKER_COMMUNITY_SIZE) {
|
||||||
|
case 0:
|
||||||
|
count = POKER_COUNT_FLOP;
|
||||||
|
conversationTextboxSetText(STR_POKER_GAME_CARDS_FLOPPED);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case POKER_COUNT_FLOP:
|
||||||
|
count = POKER_COUNT_TURN;
|
||||||
|
conversationTextboxSetText(STR_POKER_GAME_CARDS_TURNED);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
count = POKER_COUNT_RIVER;
|
||||||
|
conversationTextboxSetText(STR_POKER_GAME_CARDS_RIVERED);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Reset each players required to bet state
|
||||||
|
do {
|
||||||
|
player = POKER_PLAYERS + i;
|
||||||
|
player->state &= ~POKER_PLAYER_STATE_HAS_BET_THIS_ROUND;
|
||||||
|
player->timesRaised = 0;
|
||||||
|
} while(++i < POKER_PLAYER_COUNT);
|
||||||
|
|
||||||
|
// In reality we'd burn the top card but that would waste some CPU I need.
|
||||||
|
// Deal the top cards.
|
||||||
|
for(i = 0; i < count; i++) {
|
||||||
|
POKER_COMMUNITY[POKER_COMMUNITY_SIZE++] = POKER_DECK[--POKER_DECK_SIZE];
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check how many players need to bet, if it's zero then all players are
|
||||||
|
// either folded or all-in
|
||||||
|
if(pokerGetRemainingBetterCount() == 0x00) {
|
||||||
|
if(POKER_COMMUNITY_SIZE == POKER_COMMUNITY_SIZE_MAX) {
|
||||||
|
QUEUE_ITEM = QUEUE_WINNER_DECIDE;
|
||||||
|
} else {
|
||||||
|
QUEUE_ITEM = QUEUE_FLOP;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
QUEUE_ITEM = QUEUE_BEGIN_BETTING;
|
||||||
|
}
|
||||||
|
}
|
13
src/conversation/items/flop.h
Normal file
13
src/conversation/items/flop.h
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) 2022 Dominic Masters
|
||||||
|
*
|
||||||
|
* This software is released under the MIT License.
|
||||||
|
* https://opensource.org/licenses/MIT
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
#include "../../libs.h"
|
||||||
|
#include "../../poker/poker.h"
|
||||||
|
#include "../textbox.h"
|
||||||
|
|
||||||
|
void conversationQueueFlopTurnRiver();
|
15
src/conversation/items/gameintro.c
Normal file
15
src/conversation/items/gameintro.c
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) 2022 Dominic Masters
|
||||||
|
*
|
||||||
|
* This software is released under the MIT License.
|
||||||
|
* https://opensource.org/licenses/MIT
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "gameintro.h"
|
||||||
|
#include "../queue.h"
|
||||||
|
|
||||||
|
void conversationQueueGameBegin() {
|
||||||
|
char buffer[TEXTBOX_BUFFER_MAX];
|
||||||
|
sprintf(STR_GAME_BEGIN, POKER_GAME_BLINDS_CURRENT * 2, POKER_GAME_BLINDS_CURRENT);
|
||||||
|
conversationTextboxSetText(buffer);
|
||||||
|
}
|
14
src/conversation/items/gameintro.h
Normal file
14
src/conversation/items/gameintro.h
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) 2022 Dominic Masters
|
||||||
|
*
|
||||||
|
* This software is released under the MIT License.
|
||||||
|
* https://opensource.org/licenses/MIT
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
#include "../../libs.h"
|
||||||
|
#include "../../poker/poker.h"
|
||||||
|
#include "../textbox.h"
|
||||||
|
#include "../../strings.h"
|
||||||
|
|
||||||
|
void conversationQueueGameBegin();
|
56
src/conversation/items/winner.c
Normal file
56
src/conversation/items/winner.c
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) 2022 Dominic Masters
|
||||||
|
*
|
||||||
|
* This software is released under the MIT License.
|
||||||
|
* https://opensource.org/licenses/MIT
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "winner.h"
|
||||||
|
#include "../../poker/poker.h"
|
||||||
|
#include "../textbox.h"
|
||||||
|
|
||||||
|
void conversationQueueWinnerDecide() {
|
||||||
|
pokerpot_t *pot;
|
||||||
|
uint8_t i, j, countOfPotsWithChips, chipsEach;
|
||||||
|
|
||||||
|
QUEUE_ITEM = QUEUE_START;
|
||||||
|
|
||||||
|
countOfPotsWithChips = 0;
|
||||||
|
for(i = 0; i < POKER_POT_COUNT; i++) {
|
||||||
|
pot = POKER_POTS + i;
|
||||||
|
if(pot->chips == 0) break;
|
||||||
|
countOfPotsWithChips++;
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: Messages
|
||||||
|
if(countOfPotsWithChips == 1) {
|
||||||
|
} else {
|
||||||
|
}
|
||||||
|
|
||||||
|
// Pots.
|
||||||
|
for(i = 0; i < countOfPotsWithChips; i++) {
|
||||||
|
pot = POKER_POTS + i;
|
||||||
|
pokerWinnerDetermineForPot(
|
||||||
|
pot,
|
||||||
|
POKER_WINNERS,
|
||||||
|
POKER_WINNER_PLAYERS,
|
||||||
|
&POKER_WINNER_COUNT,
|
||||||
|
POKER_WINNER_PARTICIPANTS,
|
||||||
|
&POKER_WINNER_PARTICIPANT_COUNT
|
||||||
|
);
|
||||||
|
|
||||||
|
chipsEach = pot->chips / POKER_WINNER_COUNT;
|
||||||
|
for(j = 0; j < POKER_WINNER_COUNT; j++) {
|
||||||
|
POKER_PLAYERS[POKER_WINNER_PLAYERS[j]].chips += chipsEach;
|
||||||
|
// TODO: I can determine rounding error here if I need to, just sub the
|
||||||
|
// taken chips for each player and when I get to chips remaining less than
|
||||||
|
// the chipsEach, then reward the rounding offset.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: Decide on a winner for real.
|
||||||
|
conversationTextboxSetText(STR_DEBUG_WINNER_DECIDED);
|
||||||
|
|
||||||
|
// New Round
|
||||||
|
pokerNewRound();
|
||||||
|
}
|
11
src/conversation/items/winner.h
Normal file
11
src/conversation/items/winner.h
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) 2022 Dominic Masters
|
||||||
|
*
|
||||||
|
* This software is released under the MIT License.
|
||||||
|
* https://opensource.org/licenses/MIT
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
#include "../../libs.h"
|
||||||
|
|
||||||
|
void conversationQueueWinnerDecide();
|
@@ -10,6 +10,10 @@
|
|||||||
#include "textbox.h"
|
#include "textbox.h"
|
||||||
#include "fade.h"
|
#include "fade.h"
|
||||||
#include "../poker/poker.h"
|
#include "../poker/poker.h"
|
||||||
|
#include "items/flop.h"
|
||||||
|
#include "items/winner.h"
|
||||||
|
#include "items/better.h"
|
||||||
|
#include "items/gameintro.h"
|
||||||
|
|
||||||
uint16_t QUEUE_ITEM;
|
uint16_t QUEUE_ITEM;
|
||||||
|
|
||||||
@@ -17,225 +21,16 @@ void conversationQueueDebug() {
|
|||||||
conversationTextboxSetText(STR_ERROR);
|
conversationTextboxSetText(STR_ERROR);
|
||||||
}
|
}
|
||||||
|
|
||||||
void conversationQueueBegin() {
|
|
||||||
QUEUE_ITEM = QUEUE_TAKE_BLINDS;
|
|
||||||
conversationTextboxSetText(STR_POKER_GAME_START);
|
|
||||||
}
|
|
||||||
|
|
||||||
void conversationQueueTakeBlinds() {
|
|
||||||
QUEUE_ITEM = QUEUE_DEAL_CARDS;
|
|
||||||
conversationTextboxSetText(STR_POKER_GAME_TAKING_BLINDS);
|
|
||||||
}
|
|
||||||
|
|
||||||
void conversationQueueDealCards() {
|
void conversationQueueDealCards() {
|
||||||
QUEUE_ITEM = QUEUE_BEGIN_BETTING;
|
QUEUE_ITEM = QUEUE_BEGIN_BETTING;
|
||||||
conversationTextboxSetText(STR_POKER_GAME_CARDS_DEALT);
|
conversationTextboxSetText(STR_POKER_GAME_CARDS_DEALT);
|
||||||
}
|
}
|
||||||
|
|
||||||
void conversationQueueBeginBetting() {
|
void conversationQueueStart() {
|
||||||
pokerturn_t turn;
|
QUEUE_ITEM = QUEUE_GAME_BEGIN;
|
||||||
turn.chips = 0;
|
|
||||||
// Begin the betting process. First we need to decide if the player or the
|
|
||||||
// AI is betting, then based on that we decide what to do next.
|
|
||||||
|
|
||||||
// TODO: Actually bet.
|
|
||||||
if(POKER_PLAYER_BETTER == POKER_HUMAN_INDEX) {
|
|
||||||
// This is the human player.
|
|
||||||
BGB_MESSAGE("Player folding.");
|
|
||||||
conversationTextboxSetText(STR_DEBUG_PLAYER);
|
|
||||||
POKER_PLAYERS[POKER_PLAYER_BETTER].state |= POKER_PLAYER_STATE_FOLDED;
|
|
||||||
} else {
|
|
||||||
// This is an AI player, get their turn.
|
|
||||||
BGB_MESSAGE("AI turn to bet");
|
|
||||||
pokerAi(POKER_PLAYER_BETTER, &turn);
|
|
||||||
BGB_printf("AI Decided to %u, with %u chips and %u confidence, bluffin: %u", turn.type, turn.chips, turn.confidence, turn.bluff);
|
|
||||||
|
|
||||||
switch(turn.type) {
|
|
||||||
case POKER_TURN_TYPE_FOLD:
|
|
||||||
POKER_PLAYERS[POKER_PLAYER_BETTER].state |= POKER_PLAYER_STATE_FOLDED;
|
|
||||||
conversationTextboxSetText(STR_POKER_GAME_AI_FOLD);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case POKER_TURN_TYPE_BET:
|
|
||||||
if(turn.bluff) {
|
|
||||||
conversationTextboxSetText(STR_POKER_GAME_AI_RAISE_BLUFF);
|
|
||||||
} else {
|
|
||||||
conversationTextboxSetText(STR_POKER_GAME_AI_RAISE);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case POKER_TURN_TYPE_CALL:
|
|
||||||
if(turn.bluff) {
|
|
||||||
conversationTextboxSetText(STR_POKER_GAME_AI_CALL_BLUFF);
|
|
||||||
} else {
|
|
||||||
conversationTextboxSetText(STR_POKER_GAME_AI_CALL);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case POKER_TURN_TYPE_ALL_IN:
|
|
||||||
if(turn.bluff) {
|
|
||||||
conversationTextboxSetText(STR_POKER_GAME_AI_ALL_IN_BLUFF);
|
|
||||||
} else {
|
|
||||||
conversationTextboxSetText(STR_POKER_GAME_AI_ALL_IN);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case POKER_TURN_TYPE_CHECK:
|
|
||||||
if(turn.bluff) {
|
|
||||||
conversationTextboxSetText(STR_POKER_GAME_AI_CHECK_BLUFF);
|
|
||||||
} else {
|
|
||||||
conversationTextboxSetText(STR_POKER_GAME_AI_CHECK);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Now we have their turn, decide what to say based on that.
|
|
||||||
}
|
|
||||||
|
|
||||||
// Update bet state
|
|
||||||
POKER_PLAYERS[POKER_PLAYER_BETTER].state |= (
|
|
||||||
POKER_PLAYER_STATE_HAS_BET_THIS_ROUND
|
|
||||||
);
|
|
||||||
|
|
||||||
if(turn.chips > 0) {
|
|
||||||
pokerBet(POKER_PLAYER_BETTER, turn.chips);
|
|
||||||
}
|
|
||||||
|
|
||||||
QUEUE_ITEM = QUEUE_NEXT_BETTER;
|
|
||||||
}
|
|
||||||
|
|
||||||
void conversationQueueNextBetter() {
|
|
||||||
uint8_t i, j, countStillInGame;
|
|
||||||
|
|
||||||
// Now we decide the next better.
|
|
||||||
countStillInGame = 0;
|
|
||||||
for(i = 0; i < POKER_PLAYER_COUNT; i++) {
|
|
||||||
//In theory I don't think the current better can ever be selected again.
|
|
||||||
// if(i == POKER_PLAYER_BETTER) continue; // Commented because we now count
|
|
||||||
|
|
||||||
// Next better is the better to the right of the current better.
|
|
||||||
j = (POKER_PLAYER_BETTER + i) % POKER_PLAYER_COUNT;
|
|
||||||
if(!pokerDoesPlayerNeedToBet(j)) {
|
|
||||||
if((POKER_PLAYERS[j].state & (POKER_PLAYER_STATE_FOLDED | POKER_PLAYER_STATE_OUT)) == 0) {
|
|
||||||
countStillInGame++;
|
|
||||||
}
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// They haven't bet yet, make them the "next better"
|
|
||||||
POKER_PLAYER_BETTER = j;
|
|
||||||
|
|
||||||
QUEUE_ITEM = QUEUE_BEGIN_BETTING;
|
|
||||||
conversationQueueNext();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// If we reach this point then we either need to begin the betting round, or
|
|
||||||
// we are going to move to the winning decider.
|
|
||||||
if(POKER_COMMUNITY_SIZE_MAX == POKER_COMMUNITY_SIZE || countStillInGame == 1) {
|
|
||||||
QUEUE_ITEM = QUEUE_WINNER_DECIDE;
|
|
||||||
conversationQueueNext();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
QUEUE_ITEM = QUEUE_FLOP;
|
|
||||||
conversationQueueNext();
|
conversationQueueNext();
|
||||||
}
|
}
|
||||||
|
|
||||||
void conversationQueueFlopTurnRiver() {
|
|
||||||
uint8_t i, count;
|
|
||||||
pokerplayer_t *player;
|
|
||||||
|
|
||||||
|
|
||||||
switch(POKER_COMMUNITY_SIZE) {
|
|
||||||
case 0:
|
|
||||||
count = POKER_COUNT_FLOP;
|
|
||||||
conversationTextboxSetText(STR_POKER_GAME_CARDS_FLOPPED);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case POKER_COUNT_FLOP:
|
|
||||||
count = POKER_COUNT_TURN;
|
|
||||||
conversationTextboxSetText(STR_POKER_GAME_CARDS_TURNED);
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
count = POKER_COUNT_RIVER;
|
|
||||||
conversationTextboxSetText(STR_POKER_GAME_CARDS_RIVERED);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Reset each players required to bet state
|
|
||||||
do {
|
|
||||||
player = POKER_PLAYERS + i;
|
|
||||||
player->state &= ~POKER_PLAYER_STATE_HAS_BET_THIS_ROUND;
|
|
||||||
player->timesRaised = 0;
|
|
||||||
} while(++i < POKER_PLAYER_COUNT);
|
|
||||||
|
|
||||||
// In reality we'd burn the top card but that would waste some CPU I need.
|
|
||||||
// Deal the top cards.
|
|
||||||
for(i = 0; i < count; i++) {
|
|
||||||
POKER_COMMUNITY[POKER_COMMUNITY_SIZE++] = POKER_DECK[--POKER_DECK_SIZE];
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check how many players need to bet, if it's zero then all players are
|
|
||||||
// either folded or all-in
|
|
||||||
if(pokerGetRemainingBetterCount() == 0x00) {
|
|
||||||
if(POKER_COMMUNITY_SIZE == POKER_COMMUNITY_SIZE_MAX) {
|
|
||||||
QUEUE_ITEM = QUEUE_WINNER_DECIDE;
|
|
||||||
} else {
|
|
||||||
QUEUE_ITEM = QUEUE_FLOP;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
QUEUE_ITEM = QUEUE_BEGIN_BETTING;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void conversationQueueWinnerDecide() {
|
|
||||||
pokerpot_t *pot;
|
|
||||||
uint8_t i, j, countOfPotsWithChips, chipsEach;
|
|
||||||
|
|
||||||
QUEUE_ITEM = QUEUE_BEGIN;
|
|
||||||
|
|
||||||
countOfPotsWithChips = 0;
|
|
||||||
for(i = 0; i < POKER_POT_COUNT; i++) {
|
|
||||||
pot = POKER_POTS + i;
|
|
||||||
if(pot->chips == 0) break;
|
|
||||||
countOfPotsWithChips++;
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO: Messages
|
|
||||||
if(countOfPotsWithChips == 1) {
|
|
||||||
} else {
|
|
||||||
}
|
|
||||||
|
|
||||||
// Pots.
|
|
||||||
for(i = 0; i < countOfPotsWithChips; i++) {
|
|
||||||
pot = POKER_POTS + i;
|
|
||||||
pokerWinnerDetermineForPot(
|
|
||||||
pot,
|
|
||||||
POKER_WINNERS,
|
|
||||||
POKER_WINNER_PLAYERS,
|
|
||||||
&POKER_WINNER_COUNT,
|
|
||||||
POKER_WINNER_PARTICIPANTS,
|
|
||||||
&POKER_WINNER_PARTICIPANT_COUNT
|
|
||||||
);
|
|
||||||
|
|
||||||
chipsEach = pot->chips / POKER_WINNER_COUNT;
|
|
||||||
for(j = 0; j < POKER_WINNER_COUNT; j++) {
|
|
||||||
POKER_PLAYERS[POKER_WINNER_PLAYERS[j]].chips += chipsEach;
|
|
||||||
// TODO: I can determine rounding error here if I need to, just sub the
|
|
||||||
// taken chips for each player and when I get to chips remaining less than
|
|
||||||
// the chipsEach, then reward the rounding offset.
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO: Decide on a winner for real.
|
|
||||||
conversationTextboxSetText(STR_DEBUG_WINNER_DECIDED);
|
|
||||||
|
|
||||||
// New Round
|
|
||||||
pokerNewRound();
|
|
||||||
}
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
queuecallback_t *QUEUE_CALLBACKS[] = {
|
queuecallback_t *QUEUE_CALLBACKS[] = {
|
||||||
@@ -247,14 +42,14 @@ queuecallback_t *QUEUE_CALLBACKS[] = {
|
|||||||
NULL,
|
NULL,
|
||||||
|
|
||||||
// 5
|
// 5
|
||||||
&conversationQueueBegin,
|
&conversationQueueStart,
|
||||||
NULL,
|
NULL,
|
||||||
NULL,
|
NULL,
|
||||||
NULL,
|
NULL,
|
||||||
NULL,
|
NULL,
|
||||||
|
|
||||||
// 10
|
// 10
|
||||||
&conversationQueueTakeBlinds,
|
&conversationQueueGameBegin,
|
||||||
NULL,
|
NULL,
|
||||||
NULL,
|
NULL,
|
||||||
NULL,
|
NULL,
|
||||||
@@ -304,7 +99,7 @@ queuecallback_t *QUEUE_CALLBACKS[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
inline void conversationQueueInit() {
|
inline void conversationQueueInit() {
|
||||||
QUEUE_ITEM = QUEUE_BEGIN;
|
QUEUE_ITEM = QUEUE_START;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void conversationQueueNext() {
|
inline void conversationQueueNext() {
|
||||||
|
@@ -15,13 +15,14 @@ extern uint16_t QUEUE_ITEM;
|
|||||||
extern queuecallback_t *QUEUE_CALLBACKS[];
|
extern queuecallback_t *QUEUE_CALLBACKS[];
|
||||||
|
|
||||||
#define QUEUE_DEBUG 1
|
#define QUEUE_DEBUG 1
|
||||||
#define QUEUE_BEGIN 5
|
#define QUEUE_START 5
|
||||||
#define QUEUE_TAKE_BLINDS 10
|
#define QUEUE_GAME_BEGIN 10
|
||||||
#define QUEUE_DEAL_CARDS 15
|
#define QUEUE_DEAL_CARDS 15
|
||||||
#define QUEUE_BEGIN_BETTING 20
|
#define QUEUE_BEGIN_BETTING 20
|
||||||
#define QUEUE_NEXT_BETTER 25
|
#define QUEUE_NEXT_BETTER 25
|
||||||
#define QUEUE_FLOP 30
|
#define QUEUE_FLOP 30
|
||||||
#define QUEUE_WINNER_DECIDE 40
|
#define QUEUE_WINNER_DECIDE 40
|
||||||
|
|
||||||
|
void conversationQueueStart();
|
||||||
inline void conversationQueueInit();
|
inline void conversationQueueInit();
|
||||||
inline void conversationQueueNext();
|
inline void conversationQueueNext();
|
@@ -7,11 +7,19 @@
|
|||||||
|
|
||||||
#include "strings.h"
|
#include "strings.h"
|
||||||
|
|
||||||
|
const char STR_GAME_BEGIN[] = "The blinds are set %u for the big, and %u for the small blinds.";
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const char STR_ERROR[] = "An error\nhas occured";
|
const char STR_ERROR[] = "An error\nhas occured";
|
||||||
const char STR_HELLO[] = "Hello World, How are you today?\nGood thanks. Thank god!";
|
const char STR_HELLO[] = "Hello World, How are you today?\nGood thanks. Thank god!";
|
||||||
|
|
||||||
const char STR_POKER_GAME_START[] = "Poker game started";
|
const char STR_POKER_GAME_START[] = "Poker game started";
|
||||||
const char STR_POKER_GAME_TAKING_BLINDS[] = "Blinds taken.";
|
|
||||||
const char STR_POKER_GAME_CARDS_DEALT[] = "Cards dealt.";
|
const char STR_POKER_GAME_CARDS_DEALT[] = "Cards dealt.";
|
||||||
|
|
||||||
const char STR_POKER_GAME_CARDS_FLOPPED[] = "Cards flopped";
|
const char STR_POKER_GAME_CARDS_FLOPPED[] = "Cards flopped";
|
||||||
@@ -30,4 +38,11 @@ const char STR_POKER_GAME_AI_ALL_IN[] = "AI All In";
|
|||||||
const char STR_POKER_GAME_AI_ALL_IN_BLUFF[] = "AI All In\nBut Bluffing";
|
const char STR_POKER_GAME_AI_ALL_IN_BLUFF[] = "AI All In\nBut Bluffing";
|
||||||
const char STR_POKER_GAME_AI_CHECK[] = "AI Checking";
|
const char STR_POKER_GAME_AI_CHECK[] = "AI Checking";
|
||||||
const char STR_POKER_GAME_AI_CHECK_BLUFF[] = "AI Checking\nBut Bluffing";
|
const char STR_POKER_GAME_AI_CHECK_BLUFF[] = "AI Checking\nBut Bluffing";
|
||||||
const char STR_FOX[] = "The quick brown fox jumps over the lazy dog.";
|
const char STR_FOX[] = "The quick brown fox jumps over the lazy dog.";
|
||||||
|
|
||||||
|
const char *STR_PLAYER_NAMES[] = {
|
||||||
|
"Player",
|
||||||
|
"Mikuru",
|
||||||
|
"Haruhi",
|
||||||
|
"Matoi"
|
||||||
|
};
|
@@ -8,6 +8,13 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
#include "libs.h"
|
#include "libs.h"
|
||||||
|
|
||||||
|
extern const char STR_GAME_BEGIN[];
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
extern const char STR_ERROR[];
|
extern const char STR_ERROR[];
|
||||||
extern const char STR_HELLO[];
|
extern const char STR_HELLO[];
|
||||||
|
|
||||||
@@ -31,4 +38,6 @@ extern const char STR_POKER_GAME_AI_ALL_IN[];
|
|||||||
extern const char STR_POKER_GAME_AI_ALL_IN_BLUFF[];
|
extern const char STR_POKER_GAME_AI_ALL_IN_BLUFF[];
|
||||||
extern const char STR_POKER_GAME_AI_CHECK[];
|
extern const char STR_POKER_GAME_AI_CHECK[];
|
||||||
extern const char STR_POKER_GAME_AI_CHECK_BLUFF[];
|
extern const char STR_POKER_GAME_AI_CHECK_BLUFF[];
|
||||||
extern const char STR_FOX[];
|
extern const char STR_FOX[];
|
||||||
|
|
||||||
|
extern const char *STR_PLAYER_NAMES[];
|
Reference in New Issue
Block a user