#include "gameboard-graphics.hpp" #include "gameboard.hpp" #include "point2d.hpp" #include "tile-graphics.hpp" #include "tile.hpp" #include #include #include namespace Game { namespace Gameboard { namespace Graphics { namespace { template std::array make_patterned_bars(int playsize) { auto temp_bars = std::array{}; using bar_pattern_t = std::tuple; const auto bar_pattern_list = {std::make_tuple("┌", "┬", "┐"), std::make_tuple("├", "┼", "┤"), std::make_tuple("└", "┴", "┘")}; // generate types of horizontal bars... const auto generate_x_bar_pattern = [playsize](const bar_pattern_t t) { enum { PATTERN_HEAD, PATTERN_MID, PATTERN_TAIL }; constexpr auto sp = " "; constexpr auto separator = "──────"; std::ostringstream temp_richtext; temp_richtext << sp << std::get(t); for (auto i = 0; i < playsize; i++) { const auto is_not_last_column = (i < playsize - 1); temp_richtext << separator << (is_not_last_column ? std::get(t) : std::get(t)); } temp_richtext << "\n"; return temp_richtext.str(); }; std::transform(std::begin(bar_pattern_list), std::end(bar_pattern_list), std::begin(temp_bars), generate_x_bar_pattern); return temp_bars; } std::string drawSelf(GameBoard::gameboard_data_array_t gbda) { enum { TOP_BAR, XN_BAR, BASE_BAR, MAX_TYPES_OF_BARS }; const int playsize = getPlaySizeOfGameboardDataArray(gbda); const auto vertibar = make_patterned_bars(playsize); std::ostringstream str_os; for (auto y = 0; y < playsize; y++) { const auto is_first_row = (y == 0); str_os << (is_first_row ? std::get(vertibar) : std::get(vertibar)); for (auto x = 0; x < playsize; x++) { const auto is_first_col = (x == 0); const auto sp = (is_first_col ? " " : " "); const auto tile = getTileOnGameboardDataArray(gbda, point2D_t{x, y}); str_os << sp; str_os << "│ "; str_os << drawTileString(tile); } str_os << " │"; str_os << "\n"; } str_os << std::get(vertibar); str_os << "\n"; return str_os.str(); } } // namespace std::string GameBoardTextOutput(GameBoard gb) { return drawSelf(gb.gbda); } } // namespace Graphics } // namespace Gameboard } // namespace Game