Skip to content

Commit

Permalink
removed table convenience methods for caravans
Browse files Browse the repository at this point in the history
  • Loading branch information
r3w0p committed May 24, 2024
1 parent 316daff commit 524cea1
Show file tree
Hide file tree
Showing 8 changed files with 89 additions and 182 deletions.
2 changes: 0 additions & 2 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,6 @@ FetchContent_Declare(ftxui
GIT_TAG v5.0.0
)
FetchContent_MakeAvailable(ftxui)
# For MacOS to avoid error: "Target "component" links to Threads::Threads but the target was not found."
find_package(Threads REQUIRED)
# ---


Expand Down
9 changes: 0 additions & 9 deletions include/caravan/model/table.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,6 @@ class Table {
std::array<Caravan*, TABLE_CARAVANS_MAX> caravans = { a, b, c, d, e, f };
bool closed;

uint8_t caravan_name_to_uint8_t_index(CaravanName cvname);

public:
explicit Table();

Expand All @@ -32,13 +30,6 @@ class Table {
Caravan* get_caravan(CaravanName cvname);
void clear_caravan(CaravanName cvname);

// TODO remove caravan convenience functions
uint16_t get_caravan_bid(CaravanName cvname);
Slot get_slot_at(CaravanName cvname, uint8_t pos);
Direction get_caravan_direction(CaravanName cvname);
uint8_t get_caravan_size(CaravanName cvname);
Suit get_caravan_suit(CaravanName cvname);

void play_face_card(CaravanName cvname, Card card, uint8_t pos);
void play_numeral_card(CaravanName cvname, Card card);
};
Expand Down
1 change: 0 additions & 1 deletion src/caravan/core/common.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
// modified under the terms of the GPL-3.0 License.

#include "caravan/core/common.h"
#include "caravan/core/exceptions.h"

bool is_numeral_card(Card c) {
return (c.rank >= ACE and c.rank <= TEN);
Expand Down
11 changes: 5 additions & 6 deletions src/caravan/model/game.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -205,8 +205,8 @@ int8_t Game::compare_bids(CaravanName cvname1, CaravanName cvname2) {

if (has_sold(cvname1)) {
if (has_sold(cvname2)) {
bid_cn1 = table_ptr->get_caravan_bid(cvname1);
bid_cn2 = table_ptr->get_caravan_bid(cvname2);
bid_cn1 = table_ptr->get_caravan(cvname1)->get_bid();
bid_cn2 = table_ptr->get_caravan(cvname2)->get_bid();

if (bid_cn1 > bid_cn2)
return -1; // CN1 sold; CN2 sold; CN1 highest bid
Expand All @@ -226,7 +226,7 @@ int8_t Game::compare_bids(CaravanName cvname1, CaravanName cvname2) {
}

bool Game::has_sold(CaravanName cvname) {
uint8_t bid = table_ptr->get_caravan_bid(cvname);
uint8_t bid = table_ptr->get_caravan(cvname)->get_bid();
return bid >= CARAVAN_SOLD_MIN and bid <= CARAVAN_SOLD_MAX;
}

Expand Down Expand Up @@ -278,7 +278,7 @@ void Game::option_play(Player *pptr, GameCommand* command) {
"a player's own caravan.");

if (in_start_stage and
table_ptr->get_caravan_size(command->caravan_name) > 0)
table_ptr->get_caravan(command->caravan_name)->get_size() > 0)
throw CaravanGameException(
"A numeral card must be played on an empty caravan "
"during the Start round.");
Expand All @@ -292,8 +292,7 @@ void Game::option_play(Player *pptr, GameCommand* command) {
"Start round.");

// Log to command
command->board = table_ptr->get_slot_at(command->caravan_name, command->pos_caravan).card;

command->board = table_ptr->get_caravan(command->caravan_name)->get_slot(command->pos_caravan).card;
table_ptr->play_face_card(
command->caravan_name,
c_hand,
Expand Down
103 changes: 12 additions & 91 deletions src/caravan/model/table.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,15 @@ void Table::close() {
}
}

Caravan* Table::get_caravan(CaravanName cvname) {
/**
* @param cvname The caravan to get.
* @return Pointer to the caravan.
*
* @throws CaravanFatalException Invalid caravan name.
* @throws CaravanFatalException Table is closed.
*/
Caravan *Table::get_caravan(CaravanName cvname) {
if (closed) throw CaravanFatalException(EXC_CLOSED);
switch (cvname) {
case CARAVAN_A:
return a;
Expand All @@ -60,63 +68,7 @@ Caravan* Table::get_caravan(CaravanName cvname) {
*/
void Table::clear_caravan(CaravanName cvname) {
if (closed) throw CaravanFatalException(EXC_CLOSED);
caravans[caravan_name_to_uint8_t_index(cvname)]->clear();
}

/**
* @param cvname A caravan name.
* @return The current bid of the named caravan.
*
* @throws CaravanFatalException Table is closed.
*/
uint16_t Table::get_caravan_bid(CaravanName cvname) {
if (closed) throw CaravanFatalException(EXC_CLOSED);
return caravans[caravan_name_to_uint8_t_index(cvname)]->get_bid();
}

/**
* @param cvname A caravan name.
* @param pos The position at the named caravan.
* @return The slot (i.e. numeral card and attached face cards) at the position.
*
* @throws CaravanFatalException Table is closed.
*/
Slot Table::get_slot_at(CaravanName cvname, uint8_t pos) {
if (closed) throw CaravanFatalException(EXC_CLOSED);
return caravans[caravan_name_to_uint8_t_index(cvname)]->get_slot(pos);
}

/**
* @param cvname A caravan name.
* @return The current direction of the named caravan.
*
* @throws CaravanFatalException Table is closed.
*/
Direction Table::get_caravan_direction(CaravanName cvname) {
if (closed) throw CaravanFatalException(EXC_CLOSED);
return caravans[caravan_name_to_uint8_t_index(cvname)]->get_direction();
}

/**
* @param cvname A caravan name.
* @return The current number of numeral cards in the named caravan.
*
* @throws CaravanFatalException Table is closed.
*/
uint8_t Table::get_caravan_size(CaravanName cvname) {
if (closed) throw CaravanFatalException(EXC_CLOSED);
return caravans[caravan_name_to_uint8_t_index(cvname)]->get_size();
}

/**
* @param cvname A caravan name.
* @return The current suit of the named caravan.
*
* @throws CaravanFatalException Table is closed.
*/
Suit Table::get_caravan_suit(CaravanName cvname) {
if (closed) throw CaravanFatalException(EXC_CLOSED);
return caravans[caravan_name_to_uint8_t_index(cvname)]->get_suit();
get_caravan(cvname)->clear();
}

/**
Expand All @@ -129,7 +81,7 @@ Suit Table::get_caravan_suit(CaravanName cvname) {
*/
void Table::play_face_card(CaravanName cvname, Card card, uint8_t pos) {
if (closed) throw CaravanFatalException(EXC_CLOSED);
Caravan *cvn_target = caravans[caravan_name_to_uint8_t_index(cvname)];
Caravan *cvn_target = get_caravan(cvname);

if (card.rank == QUEEN and pos != cvn_target->get_size())
throw CaravanGameException(
Expand Down Expand Up @@ -171,36 +123,5 @@ void Table::play_face_card(CaravanName cvname, Card card, uint8_t pos) {
*/
void Table::play_numeral_card(CaravanName cvname, Card card) {
if (closed) throw CaravanFatalException(EXC_CLOSED);
Caravan *caravan_ptr = caravans[caravan_name_to_uint8_t_index(cvname)];
caravan_ptr->put_numeral_card(card);
}

/*
* PROTECTED
*/

/**
* @param cvname A caravan name.
* @return The index of the named caravan, as it is stored in the table's
* internal array of caravans.
*
* @throws CaravanFatalException Invalid caravan name.
*/
uint8_t Table::caravan_name_to_uint8_t_index(CaravanName cvname) {
switch (cvname) {
case CARAVAN_A:
return 0;
case CARAVAN_B:
return 1;
case CARAVAN_C:
return 2;
case CARAVAN_D:
return 3;
case CARAVAN_E:
return 4;
case CARAVAN_F:
return 5;
default:
throw CaravanFatalException("Invalid caravan name.");
}
get_caravan(cvname)->put_numeral_card(card);
}
15 changes: 7 additions & 8 deletions src/caravan/user/bot_easy.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -86,8 +86,8 @@ GameCommand UserBotEasy::generate_option(Game *g) {

if (is_numeral_card(c_hand)) {
for (uint8_t i = 0; i < PLAYER_CARAVANS_MAX; ++i) {
bid_me = t->get_caravan_bid(pcns_me[i]);
bid_opp = t->get_caravan_bid(pcns_opp[i]);
bid_me = t->get_caravan(pcns_me[i])->get_bid();
bid_opp = t->get_caravan(pcns_opp[i])->get_bid();

// Skip caravan if sold and winning
if (bid_me >= CARAVAN_SOLD_MIN and
Expand All @@ -99,7 +99,7 @@ GameCommand UserBotEasy::generate_option(Game *g) {
if (bid_me > CARAVAN_SOLD_MAX)
return {OPTION_CLEAR, 0, pcns_me[i], 0};

size_cvn = t->get_caravan_size(pcns_me[i]);
size_cvn = t->get_caravan(pcns_me[i])->get_size();

// Not sold and caravan full, clear
if (size_cvn == TRACK_NUMERIC_MAX)
Expand All @@ -109,7 +109,7 @@ GameCommand UserBotEasy::generate_option(Game *g) {
if (size_cvn == 0)
return {OPTION_PLAY, pos, pcns_me[i], 0};

slot_cvn = t->get_slot_at(pcns_me[i], size_cvn);
slot_cvn = t->get_caravan(pcns_me[i])->get_slot(size_cvn);

// Cards have same rank
if (slot_cvn.card.rank == c_hand.rank)
Expand All @@ -119,7 +119,7 @@ GameCommand UserBotEasy::generate_option(Game *g) {
if (slot_cvn.card.suit == c_hand.suit)
return {OPTION_PLAY, pos, pcns_me[i], 0};

dir_cvn = t->get_caravan_direction(pcns_me[i]);
dir_cvn = t->get_caravan(pcns_me[i])->get_direction();

// Card ascending with caravan
if (dir_cvn == ASCENDING and
Expand All @@ -138,7 +138,7 @@ GameCommand UserBotEasy::generate_option(Game *g) {

// Put face card randomly on an opp caravan with the most cards
for (uint8_t i = 0; i < PLAYER_CARAVANS_MAX; ++i) {
size_cvn = t->get_caravan_size(pcns_opp[i]);
size_cvn = t->get_caravan(pcns_opp[i])->get_size();

if (size_cvn == 0)
continue;
Expand All @@ -151,8 +151,7 @@ GameCommand UserBotEasy::generate_option(Game *g) {

// If there exists an opp caravan with at least 1 card on it
if (i_cvn_most_cards < PLAYER_CARAVANS_MAX) {
slot_cvn = t->get_slot_at(
pcns_opp[i_cvn_most_cards], size_cvn);
slot_cvn = t->get_caravan(pcns_opp[i_cvn_most_cards])->get_slot(size_cvn);

if (slot_cvn.i_faces < TRACK_FACE_MAX) {
return {OPTION_PLAY,
Expand Down
2 changes: 1 addition & 1 deletion src/caravan/view/view_tui.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -519,7 +519,7 @@ std::shared_ptr<ftxui::Node> gen_caravan(Game *game, CaravanName cn, bool top) {
content = vbox(e);
title = L" " + caravan_to_wstr(cn, true) + L" ";

if (game->get_table()->get_caravan_size(cn) > 0) {
if (game->get_table()->get_caravan(cn)->get_size() > 0) {
title +=
L"(" +
std::to_wstring(caravan->get_bid()) +
Expand Down
Loading

0 comments on commit 524cea1

Please sign in to comment.