File indexing completed on 2025-02-23 05:14:54
0001 // bjgc_playertable.cpp -*-C++-*- 0002 #include <bjgc_playertable.h> 0003 0004 #include <iomanip> 0005 #include <ostream> 0006 0007 // STATIC HELPER FUNCTIONS 0008 static void printPlayerColumnLines(std::ostream& stream) 0009 { 0010 stream << "____ "; // card column 0011 0012 for (int i = 1; i <= bjgc::PlayerTable::k_NUM_CARD_VALUES; ++i) { 0013 stream << "______ "; 0014 } 0015 0016 stream << '\n'; 0017 } 0018 0019 namespace bjgc { 0020 0021 // ----------------- 0022 // class PlayerTable 0023 // ----------------- 0024 0025 // MANIPULATORS 0026 void PlayerTable::clearRow(int hand) 0027 { 0028 assert(0 <= hand); 0029 assert(hand < bjgb::State::k_NUM_STATES); 0030 0031 for (int i = 1; i <= k_NUM_CARD_VALUES; ++i) { 0032 exp(hand, i) = 0.0; 0033 } 0034 } 0035 0036 void PlayerTable::reset() 0037 { 0038 for (int j = 0; j < bjgb::State::k_NUM_STATES; ++j) { 0039 for (int i = 1; i <= k_NUM_CARD_VALUES; ++i) { 0040 exp(j, i) = -9e97; 0041 } 0042 } 0043 } 0044 0045 void PlayerTable::setRow(int hand, bjgb::Types::Double value) 0046 { 0047 assert(0 <= hand); 0048 assert(hand < bjgb::State::k_NUM_STATES); 0049 0050 for (int i = 1; i <= k_NUM_CARD_VALUES; ++i) { 0051 exp(hand, i) = value; 0052 } 0053 } 0054 0055 } // namespace bjgc 0056 0057 // FREE OPERATORS 0058 std::ostream& bjgc::operator<<(std::ostream& stream, const PlayerTable& table) 0059 { 0060 const int k_COL_WID = 6; // change long underline to match 0061 0062 const int oldPrecision = stream.precision(); 0063 0064 stream << std::setprecision(4); 0065 0066 // ======_ 0067 stream << "CARD " 0068 " ACE " 0069 " 2 " 0070 " 3 " 0071 " 4 " 0072 " 5 " 0073 " 6 " 0074 " 7 " 0075 " 8 " 0076 " 9 " 0077 " TEN " 0078 "\n"; 0079 0080 printPlayerColumnLines(stream); 0081 0082 for (int j = bjgb::State::k_NUM_STATES - 1; j >= 0; --j) { 0083 stream << ' ' << std::setw(2) << bjgb::State::stateId2String(j) << ": "; 0084 0085 for (int i = 1; i <= PlayerTable::k_NUM_CARD_VALUES; ++i) { 0086 stream << std::setw(k_COL_WID) << 100 * table.exp(j, i) << ' '; 0087 } 0088 0089 stream << '\n'; 0090 0091 if (bjgb::State::e_HZR == j || bjgb::State::hard(2) == j || bjgb::State::pair(1) == j) { 0092 printPlayerColumnLines(stream); 0093 } 0094 } 0095 0096 printPlayerColumnLines(stream); 0097 0098 stream.precision(oldPrecision); 0099 0100 return stream; 0101 }