diff --git a/mjcore/yaku/catalog/context.cpp b/mjcore/yaku/catalog/context.cpp index 234b8456..4bce0d69 100644 --- a/mjcore/yaku/catalog/context.cpp +++ b/mjcore/yaku/catalog/context.cpp @@ -14,7 +14,7 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_contextual() { _T("立直"), yaku::yakuCalculator::Yaku::yval_1han_menzen, [](const MentsuAnalysis* const analysis) -> bool { return ((analysis->shanten[shantenAll] == -1) && // 何かの手で和了になっている - (analysis->PlayerStat->RichiFlag.RichiFlag)); // 立直している + (analysis->PlayerStat()->RichiFlag.RichiFlag)); // 立直している } )); /* ダブリー */ @@ -23,8 +23,8 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_contextual() { _T("立直"), [](const MentsuAnalysis* const analysis) -> bool { return ((analysis->shanten[shantenAll] == -1) && // 何かの手で和了になっている - (analysis->PlayerStat->RichiFlag.RichiFlag) && // 立直している - (analysis->PlayerStat->RichiFlag.DoubleFlag)); // ダブル立直フラグが立っている + (analysis->PlayerStat()->RichiFlag.RichiFlag) && // 立直している + (analysis->PlayerStat()->RichiFlag.DoubleFlag)); // ダブル立直フラグが立っている } )); if (RuleData::chkRuleApplied("open_riichi")) { @@ -34,8 +34,8 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_contextual() { _T("立直"), [](const MentsuAnalysis* const analysis) -> bool { return ((analysis->shanten[shantenAll] == -1) && // 何かの手で和了になっている - (analysis->PlayerStat->RichiFlag.RichiFlag) && // 立直している - (analysis->PlayerStat->RichiFlag.OpenFlag)); // オープン立直フラグが立っている + (analysis->PlayerStat()->RichiFlag.RichiFlag) && // 立直している + (analysis->PlayerStat()->RichiFlag.OpenFlag)); // オープン立直フラグが立っている } )); /* ダブプン */ @@ -44,24 +44,24 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_contextual() { _T("立直"), _T("ダブル立直"), _T("オープン立直"), [](const MentsuAnalysis* const analysis) -> bool { return ((analysis->shanten[shantenAll] == -1) && // 何かの手で和了になっている - (analysis->PlayerStat->RichiFlag.RichiFlag) && // 立直している - (analysis->PlayerStat->RichiFlag.DoubleFlag) && // ダブル立直フラグが立っている - (analysis->PlayerStat->RichiFlag.OpenFlag)); // オープン立直フラグが立っている + (analysis->PlayerStat()->RichiFlag.RichiFlag) && // 立直している + (analysis->PlayerStat()->RichiFlag.DoubleFlag) && // ダブル立直フラグが立っている + (analysis->PlayerStat()->RichiFlag.OpenFlag)); // オープン立直フラグが立っている } )); /* プンリー放銃 */ yaku::yakuCalculator::YakuCatalog::Instantiate()->catalog.push_back(Yaku( _T("開立直栄和"), yaku::yakuCalculator::Yaku::HANFUNC( [](const MentsuAnalysis* const analysis) { - return (*analysis->MenzenFlag) ? + return (analysis->MenzenFlag()) ? yaku::yakuCalculator::Yaku::YAKU_HAN(yaku::yakuCalculator::Yaku::YAKU_HAN::HAN(11, yaku::yakuCalculator::Han), yaku::yakuCalculator::Yaku::YAKU_HAN::HAN::yv_null) : yaku::yakuCalculator::Yaku::YAKU_HAN(); }), [](const MentsuAnalysis* const analysis) -> bool { return ((analysis->shanten[shantenAll] == -1) && // 何かの手で和了になっている - (analysis->PlayerStat->RichiFlag.RichiFlag) && // 立直している - (analysis->PlayerStat->RichiFlag.OpenFlag) && // オープン立直フラグが立っている - (!*analysis->TsumoAgariFlag) && // ロン + (analysis->PlayerStat()->RichiFlag.RichiFlag) && // 立直している + (analysis->PlayerStat()->RichiFlag.OpenFlag) && // オープン立直フラグが立っている + (!analysis->TsumoAgariFlag()) && // ロン (analysis->GameStat->CurrentPlayer.Furikomi >= 0) && (!analysis->GameStat->Player[analysis->GameStat->CurrentPlayer.Furikomi].RichiFlag.RichiFlag)); // 非リーチ者からの和了 } @@ -76,8 +76,8 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_contextual() { /* 必ず立直と複合する */ [](const MentsuAnalysis* const analysis) -> bool { return ((analysis->shanten[shantenAll] == -1) && // 何かの手で和了になっている - (analysis->PlayerStat->RichiFlag.RichiFlag) && // 立直している - (analysis->PlayerStat->RichiFlag.IppatsuFlag)); // 一発フラグが立っている + (analysis->PlayerStat()->RichiFlag.RichiFlag) && // 立直している + (analysis->PlayerStat()->RichiFlag.IppatsuFlag)); // 一発フラグが立っている } )); /* 超一発(リーチ一発を下家から和了る) */ @@ -89,9 +89,9 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_contextual() { _T("一発"), /* 必ず立直と複合する */ [](const MentsuAnalysis* const analysis) -> bool { return ((analysis->shanten[shantenAll] == -1) && // 何かの手で和了になっている - (analysis->PlayerStat->RichiFlag.RichiFlag) && // 立直している - (analysis->PlayerStat->RichiFlag.IppatsuFlag) && // 一発フラグが立っている - (!*analysis->TsumoAgariFlag) && // ロンである + (analysis->PlayerStat()->RichiFlag.RichiFlag) && // 立直している + (analysis->PlayerStat()->RichiFlag.IppatsuFlag) && // 一発フラグが立っている + (!analysis->TsumoAgariFlag()) && // ロンである ( (analysis->GameStat->CurrentPlayer.Furikomi == RelativePositionOf(analysis->player, sRight)) || // 下家から和了った ((analysis->GameStat->chkGameType(SanmaT)) && @@ -109,10 +109,10 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_contextual() { /* 必ず立直、一発、ツモと複合する */ [](const MentsuAnalysis* const analysis) -> bool { return ((analysis->shanten[shantenAll] == -1) && // 何かの手で和了になっている - (analysis->PlayerStat->RichiFlag.RichiFlag) && // 立直している - (analysis->PlayerStat->RichiFlag.IppatsuFlag) && // 一発フラグが立っている - (*analysis->TsumoAgariFlag) && // ツモである - (analysis->TsumoHai->tile == SouthWind)); // 南で和了 + (analysis->PlayerStat()->RichiFlag.RichiFlag) && // 立直している + (analysis->PlayerStat()->RichiFlag.IppatsuFlag) && // 一発フラグが立っている + (analysis->TsumoAgariFlag()) && // ツモである + (analysis->TsumoHai().tile == SouthWind)); // 南で和了 } )); } @@ -123,12 +123,12 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_contextual() { /* 立直は複合するらしい */ [](const MentsuAnalysis* const analysis) -> bool { if ((analysis->shanten[shantenAll] == -1) && // 何かの手で和了になっている - (analysis->PlayerStat->RichiFlag.RichiFlag)) // 立直している + (analysis->PlayerStat()->RichiFlag.RichiFlag)) // 立直している { - for (int i = 1; i < analysis->PlayerStat->DiscardPointer; i++) - if ((analysis->PlayerStat->Discard[i].tcode.tile == BambooOne) && - ((analysis->PlayerStat->Discard[i].dstat == discardRiichi) || - (analysis->PlayerStat->Discard[i].dstat == discardRiichiTaken))) + for (int i = 1; i < analysis->PlayerStat()->DiscardPointer; i++) + if ((analysis->PlayerStat()->Discard[i].tcode.tile == BambooOne) && + ((analysis->PlayerStat()->Discard[i].dstat == discardRiichi) || + (analysis->PlayerStat()->Discard[i].dstat == discardRiichiTaken))) return true; return false; } @@ -142,9 +142,9 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_contextual() { /* ダブル立直に追加する役 */ [](const MentsuAnalysis* const analysis) -> bool { return ((analysis->shanten[shantenAll] == -1) && // 何かの手で和了になっている - (analysis->PlayerStat->RichiFlag.RichiFlag) && // 立直している - (analysis->PlayerStat->RichiFlag.DoubleFlag) && // ダブル立直フラグが立っている - (analysis->TsumoHai->tile == WhiteDragon)); // 和了牌が白 + (analysis->PlayerStat()->RichiFlag.RichiFlag) && // 立直している + (analysis->PlayerStat()->RichiFlag.DoubleFlag) && // ダブル立直フラグが立っている + (analysis->TsumoHai().tile == WhiteDragon)); // 和了牌が白 } )); /* 北四巡(立直自摸) */ @@ -153,8 +153,8 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_contextual() { _T("北四巡"), get_yaku_han("pei4jun_riichi"), [](const MentsuAnalysis* const analysis) -> bool { return ((analysis->shanten[shantenAll] == -1) && // 何かの手で和了になっている - (analysis->PlayerStat->RichiFlag.RichiFlag) && // 立直している - (analysis->TsumoHai->tile == NorthWind) && // 和了牌が北 + (analysis->PlayerStat()->RichiFlag.RichiFlag) && // 立直している + (analysis->TsumoHai().tile == NorthWind) && // 和了牌が北 (analysis->GameStat->TurnRound == 4)); // 4巡目である } )); @@ -168,7 +168,7 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_contextual() { [](const MentsuAnalysis* const analysis) -> bool { return ((analysis->shanten[shantenAll] == -1) && // 何かの手で和了になっている (analysis->GameStat->playerwind(analysis->player) == sEast) && // 親である(東家として決め打ち……) - (analysis->PlayerStat->FirstDrawFlag)); // 天和・地和フラグが立っている + (analysis->PlayerStat()->FirstDrawFlag)); // 天和・地和フラグが立っている } )); /* 地和 */ @@ -178,8 +178,8 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_contextual() { [](const MentsuAnalysis* const analysis) -> bool { return ((analysis->shanten[shantenAll] == -1) && // 何かの手で和了になっている (analysis->GameStat->playerwind(analysis->player) != sEast) && // 親である(東家として決め打ち……) - (analysis->PlayerStat->FirstDrawFlag) && // 天和・地和フラグが立っている - (*analysis->TsumoAgariFlag)); // ツモアガリ + (analysis->PlayerStat()->FirstDrawFlag) && // 天和・地和フラグが立っている + (analysis->TsumoAgariFlag())); // ツモアガリ } )); /* 2位じゃ駄目なんですか? */ @@ -189,8 +189,8 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_contextual() { [](const MentsuAnalysis* const analysis) -> bool { return ((analysis->shanten[shantenAll] == -1) && // 何かの手で和了になっている (analysis->GameStat->playerwind(analysis->player) != sEast) && // 親である(東家として決め打ち……) - (analysis->PlayerStat->FirstDrawFlag) && // 天和・地和フラグが立っている - (!*analysis->TsumoAgariFlag)); // ロンアガリ + (analysis->PlayerStat()->FirstDrawFlag) && // 天和・地和フラグが立っている + (!analysis->TsumoAgariFlag())); // ロンアガリ } )); } @@ -202,8 +202,8 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_contextual() { _T("自摸"), _T("門前清"), [](const MentsuAnalysis* const analysis) -> bool { return ((analysis->shanten[shantenAll] == -1) && // 和了になっている - (*analysis->MenzenFlag) && // 門前である - (*analysis->TsumoAgariFlag)); // ツモアガリ + (analysis->MenzenFlag()) && // 門前である + (analysis->TsumoAgariFlag())); // ツモアガリ } )); /* 門前清 */ @@ -211,7 +211,7 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_contextual() { _T("門前清"), yaku::yakuCalculator::Yaku::yval_2, [](const MentsuAnalysis* const analysis) -> bool { return ((analysis->shanten[shantenAll] == -1) && // 和了になっている - (*analysis->MenzenFlag)); // 門前である + (analysis->MenzenFlag())); // 門前である } )); /* 自摸 */ @@ -219,7 +219,7 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_contextual() { _T("自摸"), yaku::yakuCalculator::Yaku::yval_1, [](const MentsuAnalysis* const analysis) -> bool { return ((analysis->shanten[shantenAll] == -1) && // 和了になっている - (*analysis->TsumoAgariFlag)); // ツモアガリ + (analysis->TsumoAgariFlag())); // ツモアガリ } )); #else /* GUOBIAO */ @@ -228,8 +228,8 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_contextual() { _T("門前清自摸和"), yaku::yakuCalculator::Yaku::yval_1han_menzen, [](const MentsuAnalysis* const analysis) -> bool { return ((analysis->shanten[shantenAll] == -1) && // 何かの手で和了になっている - (*analysis->MenzenFlag) && // 門前である - (*analysis->TsumoAgariFlag)); // ツモアガリ + (analysis->MenzenFlag()) && // 門前である + (analysis->TsumoAgariFlag())); // ツモアガリ } )); #endif /* GUOBIAO */ @@ -243,8 +243,8 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_contextual() { _T("三隻転覆"), get_yaku_han("sanseki_tempuku"), [](const MentsuAnalysis* const analysis) -> bool { return ((analysis->shanten[shantenAll] == -1) && // 何かの手で和了になっている - (*analysis->TsumoAgariFlag) && // ツモアガリ - (!analysis->PlayerStat->RichiFlag.RichiFlag) && // 自分はリーチしていない + (analysis->TsumoAgariFlag()) && // ツモアガリ + (!analysis->PlayerStat()->RichiFlag.RichiFlag) && // 自分はリーチしていない (analysis->GameStat->Player[RelativePositionOf(analysis->player, sRight)].RichiFlag.RichiFlag) && (analysis->GameStat->Player[RelativePositionOf(analysis->player, sOpposite)].RichiFlag.RichiFlag) && (analysis->GameStat->Player[RelativePositionOf(analysis->player, sLeft)].RichiFlag.RichiFlag) // 他家全員立直 @@ -257,8 +257,8 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_contextual() { _T("起死回生"), get_yaku_han("kishi_kaisei"), [](const MentsuAnalysis* const analysis) -> bool { return ((analysis->shanten[shantenAll] == -1) && // 何かの手で和了になっている - (*analysis->TsumoAgariFlag) && // ツモアガリ - (!analysis->PlayerStat->RichiFlag.RichiFlag) && // 自分はリーチしていない + (analysis->TsumoAgariFlag()) && // ツモアガリ + (!analysis->PlayerStat()->RichiFlag.RichiFlag) && // 自分はリーチしていない (analysis->GameStat->Player[RelativePositionOf(analysis->player, sRight)].RichiFlag.DoubleFlag) && (analysis->GameStat->Player[RelativePositionOf(analysis->player, sOpposite)].RichiFlag.DoubleFlag) && (analysis->GameStat->Player[RelativePositionOf(analysis->player, sLeft)].RichiFlag.DoubleFlag) // 他家全員ダブリー(!) @@ -274,7 +274,7 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_contextual() { _T("不死鳥"), get_yaku_han("phoenix"), [](const MentsuAnalysis* const analysis) -> bool { return ((analysis->shanten[shantenAll] == -1) && // 何かの手で和了になっている - (analysis->PlayerStat->YakitoriFlag) && // 焼き鳥である + (analysis->PlayerStat()->YakitoriFlag) && // 焼き鳥である (isFinalRound(analysis->GameStat))); // オーラスである } )); @@ -293,7 +293,7 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_contextual() { [](const MentsuAnalysis* const analysis) -> bool { return ((analysis->shanten[shantenAll] == -1) && // 何かの手で和了になっている (analysis->GameStat->KangFlag.kangFlag) && // 槓をした直後である - (*analysis->TsumoAgariFlag)); // ツモアガリ + (analysis->TsumoAgariFlag())); // ツモアガリ } )); #ifndef GUOBIAO @@ -307,7 +307,7 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_contextual() { [](const MentsuAnalysis* const analysis) -> bool { return ((analysis->shanten[shantenAll] == -1) && // 何かの手で和了になっている (analysis->GameStat->KangFlag.kangFlag) && // 槓をした直後である - (*analysis->TsumoAgariFlag) && // ツモアガリ + (analysis->TsumoAgariFlag()) && // ツモアガリ (analysis->GameStat->PaoFlag[pyMinkan].paoPlayer >= 0)); // 明槓の直後 } )); @@ -319,7 +319,7 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_contextual() { [](const MentsuAnalysis* const analysis) -> bool { return ((analysis->shanten[shantenAll] == -1) && // 何かの手で和了になっている (analysis->GameStat->KangFlag.kangFlag) && // 槓をした直後である - (*analysis->TsumoAgariFlag) && // ツモアガリ + (analysis->TsumoAgariFlag()) && // ツモアガリ (analysis->GameStat->KangFlag.chainFlag >= 2)); // 連続で槓した直後 } )); @@ -331,8 +331,8 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_contextual() { [](const MentsuAnalysis* const analysis) -> bool { return ((analysis->shanten[shantenAll] == -1) && // 何かの手で和了になっている (analysis->GameStat->KangFlag.kangFlag) && // 槓をした直後である - (*analysis->TsumoAgariFlag) && // ツモアガリ - (analysis->TsumoHai->tile == CircleFive)); // 和了牌が五筒 + (analysis->TsumoAgariFlag()) && // ツモアガリ + (analysis->TsumoHai().tile == CircleFive)); // 和了牌が五筒 } )); /* 中上開花 */ @@ -343,8 +343,8 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_contextual() { [](const MentsuAnalysis* const analysis) -> bool { return ((analysis->shanten[shantenAll] == -1) && // 何かの手で和了になっている (analysis->GameStat->KangFlag.kangFlag) && // 槓をした直後である - (*analysis->TsumoAgariFlag) && // ツモアガリ - (analysis->TsumoHai->tile == RedDragon)); // 和了牌が中 + (analysis->TsumoAgariFlag()) && // ツモアガリ + (analysis->TsumoHai().tile == RedDragon)); // 和了牌が中 } )); /* 頭槓和 */ @@ -355,7 +355,7 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_contextual() { [](const MentsuAnalysis* const analysis) -> bool { return ((analysis->shanten[shantenAll] == -1) && // 何かの手で和了になっている (analysis->GameStat->KangFlag.kangFlag) && // 槓をした直後である - (*analysis->TsumoAgariFlag) && // ツモアガリ + (analysis->TsumoAgariFlag()) && // ツモアガリ (analysis->GameStat->KangFlag.topFlag)); // 頭槓和フラグが立っている } )); @@ -367,7 +367,7 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_contextual() { [](const MentsuAnalysis* const analysis) -> bool { return ((analysis->shanten[shantenAll] == -1) && // 何かの手で和了になっている (analysis->GameStat->KangFlag.kangFlag) && // 槓をした直後である - (*analysis->TsumoAgariFlag) && // ツモアガリ + (analysis->TsumoAgariFlag()) && // ツモアガリ (analysis->GameStat->tilesLeft() == 0)); // 王牌を除いた残り山牌が0 } )); @@ -379,7 +379,7 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_contextual() { [](const MentsuAnalysis* const analysis) -> bool { return ((analysis->shanten[shantenAll] == -1) && // 何かの手で和了になっている (analysis->GameStat->KangFlag.kangFlag) && // 槓をした直後である - (*analysis->TsumoAgariFlag) && // ツモアガリ + (analysis->TsumoAgariFlag()) && // ツモアガリ (isFinalRound(analysis->GameStat))); // オーラスである } )); @@ -391,7 +391,7 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_contextual() { [](const MentsuAnalysis* const analysis) -> bool { return ((analysis->shanten[shantenAll] == -1) && // 何かの手で和了になっている (analysis->GameStat->KangFlag.kangFlag) && // 槓をした直後である - (*analysis->TsumoAgariFlag) && // ツモアガリ + (analysis->TsumoAgariFlag()) && // ツモアガリ (analysis->GameStat->GameRound / 4 == 0) && // 東場 (analysis->GameStat->playerwind(analysis->player) == sEast) && // 東家 (analysis->KangziCount[EastWind] >= 1)); // 東の槓子がある @@ -405,10 +405,10 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_contextual() { [](const MentsuAnalysis* const analysis) -> bool { return ((analysis->shanten[shantenAll] == -1) && // 何かの手で和了になっている (analysis->GameStat->KangFlag.kangFlag) && // 槓をした直後である - (*analysis->TsumoAgariFlag) && // ツモアガリ - ((analysis->TsumoHai->tile == CharacterThree) || // 和了牌が三萬か - (analysis->TsumoHai->tile == CircleThree) || // 三筒か - (analysis->TsumoHai->tile == BambooThree)) && // 三索 + (analysis->TsumoAgariFlag()) && // ツモアガリ + ((analysis->TsumoHai().tile == CharacterThree) || // 和了牌が三萬か + (analysis->TsumoHai().tile == CircleThree) || // 三筒か + (analysis->TsumoHai().tile == BambooThree)) && // 三索 (analysis->KangziCount[CircleFive] >= 1)); // 五筒を槓している } )); @@ -429,7 +429,7 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_contextual() { #ifndef GUOBIAO (!analysis->GameStat->KangFlag.kangFlag) && // 槓をした直後ではない #endif /* GUOBIAO */ - (*analysis->TsumoAgariFlag) && // ツモアガリ + (analysis->TsumoAgariFlag()) && // ツモアガリ (analysis->GameStat->tilesLeft() == 0)); // ハイテイである } )); @@ -442,9 +442,9 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_contextual() { [](const MentsuAnalysis* const analysis) -> bool { return ((analysis->shanten[shantenAll] == -1) && // 何かの手で和了になっている (!analysis->GameStat->KangFlag.kangFlag) && // 槓をした直後ではない - (*analysis->TsumoAgariFlag) && // ツモアガリ + (analysis->TsumoAgariFlag()) && // ツモアガリ (analysis->GameStat->tilesLeft() == 0) && // ハイテイである - (analysis->TsumoHai->tile == CircleOne)); // 和了牌が一筒 + (analysis->TsumoHai().tile == CircleOne)); // 和了牌が一筒 } )); /* 海底撈針 */ @@ -454,9 +454,9 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_contextual() { [](const MentsuAnalysis* const analysis) -> bool { return ((analysis->shanten[shantenAll] == -1) && // 何かの手で和了になっている (!analysis->GameStat->KangFlag.kangFlag) && // 槓をした直後ではない - (*analysis->TsumoAgariFlag) && // ツモアガリ + (analysis->TsumoAgariFlag()) && // ツモアガリ (analysis->GameStat->tilesLeft() == 0) && // ハイテイである - (analysis->TsumoHai->tile == CharacterOne)); // 和了牌が一萬 + (analysis->TsumoHai().tile == CharacterOne)); // 和了牌が一萬 } )); /* 海底撈花 */ @@ -466,9 +466,9 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_contextual() { [](const MentsuAnalysis* const analysis) -> bool { return ((analysis->shanten[shantenAll] == -1) && // 何かの手で和了になっている (!analysis->GameStat->KangFlag.kangFlag) && // 槓をした直後ではない - (*analysis->TsumoAgariFlag) && // ツモアガリ + (analysis->TsumoAgariFlag()) && // ツモアガリ (analysis->GameStat->tilesLeft() == 0) && // ハイテイである - (analysis->TsumoHai->tile == CircleFive)); // 和了牌が五筒 + (analysis->TsumoHai().tile == CircleFive)); // 和了牌が五筒 } )); /* 発底摸月 */ @@ -479,9 +479,9 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_contextual() { [](const MentsuAnalysis* const analysis) -> bool { return ((analysis->shanten[shantenAll] == -1) && // 何かの手で和了になっている (!analysis->GameStat->KangFlag.kangFlag) && // 槓をした直後ではない - (*analysis->TsumoAgariFlag) && // ツモアガリ + (analysis->TsumoAgariFlag()) && // ツモアガリ (analysis->GameStat->tilesLeft() == 0) && // ハイテイである - (analysis->TsumoHai->tile == GreenDragon)); // 和了牌が發 + (analysis->TsumoHai().tile == GreenDragon)); // 和了牌が發 } )); /* 深海底 */ @@ -492,7 +492,7 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_contextual() { [](const MentsuAnalysis* const analysis) -> bool { return ((analysis->shanten[shantenAll] == -1) && // 何かの手で和了になっている (!analysis->GameStat->KangFlag.kangFlag) && // 槓をした直後ではない - (*analysis->TsumoAgariFlag) && // ツモアガリ + (analysis->TsumoAgariFlag()) && // ツモアガリ (analysis->GameStat->tilesLeft() == 0) && // ハイテイである (isFinalRound(analysis->GameStat))); // オーラスである } @@ -508,7 +508,7 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_contextual() { [](const MentsuAnalysis* const analysis) -> bool { return ((analysis->shanten[shantenAll] == -1) && // 何かの手で和了になっている (!analysis->GameStat->KangFlag.kangFlag) && // 槓をした直後ではない - (!*analysis->TsumoAgariFlag) && // ロンアガリ + (!analysis->TsumoAgariFlag()) && // ロンアガリ (analysis->GameStat->tilesLeft() == 0)); // ハイテイである } )); @@ -521,9 +521,9 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_contextual() { [](const MentsuAnalysis* const analysis) -> bool { return ((analysis->shanten[shantenAll] == -1) && // 何かの手で和了になっている (!analysis->GameStat->KangFlag.kangFlag) && // 槓をした直後ではない - (!*analysis->TsumoAgariFlag) && // ロンアガリ + (!analysis->TsumoAgariFlag()) && // ロンアガリ (analysis->GameStat->tilesLeft() == 0) && // ハイテイである - (analysis->TsumoHai->tile == CircleNine)); // 和了牌が九筒 + (analysis->TsumoHai().tile == CircleNine)); // 和了牌が九筒 } )); /* 白底撈魚 */ @@ -534,9 +534,9 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_contextual() { [](const MentsuAnalysis* const analysis) -> bool { return ((analysis->shanten[shantenAll] == -1) && // 何かの手で和了になっている (!analysis->GameStat->KangFlag.kangFlag) && // 槓をした直後ではない - (!*analysis->TsumoAgariFlag) && // ロンアガリ + (!analysis->TsumoAgariFlag()) && // ロンアガリ (analysis->GameStat->tilesLeft() == 0) && // ハイテイである - (analysis->TsumoHai->tile == WhiteDragon)); // 和了牌が白 + (analysis->TsumoHai().tile == WhiteDragon)); // 和了牌が白 } )); /* 深淵和 */ @@ -547,7 +547,7 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_contextual() { [](const MentsuAnalysis* const analysis) -> bool { return ((analysis->shanten[shantenAll] == -1) && // 何かの手で和了になっている (!analysis->GameStat->KangFlag.kangFlag) && // 槓をした直後ではない - (!*analysis->TsumoAgariFlag) && // ロンアガリ + (!analysis->TsumoAgariFlag()) && // ロンアガリ (analysis->GameStat->tilesLeft() == 0) && // ハイテイである (isFinalRound(analysis->GameStat))); // オーラスである } @@ -572,7 +572,7 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_contextual() { return ((analysis->shanten[shantenAll] == -1) && // 何かの手で和了になっている (!analysis->GameStat->KangFlag.kangFlag) && // 槓をした直後ではない (analysis->GameStat->tilesLeft() == 0) && // ハイテイである - (analysis->TsumoHai->tile == WhiteDragon)); // 和了牌が白 + (analysis->TsumoHai().tile == WhiteDragon)); // 和了牌が白 } )); /* 石の上にも三年 */ @@ -584,7 +584,7 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_contextual() { return ((analysis->shanten[shantenAll] == -1) && // 何かの手で和了になっている (!analysis->GameStat->KangFlag.kangFlag) && // 槓をした直後ではない (analysis->GameStat->tilesLeft() == 0) && // ハイテイである - (analysis->PlayerStat->RichiFlag.DoubleFlag)); // ダブル立直している + (analysis->PlayerStat()->RichiFlag.DoubleFlag)); // ダブル立直している } )); #endif /* GUOBIAO */ @@ -599,7 +599,7 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_contextual() { [](const MentsuAnalysis* const analysis) -> bool { return ((analysis->shanten[shantenAll] == -1) && // 何かの手で和了になっている (analysis->GameStat->KangFlag.chainFlag >= 1) && // 槓をした直後である - (!*analysis->TsumoAgariFlag)); // ロンアガリ + (!analysis->TsumoAgariFlag())); // ロンアガリ } )); #endif /* GUOBIAO */ @@ -626,7 +626,7 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_contextual() { [](const MentsuAnalysis* const analysis) -> bool { return ((analysis->shanten[shantenAll] == -1) && // 何かの手で和了になっている (analysis->GameStat->KangFlag.chankanFlag) && // 槍槓フラグが立っている - (analysis->TsumoHai->tile == BambooTwo)); // 和了牌が二索 + (analysis->TsumoHai().tile == BambooTwo)); // 和了牌が二索 } )); /* 深搶槓 */ @@ -648,9 +648,9 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_contextual() { [](const MentsuAnalysis* const analysis) -> bool { return ((analysis->shanten[shantenAll] == -1) && // 何かの手で和了になっている (analysis->GameStat->KangFlag.chankanFlag) && // 槍槓フラグが立っている - ((analysis->SeenTiles[analysis->TsumoHai->tile] + - analysis->TileCount[analysis->TsumoHai->tile]) >= - (*analysis->TsumoAgariFlag ? 4 : 5)) && // ラス牌かどうか判定 + ((analysis->SeenTiles[analysis->TsumoHai().tile] + + analysis->TileCount[analysis->TsumoHai().tile]) >= + (analysis->TsumoAgariFlag() ? 4 : 5)) && // ラス牌かどうか判定 (analysis->MachiInfo.MachiMen == 1) // 1面待ちである ); } @@ -707,9 +707,9 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_contextual() { _T("四馬路"), get_yaku_han("sumaro"), [](const MentsuAnalysis* const analysis) -> bool { return ((analysis->shanten[shantenAll] == -1) && // 何かの手で和了になっている - (analysis->TsumoHai->tile == CharacterFour) && // 和了牌が四萬 - (!*analysis->TsumoAgariFlag) && // ロンアガリ - (analysis->PlayerStat->SumaroFlag)); // 解禁フラグが立っている + (analysis->TsumoHai().tile == CharacterFour) && // 和了牌が四萬 + (!analysis->TsumoAgariFlag()) && // ロンアガリ + (analysis->PlayerStat()->SumaroFlag)); // 解禁フラグが立っている } )); /* 美鈴 */ @@ -718,8 +718,8 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_contextual() { _T("美鈴"), get_yaku_han("meiling"), [](const MentsuAnalysis* const analysis) -> bool { return ((analysis->shanten[shantenAll] == -1) && // 何かの手で和了になっている - (analysis->TsumoHai->tile == BambooTwo) && // 和了牌が二索 - (!*analysis->TsumoAgariFlag)); // ロンアガリ + (analysis->TsumoHai().tile == BambooTwo) && // 和了牌が二索 + (!analysis->TsumoAgariFlag())); // ロンアガリ } )); /* 客来和(オタ風の出和了) */ @@ -728,9 +728,9 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_contextual() { _T("客来和"), get_yaku_han("otakaze_ron"), [](const MentsuAnalysis* const analysis) -> bool { bool yakuFlag; - switch (TileCode tc = analysis->TsumoHai->tile) { + switch (TileCode tc = analysis->TsumoHai().tile) { case EastWind: case SouthWind: case WestWind: case NorthWind: // 風牌だった - yakuFlag = (!*analysis->TsumoAgariFlag); // 仮にフラグ設定 + yakuFlag = (!analysis->TsumoAgariFlag()); // 仮にフラグ設定 if (tc == Wind2Tile(static_cast(analysis->GameStat->playerwind(analysis->player)))) // 自風だった yakuFlag = false; if (tc == Wind2Tile(analysis->GameStat->GameRound / 4)) // 場風だった @@ -773,14 +773,14 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_contextual() { tmpYakuNameList[i], get_yaku_han(tmpRuleCodeList[i]), [tc](const MentsuAnalysis* const analysis) -> bool { bool yakuFlag = false; - for (int i = 0; i < analysis->PlayerStat->DiscardPointer; i++) { - if (analysis->PlayerStat->Discard[i].tcode.tile == tc) { + for (int i = 0; i < analysis->PlayerStat()->DiscardPointer; i++) { + if (analysis->PlayerStat()->Discard[i].tcode.tile == tc) { yakuFlag = true; break; // 現物フリテンである } } return ((analysis->shanten[shantenAll] == -1) && // 何かの手で和了になっている - (analysis->TsumoHai->tile == tc) && // 和了牌 - (*analysis->TsumoAgariFlag) && (yakuFlag) && // フリテンツモ + (analysis->TsumoHai().tile == tc) && // 和了牌 + (analysis->TsumoAgariFlag()) && (yakuFlag) && // フリテンツモ (analysis->Machi == yaku::yakuCalculator::machiTanki)); // 単騎待ちである } )); @@ -796,8 +796,8 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_contextual() { _T("金龍天和"), get_yaku_han("golddragon"), [](const MentsuAnalysis* const analysis) -> bool { return ((analysis->shanten[shantenAll] == -1) && // 何かの手で和了になっている - (analysis->TsumoHai->tile >= CircleOne) && // 和了牌が筒子 - (analysis->TsumoHai->tile <= CircleNine) && + (analysis->TsumoHai().tile >= CircleOne) && // 和了牌が筒子 + (analysis->TsumoHai().tile <= CircleNine) && (analysis->GameStat->TurnRound <= 3)); // 3巡目以内 } )); @@ -807,8 +807,8 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_contextual() { _T("旋風栄和"), get_yaku_han("whirlwind"), [](const MentsuAnalysis* const analysis) -> bool { return ((analysis->shanten[shantenAll] == -1) && // 何かの手で和了になっている - (analysis->TsumoHai->tile >= EastWind) && // 和了牌が風牌 - (analysis->TsumoHai->tile <= NorthWind) && + (analysis->TsumoHai().tile >= EastWind) && // 和了牌が風牌 + (analysis->TsumoHai().tile <= NorthWind) && (analysis->GameStat->TurnRound <= 3)); // 3巡目以内 } )); @@ -835,7 +835,7 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_contextual() { _T("猫まっしぐら"), get_yaku_han("nekomasshigura"), [](const MentsuAnalysis* const analysis) -> bool { return ((analysis->shanten[shantenRegular] == -1) && // 面子手で和了になっている - (analysis->TsumoHai->tile == BambooThree) && // 和了牌が三索 + (analysis->TsumoHai().tile == BambooThree) && // 和了牌が三索 (analysis->Machi == yaku::yakuCalculator::machiKanchan)); // 嵌張待ち } )); @@ -854,12 +854,12 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_contextual() { #endif /* GUOBIAO */ [](const MentsuAnalysis* const analysis) -> bool { bool yakuFlag = - *analysis->TsumoAgariFlag ? // ツモアガリだったら、 - (analysis->SeenTiles[analysis->TsumoHai->tile] + // 見えてる牌と - analysis->TileCount[analysis->TsumoHai->tile] >= 4) // 手の内の牌を足して4枚 + analysis->TsumoAgariFlag() ? // ツモアガリだったら、 + (analysis->SeenTiles[analysis->TsumoHai().tile] + // 見えてる牌と + analysis->TileCount[analysis->TsumoHai().tile] >= 4) // 手の内の牌を足して4枚 : // ロンだったら、 - (analysis->SeenTiles[analysis->TsumoHai->tile] + // 見えてる牌と - analysis->TileCount[analysis->TsumoHai->tile] > 4); // 手の内の牌を足して4枚 + (analysis->SeenTiles[analysis->TsumoHai().tile] + // 見えてる牌と + analysis->TileCount[analysis->TsumoHai().tile] > 4); // 手の内の牌を足して4枚 #ifdef GUOBIAO return yakuFlag; #else /* GUOBIAO */ @@ -878,7 +878,7 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_contextual() { _T("初槓"), get_yaku_han("shokan"), [](const MentsuAnalysis* const analysis) -> bool { return ((analysis->shanten[shantenAll] == -1) && // 何かの手で和了になっている - (analysis->PlayerStat->shokanFlag)); // フラグが立っている + (analysis->PlayerStat()->shokanFlag)); // フラグが立っている } )); /* 槓三巡 */ @@ -887,7 +887,7 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_contextual() { _T("槓三巡"), get_yaku_han("kansanjun"), [](const MentsuAnalysis* const analysis) -> bool { return ((analysis->shanten[shantenAll] == -1) && // 何かの手で和了になっている - (analysis->PlayerStat->kansanjunFlag)); // フラグが立っている + (analysis->PlayerStat()->kansanjunFlag)); // フラグが立っている } )); /* 戻牌天和 */ @@ -896,7 +896,7 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_contextual() { _T("戻牌天和"), get_yaku_han("renpai_tenhoh"), [](const MentsuAnalysis* const analysis) -> bool { return ((analysis->shanten[shantenAll] == -1) && // 何かの手で和了になっている - (analysis->PlayerStat->renpaiTenhohStat > 0)); // フラグが立っている + (analysis->PlayerStat()->renpaiTenhohStat > 0)); // フラグが立っている } )); #endif /* GUOBIAO */ diff --git a/mjcore/yaku/catalog/dora.cpp b/mjcore/yaku/catalog/dora.cpp index 700ad397..5d8ecd9a 100644 --- a/mjcore/yaku/catalog/dora.cpp +++ b/mjcore/yaku/catalog/dora.cpp @@ -10,8 +10,8 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_dora() { _T("銅鑼和"), get_yaku_han("dorahoh"), [](const MentsuAnalysis* const analysis) -> bool { return ((analysis->shanten[shantenAll] == -1) && // 何かの手で和了になっている - ((analysis->GameStat->DoraFlag.Omote[analysis->TsumoHai->tile] > 0) || // ツモ牌が表ドラになっている(裏ドラは対象外) - (analysis->TsumoHai->red != Normal))); // 赤ドラか青ドラになっている + ((analysis->GameStat->DoraFlag.Omote[analysis->TsumoHai().tile] > 0) || // ツモ牌が表ドラになっている(裏ドラは対象外) + (analysis->TsumoHai().red != Normal))); // 赤ドラか青ドラになっている } )); /* 北四枚抜き */ @@ -20,7 +20,7 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_dora() { _T("北四枚抜き"), get_yaku_han("four_northes"), [](const MentsuAnalysis* const analysis) -> bool { return ((analysis->shanten[shantenAll] == -1) && // 何かの手で和了になっている - (analysis->PlayerStat->NorthFlag == 4)); // 北4枚 + (analysis->PlayerStat()->NorthFlag == 4)); // 北4枚 } )); /* 八仙過海 */ @@ -30,10 +30,10 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_dora() { _T("春夏秋冬"), _T("四華開嶺"), _T("本花季節牌"), _T("本花草木牌"), [](const MentsuAnalysis* const analysis) -> bool { return ((analysis->shanten[shantenAll] == -1) && // 何かの手で和了になっている - (analysis->PlayerStat->FlowerFlag.Spring) && (analysis->PlayerStat->FlowerFlag.Summer) && - (analysis->PlayerStat->FlowerFlag.Autumn) && (analysis->PlayerStat->FlowerFlag.Winter) && - (analysis->PlayerStat->FlowerFlag.Plum) && (analysis->PlayerStat->FlowerFlag.Orchid) && - (analysis->PlayerStat->FlowerFlag.Chrys) && (analysis->PlayerStat->FlowerFlag.Bamboo)); + (analysis->PlayerStat()->FlowerFlag.Spring) && (analysis->PlayerStat()->FlowerFlag.Summer) && + (analysis->PlayerStat()->FlowerFlag.Autumn) && (analysis->PlayerStat()->FlowerFlag.Winter) && + (analysis->PlayerStat()->FlowerFlag.Plum) && (analysis->PlayerStat()->FlowerFlag.Orchid) && + (analysis->PlayerStat()->FlowerFlag.Chrys) && (analysis->PlayerStat()->FlowerFlag.Bamboo)); } )); /* 春夏秋冬 */ @@ -43,8 +43,8 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_dora() { _T("本花季節牌"), [](const MentsuAnalysis* const analysis) -> bool { return ((analysis->shanten[shantenAll] == -1) && // 何かの手で和了になっている - (analysis->PlayerStat->FlowerFlag.Spring) && (analysis->PlayerStat->FlowerFlag.Summer) && - (analysis->PlayerStat->FlowerFlag.Autumn) && (analysis->PlayerStat->FlowerFlag.Winter)); + (analysis->PlayerStat()->FlowerFlag.Spring) && (analysis->PlayerStat()->FlowerFlag.Summer) && + (analysis->PlayerStat()->FlowerFlag.Autumn) && (analysis->PlayerStat()->FlowerFlag.Winter)); } )); /* 四華開嶺 */ @@ -54,8 +54,8 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_dora() { _T("本花草木牌"), [](const MentsuAnalysis* const analysis) -> bool { return ((analysis->shanten[shantenAll] == -1) && // 何かの手で和了になっている - (analysis->PlayerStat->FlowerFlag.Plum) && (analysis->PlayerStat->FlowerFlag.Orchid) && - (analysis->PlayerStat->FlowerFlag.Chrys) && (analysis->PlayerStat->FlowerFlag.Bamboo)); + (analysis->PlayerStat()->FlowerFlag.Plum) && (analysis->PlayerStat()->FlowerFlag.Orchid) && + (analysis->PlayerStat()->FlowerFlag.Chrys) && (analysis->PlayerStat()->FlowerFlag.Bamboo)); } )); /* 本花 */ @@ -65,10 +65,10 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_dora() { [](const MentsuAnalysis* const analysis) -> bool { if (analysis->shanten[shantenAll] != -1) return false; // 和了ってないなら戻る switch (analysis->GameStat->playerwind(analysis->player)) { - case sEast: return analysis->PlayerStat->FlowerFlag.Spring; - case sSouth: return analysis->PlayerStat->FlowerFlag.Summer; - case sWest: return analysis->PlayerStat->FlowerFlag.Autumn; - case sNorth: return analysis->PlayerStat->FlowerFlag.Winter; + case sEast: return analysis->PlayerStat()->FlowerFlag.Spring; + case sSouth: return analysis->PlayerStat()->FlowerFlag.Summer; + case sWest: return analysis->PlayerStat()->FlowerFlag.Autumn; + case sNorth: return analysis->PlayerStat()->FlowerFlag.Winter; default: RaiseTolerant(EXCEPTION_MJCORE_INVALID_DATA, _T("自風が東南西北のどれでもありません")); return false; @@ -80,10 +80,10 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_dora() { [](const MentsuAnalysis* const analysis) -> bool { if (analysis->shanten[shantenAll] != -1) return false; // 和了ってないなら戻る switch (analysis->GameStat->playerwind(analysis->player)) { - case sEast: return analysis->PlayerStat->FlowerFlag.Plum; - case sSouth: return analysis->PlayerStat->FlowerFlag.Orchid; - case sWest: return analysis->PlayerStat->FlowerFlag.Chrys; - case sNorth: return analysis->PlayerStat->FlowerFlag.Bamboo; + case sEast: return analysis->PlayerStat()->FlowerFlag.Plum; + case sSouth: return analysis->PlayerStat()->FlowerFlag.Orchid; + case sWest: return analysis->PlayerStat()->FlowerFlag.Chrys; + case sNorth: return analysis->PlayerStat()->FlowerFlag.Bamboo; default: RaiseTolerant(EXCEPTION_MJCORE_INVALID_DATA, _T("自風が東南西北のどれでもありません")); return false; @@ -96,14 +96,14 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_dora() { const auto countRed = [](const MentsuAnalysis* const analysis) -> unsigned { unsigned red = 0; for (int i = 0; i < NumOfTilesInHand; i++) { - if (analysis->PlayerStat->Hand[i].tile == NoTile) continue; - else if (analysis->PlayerStat->Hand[i].tile >= TileNonflowerMax) continue; - else if (analysis->PlayerStat->Hand[i].red == AkaDora) ++red; + if (analysis->PlayerStat()->Hand[i].tile == NoTile) continue; + else if (analysis->PlayerStat()->Hand[i].tile >= TileNonflowerMax) continue; + else if (analysis->PlayerStat()->Hand[i].red == AkaDora) ++red; } - for (int i = 1; i < analysis->PlayerStat->MeldPointer; i++) { - const auto k = &analysis->PlayerStat->Meld[i]; + for (int i = 1; i < analysis->PlayerStat()->MeldPointer; i++) { + const auto k = &analysis->PlayerStat()->Meld[i]; for (int j = 0; j < (k->mstat >= meldQuadConcealed ? 4 : 3); j++) { - if (analysis->PlayerStat->Meld[i].red[j] == AkaDora) ++red; + if (analysis->PlayerStat()->Meld[i].red[j] == AkaDora) ++red; } } return red; diff --git a/mjcore/yaku/catalog/irreg.cpp b/mjcore/yaku/catalog/irreg.cpp index 0217313d..dbb2e58d 100644 --- a/mjcore/yaku/catalog/irreg.cpp +++ b/mjcore/yaku/catalog/irreg.cpp @@ -111,7 +111,7 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_irregular() yaku::yakuCalculator::YakuCatalog::Instantiate()->catalog.push_back(Yaku( _T("北の大地"), yaku::yakuCalculator::Yaku::HANFUNC( [](const MentsuAnalysis* const analysis) -> yaku::yakuCalculator::Yaku::YAKU_HAN { - switch (analysis->TsumoHai->tile) { /* 何で和了ったかで分岐 */ + switch (analysis->TsumoHai().tile) { /* 何で和了ったかで分岐 */ case NorthWind: /* 北で和了るとダブル役満 */ return yaku::yakuCalculator::Yaku::YAKU_HAN(yaku::yakuCalculator::Yaku::YAKU_HAN::HAN::yv_double_yakuman); case WhiteDragon: /* 白で和了るとトリプル役満 */ diff --git a/mjcore/yaku/catalog/misc.cpp b/mjcore/yaku/catalog/misc.cpp index 7cc3de05..0ffb5ac0 100644 --- a/mjcore/yaku/catalog/misc.cpp +++ b/mjcore/yaku/catalog/misc.cpp @@ -115,7 +115,7 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_misc() { _T("金鶏独立"), get_yaku_han("kinkei_dokuritsu"), _T("全倒鋪"), _T("全求人"), [chkHadakaTanki](const MentsuAnalysis* const analysis) -> bool { - return chkHadakaTanki(analysis) && (analysis->TsumoHai->tile == BambooOne); + return chkHadakaTanki(analysis) && (analysis->TsumoHai().tile == BambooOne); } )); // 独釣寒江雪…白待ち @@ -124,7 +124,7 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_misc() { _T("独釣寒江雪"), get_yaku_han("kankou_no_yuki"), _T("全倒鋪"), _T("全求人"), [chkHadakaTanki](const MentsuAnalysis* const analysis) -> bool { - return chkHadakaTanki(analysis) && (analysis->TsumoHai->tile == WhiteDragon); + return chkHadakaTanki(analysis) && (analysis->TsumoHai().tile == WhiteDragon); } )); #endif /* GUOBIAO */ @@ -749,7 +749,7 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_misc() { (tiles[i + 4] >= 1) && (tiles[i + 5] >= 1) && (tiles[i + 6] >= 1) && (tiles[i + 7] >= 1) && (tiles[i + 8] >= 1) && (tiles[i + 9] >= 3)) yakuFlag = true; - return yakuFlag && (!(*analysis->MenzenFlag)); + return yakuFlag && (!analysis->MenzenFlag()); } )); @@ -818,11 +818,11 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_misc() { static_cast(i + 4) }; if (chktiles(analysis, kezi, 3, shunzi, 1, true) && - (analysis->TsumoHai->tile == static_cast(i + 3)) && + (analysis->TsumoHai().tile == static_cast(i + 3)) && (Tile(analysis->MianziDat[0].tile).isHonor())) flag = true; if (chktiles(analysis, kezi, 3, shunzi + 1, 1, true) && - (analysis->TsumoHai->tile == static_cast(i + 6)) && + (analysis->TsumoHai().tile == static_cast(i + 6)) && (Tile(analysis->MianziDat[0].tile).isHonor())) flag = true; } @@ -835,7 +835,7 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_misc() { _T("愚濫怒苦露酢"), yaku::yakuCalculator::Yaku::HANFUNC( [](const MentsuAnalysis* const analysis) { return yaku::yakuCalculator::Yaku::YAKU_HAN( - (analysis->TsumoHai->tile == CircleFive) ? + (analysis->TsumoHai().tile == CircleFive) ? yaku::yakuCalculator::Yaku::YAKU_HAN::HAN::yv_double_yakuman : yaku::yakuCalculator::Yaku::YAKU_HAN::HAN::yv_yakuman); }), @@ -849,7 +849,7 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_misc() { }; return chktiles_nodup(analysis, kezi, 2, shunzi, 2, true) && (analysis->MianziDat[0].tile == CircleFive) && - (*analysis->MenzenFlag); + (analysis->MenzenFlag()); } )); /* 喜鵲閙梅 */ @@ -1149,7 +1149,7 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_misc() { [targetTile](const MentsuAnalysis* const analysis) -> bool { return ((analysis->KangziCount[targetTile] >= 1) && (analysis->Machi == yaku::yakuCalculator::machiRyanmen) && - (analysis->TotalKezi == 1) && (*analysis->MenzenFlag)); + (analysis->TotalKezi == 1) && (analysis->MenzenFlag())); } )); } @@ -1162,7 +1162,7 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_misc() { return ((analysis->KangziCount[EastWind] >= 1) && (analysis->KangziCount[NorthWind] >= 1) && (analysis->Machi == yaku::yakuCalculator::machiRyanmen) && - (analysis->TotalKezi == 2) && (*analysis->MenzenFlag)); + (analysis->TotalKezi == 2) && (analysis->MenzenFlag())); } )); /* 名大役満 */ @@ -1178,7 +1178,7 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_misc() { yakuFlag = true; return ((yakuFlag) && (analysis->Machi == yaku::yakuCalculator::machiRyanmen) && - (analysis->TotalKezi == 2) && (*analysis->MenzenFlag)); + (analysis->TotalKezi == 2) && (analysis->MenzenFlag())); } )); diff --git a/mjcore/yaku/catalog/pinhu.cpp b/mjcore/yaku/catalog/pinhu.cpp index f197cc5f..96012154 100644 --- a/mjcore/yaku/catalog/pinhu.cpp +++ b/mjcore/yaku/catalog/pinhu.cpp @@ -15,7 +15,7 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_pinhu() _T("平和"), [](const MentsuAnalysis* const analysis) { return (analysis->isPinfu && - (analysis->TsumoHai->tile == CircleOne)); + (analysis->TsumoHai().tile == CircleOne)); } )); #endif /* GUOBIAO */ diff --git a/mjcore/yaku/catalog/post.cpp b/mjcore/yaku/catalog/post.cpp index d2ab3c47..b840db45 100644 --- a/mjcore/yaku/catalog/post.cpp +++ b/mjcore/yaku/catalog/post.cpp @@ -53,7 +53,7 @@ void yaku::yakuCalculator::CalculatorThread::checkPostponedYaku if (((analysis->Machi == yaku::yakuCalculator::machiKanchan) || (analysis->Machi == yaku::yakuCalculator::machiPenchan) || (analysis->Machi == yaku::yakuCalculator::machiTanki)) && - (! analysis->PlayerStat->RichiFlag.RichiFlag) && + (! analysis->PlayerStat()->RichiFlag.RichiFlag) && (totalHan <= 0) && (totalSemiMangan == 0)) { LPCTSTR name = _T("カラス"); yakuHan[name] = yaku::yakuCalculator::Yaku::yval_1han(analysis); @@ -65,7 +65,7 @@ void yaku::yakuCalculator::CalculatorThread::checkPostponedYaku if (((analysis->Machi == yaku::yakuCalculator::machiKanchan) || (analysis->Machi == yaku::yakuCalculator::machiPenchan) || (analysis->Machi == yaku::yakuCalculator::machiTanki)) && - (analysis->PlayerStat->RichiFlag.RichiFlag) && + (analysis->PlayerStat()->RichiFlag.RichiFlag) && (totalHan == 1) && (totalSemiMangan == 0)) { LPCTSTR name = _T("カラス立直"); yakuHan[name] = yaku::yakuCalculator::Yaku::yval_1han(analysis); @@ -82,7 +82,7 @@ void yaku::yakuCalculator::CalculatorThread::checkPostponedYaku if ((totalHan >= 2) && /* 2飜以上あるか? */ (totalSemiMangan == 0) && /* 役満未満か? */ (analysis->GameStat->DoraFlag.Omote[NorthWind] == 0) && /* 北はドラではないか? */ - ((!*analysis->MenzenFlag) || (!analysis->PlayerStat->RichiFlag.RichiFlag) || + ((!analysis->MenzenFlag()) || (!analysis->PlayerStat()->RichiFlag.RichiFlag) || (RuleData::chkRuleApplied("uradora")) || (analysis->GameStat->DoraFlag.Ura[NorthWind] == 0)) && /* 北は裏ドラではないか? */ (analysis->MianziDat[0].tile == NorthWind)) { /* 雀頭が北か? */ diff --git a/mjcore/yaku/catalog/quad.cpp b/mjcore/yaku/catalog/quad.cpp index f9555154..d6fa9453 100644 --- a/mjcore/yaku/catalog/quad.cpp +++ b/mjcore/yaku/catalog/quad.cpp @@ -164,8 +164,8 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_quad() { _T("暗中模索"), get_yaku_han("anchumosaku"), [](const MentsuAnalysis* const analysis) -> bool { return ((analysis->AnKangziCount[RedDragon] >= 1) && - (analysis->TsumoHai->tile / TileSuitStep == TileSuitBamboos / TileSuitStep) && - (*analysis->TsumoAgariFlag)); + (analysis->TsumoHai().tile / TileSuitStep == TileSuitBamboos / TileSuitStep) && + (analysis->TsumoAgariFlag())); } )); /* 戦車 */ diff --git a/mjcore/yaku/catalog/sequence.cpp b/mjcore/yaku/catalog/sequence.cpp index 34c1faa6..ce15897a 100644 --- a/mjcore/yaku/catalog/sequence.cpp +++ b/mjcore/yaku/catalog/sequence.cpp @@ -146,7 +146,7 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_sequence() { _T("鳴き二盃口"), yaku::yakuCalculator::Yaku::HANFUNC( [](const MentsuAnalysis* const analysis) { return yaku::yakuCalculator::Yaku::YAKU_HAN( - (*analysis->MenzenFlag) ? + (analysis->MenzenFlag()) ? yaku::yakuCalculator::Yaku::YAKU_HAN::HAN::yv_null : yaku::yakuCalculator::Yaku::YAKU_HAN::HAN::yv_2han, yaku::yakuCalculator::Yaku::YAKU_HAN::HAN::yv_null); @@ -330,7 +330,7 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_sequence() { ikki_tsuukan(analysis, &yakuFlag, &yakuCol); return (yakuFlag && // 一気通貫が成立していて (analysis->Machi == yaku::yakuCalculator::machiKanchan) && // 嵌張待ちで - (analysis->PlayerStat->Hand[TsumohaiIndex].tile == (yakuCol + 5)) // 和了牌が5 + (analysis->PlayerStat()->Hand[TsumohaiIndex].tile == (yakuCol + 5)) // 和了牌が5 ); } )); @@ -434,7 +434,7 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_sequence() { return (yakuFlag && // 一気通貫が成立していて (analysis->KeziCount[NorthWind] >= 1) && // 北の刻子があり ((analysis->MianziDat[0].tile / TileSuitStep) == (yakuCol / TileSuitStep)) && // 一色になっていて - (analysis->PlayerStat->Hand[TsumohaiIndex].tile == (yakuCol + 5)) // 和了牌が5 + (analysis->TsumoHai().tile == (yakuCol + 5)) // 和了牌が5 ); } )); @@ -525,9 +525,9 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_sequence() { ikki_tsuukan(analysis, &yakuFlag, &yakuCol); return (yakuFlag && // 一気通貫が成立していて (analysis->Machi == yaku::yakuCalculator::machiKanchan) && // 嵌張待ちで - ((analysis->TsumoHai->tile == yakuCol + 2) || // 2か - (analysis->TsumoHai->tile == yakuCol + 4) || // 4か - (analysis->TsumoHai->tile == yakuCol + 6)) // 6で和了 + ((analysis->TsumoHai().tile == yakuCol + 2) || // 2か + (analysis->TsumoHai().tile == yakuCol + 4) || // 4か + (analysis->TsumoHai().tile == yakuCol + 6)) // 6で和了 ); } )); @@ -987,10 +987,10 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_sequence() { _T("三色通貫"), [sanshoku_tsuukan](const MentsuAnalysis* const analysis) -> bool { return (sanshoku_tsuukan(analysis) && // 三色通貫で - (*analysis->MenzenFlag) && // 門前で + (analysis->MenzenFlag()) && // 門前で (analysis->Machi == yaku::yakuCalculator::machiTanki) && // 単騎待ちで - (analysis->TsumoHai->tile != WhiteDragon) && // 白待ちでなく - (analysis->TsumoHai->tile != GreenDragon) ); // 發待ちでない + (analysis->TsumoHai().tile != WhiteDragon) && // 白待ちでなく + (analysis->TsumoHai().tile != GreenDragon) ); // 發待ちでない } )); /* 三色通貫全帯幺九 */ diff --git a/mjcore/yaku/catalog/suit.cpp b/mjcore/yaku/catalog/suit.cpp index d47650a5..e980b685 100644 --- a/mjcore/yaku/catalog/suit.cpp +++ b/mjcore/yaku/catalog/suit.cpp @@ -54,7 +54,7 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_suit() { _T("九蓮宝燈"), _T("清一色"), _T("九蓮花燈"), [chkHaishiki](const MentsuAnalysis* const analysis) -> bool { bool yakuFlag = false; - const TileCode* tsumoTile = &(analysis->TsumoHai->tile); + const TileCode* tsumoTile = &(analysis->TsumoHai().tile); if ((*tsumoTile % 10 == 1) || (*tsumoTile % 10 == 9)) { if (analysis->TileCount[*tsumoTile] >= 4) yakuFlag = true; } else { @@ -247,7 +247,7 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_suit() { _T("清一色"), [chiffre](const MentsuAnalysis* const analysis) -> bool { return (isshoku(analysis, true) && (chiffre(analysis) > 100) && - ((analysis->TsumoHai->tile / TileSuitStep) == + ((analysis->TsumoHai().tile / TileSuitStep) == (TileSuitCharacters / TileSuitStep))); } )); @@ -257,7 +257,7 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_suit() { _T("清一色"), [chiffre](const MentsuAnalysis* const analysis) -> bool { return (isshoku(analysis, true) && (chiffre(analysis) == 100) && - ((analysis->TsumoHai->tile / TileSuitStep) == + ((analysis->TsumoHai().tile / TileSuitStep) == (TileSuitCharacters / TileSuitStep))); } )); @@ -269,7 +269,7 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_suit() { _T("清一色"), [chiffre](const MentsuAnalysis* const analysis) -> bool { return (isshoku(analysis, true) && (chiffre(analysis) >= 100) && - ((analysis->TsumoHai->tile / TileSuitStep) == + ((analysis->TsumoHai().tile / TileSuitStep) == (TileSuitCircles / TileSuitStep))); } )); @@ -280,7 +280,7 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_suit() { _T("清一色"), [chiffre](const MentsuAnalysis* const analysis) -> bool { return (isshoku(analysis, true) && (chiffre(analysis) == 55) && - ((analysis->TsumoHai->tile / TileSuitStep) == + ((analysis->TsumoHai().tile / TileSuitStep) == (TileSuitCharacters / TileSuitStep))); } )); @@ -291,7 +291,7 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_suit() { _T("清一色"), [chiffre](const MentsuAnalysis* const analysis) -> bool { return (isshoku(analysis, true) && (chiffre(analysis) <= 35) && - ((analysis->TsumoHai->tile / TileSuitStep) == + ((analysis->TsumoHai().tile / TileSuitStep) == (TileSuitCharacters / TileSuitStep))); } )); @@ -339,7 +339,7 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_suit() { yakuFlag = true; } return (isshoku(analysis, true) && (yakuFlag) && - ((analysis->TsumoHai->tile / TileSuitStep) == + ((analysis->TsumoHai().tile / TileSuitStep) == (TileSuitCharacters / TileSuitStep))); } )); @@ -519,7 +519,7 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_suit() { for (unsigned int i = 0; i < ((analysis->shanten[shantenRegular] == -1) ? SizeOfMeldBuffer : NumOfTilesInHand); i++) { if (analysis->shanten[shantenRegular] == -1) tc = analysis->MianziDat[i].tile; - else if (analysis->shanten[shantenPairs] == -1) tc = analysis->PlayerStat->Hand[i].tile; + else if (analysis->shanten[shantenPairs] == -1) tc = analysis->PlayerStat()->Hand[i].tile; if (Tile(tc).isNumber()) ++mnzCount[tc / TileSuitStep]; else switch (tc) { case EastWind: case SouthWind: case WestWind: case NorthWind: diff --git a/mjcore/yaku/catalog/triplet1.cpp b/mjcore/yaku/catalog/triplet1.cpp index 81dec3a8..43916a7e 100644 --- a/mjcore/yaku/catalog/triplet1.cpp +++ b/mjcore/yaku/catalog/triplet1.cpp @@ -15,7 +15,7 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_triplet_1() { #endif /* GUOBIAO */ [](const MentsuAnalysis* const analysis) -> bool { return (analysis->TotalAnKezi - ( - ((analysis->Machi == yaku::yakuCalculator::machiShanpon) && (!*analysis->TsumoAgariFlag)) ? + ((analysis->Machi == yaku::yakuCalculator::machiShanpon) && (!analysis->TsumoAgariFlag())) ? 1 : 0) == 4); } )); @@ -27,7 +27,7 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_triplet_1() { _T("四暗刻"), _T("対々和"), _T("三暗刻"), [](const MentsuAnalysis* const analysis) -> bool { return (analysis->TotalAnKezi - ( - ((analysis->Machi == yaku::yakuCalculator::machiShanpon) && (!*analysis->TsumoAgariFlag)) ? + ((analysis->Machi == yaku::yakuCalculator::machiShanpon) && (!analysis->TsumoAgariFlag())) ? 1 : 0) == 4) && ( (analysis->GameStat->TianHuFlag) || ((analysis->Machi == yaku::yakuCalculator::machiTanki) && (!analysis->MachiInfo.FuritenFlag)) @@ -45,7 +45,7 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_triplet_1() { #endif /* GUOBIAO */ [](const MentsuAnalysis* const analysis) -> bool { return (analysis->TotalAnKezi - ( - ((analysis->Machi == yaku::yakuCalculator::machiShanpon) && (!*analysis->TsumoAgariFlag)) ? + ((analysis->Machi == yaku::yakuCalculator::machiShanpon) && (!analysis->TsumoAgariFlag())) ? 1 : 0) == 3); } )); @@ -55,7 +55,7 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_triplet_1() { _T("双暗刻"), yaku::yakuCalculator::Yaku::yval_2, [](const MentsuAnalysis* const analysis) -> bool { return (analysis->TotalAnKezi - ( - ((analysis->Machi == yaku::yakuCalculator::machiShanpon) && (!*analysis->TsumoAgariFlag)) ? + ((analysis->Machi == yaku::yakuCalculator::machiShanpon) && (!analysis->TsumoAgariFlag())) ? 1 : 0) == 2); } )); @@ -143,8 +143,8 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_triplet_1() { (analysis->KeziCount[static_cast((*i)[2] - _T('0')) * TileSuitStep + k + 2] >= 1) && (analysis->KeziCount[static_cast((*i)[3] - _T('0')) * TileSuitStep + k + 3] >= 1) && (analysis->DuiziCount[static_cast((*i)[4] - _T('0')) * TileSuitStep + k + 4] >= 1) && - ((analysis->TsumoHai->tile == static_cast(static_cast((*i)[0] - _T('0')) * TileSuitStep + k + 0)) || - (analysis->TsumoHai->tile == static_cast(static_cast((*i)[4] - _T('0')) * TileSuitStep + k + 4))) + ((analysis->TsumoHai().tile == static_cast(static_cast((*i)[0] - _T('0')) * TileSuitStep + k + 0)) || + (analysis->TsumoHai().tile == static_cast(static_cast((*i)[4] - _T('0')) * TileSuitStep + k + 4))) ) yakuFlag = true; } @@ -741,7 +741,7 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_triplet_1() { return ((analysis->KeziCount[BambooOne] >= 1) && (analysis->KeziCount[EastWind] >= 1) && (analysis->KeziCount[WhiteDragon] >= 1) && - (analysis->PlayerStat->FlowerFlag.Spring)); + (analysis->PlayerStat()->FlowerFlag.Spring)); } )); @@ -1038,10 +1038,10 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_triplet_1() { return ((analysis->KeziCount[CharacterEight] >= 1) && (analysis->KeziCount[CircleEight] >= 1) && (analysis->KeziCount[BambooEight] >= 1) && - analysis->PlayerStat->FlowerFlag.Spring && analysis->PlayerStat->FlowerFlag.Summer && - analysis->PlayerStat->FlowerFlag.Autumn && analysis->PlayerStat->FlowerFlag.Winter && - analysis->PlayerStat->FlowerFlag.Plum && analysis->PlayerStat->FlowerFlag.Orchid && - analysis->PlayerStat->FlowerFlag.Chrys && analysis->PlayerStat->FlowerFlag.Bamboo ); + analysis->PlayerStat()->FlowerFlag.Spring && analysis->PlayerStat()->FlowerFlag.Summer && + analysis->PlayerStat()->FlowerFlag.Autumn && analysis->PlayerStat()->FlowerFlag.Winter && + analysis->PlayerStat()->FlowerFlag.Plum && analysis->PlayerStat()->FlowerFlag.Orchid && + analysis->PlayerStat()->FlowerFlag.Chrys && analysis->PlayerStat()->FlowerFlag.Bamboo ); } )); #endif /* GUOBIAO */ diff --git a/mjcore/yaku/catalog/triplet2.cpp b/mjcore/yaku/catalog/triplet2.cpp index 6c1195ac..27a038a4 100644 --- a/mjcore/yaku/catalog/triplet2.cpp +++ b/mjcore/yaku/catalog/triplet2.cpp @@ -108,7 +108,7 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_triplet_2() { return ((analysis->KeziCount[WestWind] >= 1) && (analysis->KeziCount[WhiteDragon] >= 1) && (analysis->DuiziCount[CircleOne] >= 1) && - (analysis->TsumoHai->tile == CircleOne) ); + (analysis->TsumoHai().tile == CircleOne) ); } )); /* 南無八幡 */ @@ -306,7 +306,7 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_triplet_2() { _T("太公釣金亀"), get_yaku_han("taikou_turtle"), [](const MentsuAnalysis* const analysis) -> bool { return ((analysis->KeziCount[BambooTwo] >= 1) && - (analysis->TsumoHai->tile == BambooThree) && + (analysis->TsumoHai().tile == BambooThree) && (analysis->Machi == yaku::yakuCalculator::machiTanki)); } )); @@ -489,10 +489,10 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_triplet_2() { (analysis->KeziCount[CharacterEight] >= 1)) return true; else if ((analysis->MianziDat[0].tile == CharacterEight) && (analysis->KeziCount[CharacterFour] >= 1) && - (analysis->TsumoHai->tile == CharacterFour)) return true; + (analysis->TsumoHai().tile == CharacterFour)) return true; else if ((analysis->MianziDat[0].tile == CharacterFour) && (analysis->KeziCount[CharacterEight] >= 1) && - (analysis->TsumoHai->tile == CharacterEight)) return true; + (analysis->TsumoHai().tile == CharacterEight)) return true; else return false; } )); @@ -692,13 +692,13 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_triplet_2() { }; const auto newyrdrm = [](const MentsuAnalysis* const analysis) -> bool { - if (analysis->PlayerStat->MeldPointer >= 3) - return ((analysis->PlayerStat->Meld[1].mstat > meldTripletConcealed) && - (analysis->PlayerStat->Meld[1].tile == BambooThree) && - (analysis->PlayerStat->Meld[2].mstat > meldTripletConcealed) && - (analysis->PlayerStat->Meld[2].tile == BambooOne) && - (analysis->PlayerStat->Meld[3].mstat > meldTripletConcealed) && - (analysis->PlayerStat->Meld[3].tile == CircleEight)); + if (analysis->PlayerStat()->MeldPointer >= 3) + return ((analysis->PlayerStat()->Meld[1].mstat > meldTripletConcealed) && + (analysis->PlayerStat()->Meld[1].tile == BambooThree) && + (analysis->PlayerStat()->Meld[2].mstat > meldTripletConcealed) && + (analysis->PlayerStat()->Meld[2].tile == BambooOne) && + (analysis->PlayerStat()->Meld[3].mstat > meldTripletConcealed) && + (analysis->PlayerStat()->Meld[3].tile == CircleEight)); else return false; }; yaku::yakuCalculator::YakuCatalog::Instantiate()->catalog.push_back(Yaku( @@ -844,7 +844,7 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_triplet_2() { [](const MentsuAnalysis* const analysis) -> bool { return (analysis->KeziCount[RedDragon] >= 1) && (analysis->KeziCount[CharacterSix] >= 1) && - (analysis->TsumoHai->tile == EastWind); + (analysis->TsumoHai().tile == EastWind); } )); /* Windows95 */ @@ -895,13 +895,13 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_triplet_2() { _T("Windows7"), get_yaku_han("windows7"), [](const MentsuAnalysis* const analysis) -> bool { bool yakuFlag = false; - if ((analysis->TsumoHai->tile == CharacterSeven) && + if ((analysis->TsumoHai().tile == CharacterSeven) && ((analysis->KeziCount[CircleSeven] >= 1) || (analysis->KeziCount[BambooSeven] >= 1))) yakuFlag = true; - else if ((analysis->TsumoHai->tile == CircleSeven) && + else if ((analysis->TsumoHai().tile == CircleSeven) && ((analysis->KeziCount[BambooSeven] >= 1) || (analysis->KeziCount[CharacterSeven] >= 1))) yakuFlag = true; - else if ((analysis->TsumoHai->tile == BambooSeven) && + else if ((analysis->TsumoHai().tile == BambooSeven) && ((analysis->KeziCount[CharacterSeven] >= 1) || (analysis->KeziCount[CircleSeven] >= 1))) yakuFlag = true; return yakuFlag; @@ -917,7 +917,7 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_triplet_2() { (analysis->KeziCount[SouthWind] >= 1) || (analysis->KeziCount[WestWind] >= 1) || (analysis->KeziCount[NorthWind] >= 1)) && - (analysis->PlayerStat->Tsumohai().tile == EastWind); + (analysis->PlayerStat()->Tsumohai().tile == EastWind); } )); /* 博麗霊夢 */ diff --git a/mjcore/yaku/catalog/triplet3.cpp b/mjcore/yaku/catalog/triplet3.cpp index 6dd6d7c8..e833276c 100644 --- a/mjcore/yaku/catalog/triplet3.cpp +++ b/mjcore/yaku/catalog/triplet3.cpp @@ -112,7 +112,7 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_triplet_3() { return ((analysis->AnKeziCount[WhiteDragon] + analysis->AnKeziCount[GreenDragon] + analysis->AnKeziCount[RedDragon]) >= 1) && - (analysis->TsumoHai->tile == BambooFive) && + (analysis->TsumoHai().tile == BambooFive) && (analysis->Machi == yaku::yakuCalculator::machiTanki); } )); @@ -314,9 +314,9 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_triplet_3() { _T("四暗刻"), [](const MentsuAnalysis* const analysis) -> bool { return (analysis->TotalAnKezi - ( - ((analysis->Machi == yaku::yakuCalculator::machiShanpon) && (!*analysis->TsumoAgariFlag)) ? + ((analysis->Machi == yaku::yakuCalculator::machiShanpon) && (!analysis->TsumoAgariFlag())) ? 1 : 0) == 4) && // 四暗刻を - (analysis->TsumoHai->tile == CharacterOne); // 一萬で和了る + (analysis->TsumoHai().tile == CharacterOne); // 一萬で和了る } )); /* 激大三元 */ @@ -435,10 +435,10 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_triplet_3() { (analysis->KeziCount[NorthWind] >= 1) && (pairIsHonor)) { if ((analysis->ShunziCount[i + 4] >= 1) && - (analysis->TsumoHai->tile == static_cast(i + 6))) + (analysis->TsumoHai().tile == static_cast(i + 6))) flag = true; if ((analysis->ShunziCount[i + 3] >= 1) && - (analysis->TsumoHai->tile == static_cast(i + 3))) + (analysis->TsumoHai().tile == static_cast(i + 3))) flag = true; } } @@ -533,7 +533,7 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_triplet_3() { (analysis->KeziCount[BambooEight] >= 1) && (analysis->TotalAnKezi - ( ((analysis->Machi == yaku::yakuCalculator::machiShanpon) && - (!*analysis->TsumoAgariFlag)) ? 1 : 0) >= 3); + (!analysis->TsumoAgariFlag())) ? 1 : 0) >= 3); } )); /* 侵略イカ娘 */ @@ -567,12 +567,12 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_triplet_3() { _T("西新井"), get_yaku_han("nishiarai"), [](const MentsuAnalysis* const analysis) -> bool { return (analysis->KeziCount[WestWind] >= 1) && - ((analysis->TsumoHai->tile == CharacterOne) || - (analysis->TsumoHai->tile == CircleOne) || - (analysis->TsumoHai->tile == BambooOne) || - (analysis->TsumoHai->tile == CharacterTwo) || - (analysis->TsumoHai->tile == CircleTwo) || - (analysis->TsumoHai->tile == BambooTwo)); + ((analysis->TsumoHai().tile == CharacterOne) || + (analysis->TsumoHai().tile == CircleOne) || + (analysis->TsumoHai().tile == BambooOne) || + (analysis->TsumoHai().tile == CharacterTwo) || + (analysis->TsumoHai().tile == CircleTwo) || + (analysis->TsumoHai().tile == BambooTwo)); } )); /* 金剛組 */ @@ -761,7 +761,7 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_triplet_3() { flag1 = true; for (int i = 0; i < TileSuitHonors; i += TileSuitStep) if ((analysis->KeziCount[i + 8] >= 1) && - (analysis->TsumoHai->tile == static_cast(i + 8))) + (analysis->TsumoHai().tile == static_cast(i + 8))) flag2 = true; return flag1 && flag2 && (analysis->MianziDat[0].tile == SouthWind); diff --git a/mjcore/yaku/catalog/yaojiu.cpp b/mjcore/yaku/catalog/yaojiu.cpp index 185a053f..217ad794 100644 --- a/mjcore/yaku/catalog/yaojiu.cpp +++ b/mjcore/yaku/catalog/yaojiu.cpp @@ -22,7 +22,7 @@ void yaku::yakuCalculator::YakuCatalog::catalogInit::yakulst_yaojiu() _T("断幺九"), RuleData::chkRule("kuitan", "yes_but_unbound") ? /* 門前なら縛りを満たし、喰い断は縛りを満たさないルール */ yaku::yakuCalculator::Yaku::HANFUNC( [](const MentsuAnalysis* const analysis) { - return *analysis->MenzenFlag ? + return analysis->MenzenFlag() ? yaku::yakuCalculator::Yaku::YAKU_HAN(yaku::yakuCalculator::Yaku::YAKU_HAN::HAN::yv_1han, yaku::yakuCalculator::Yaku::YAKU_HAN::HAN::yv_null) : yaku::yakuCalculator::Yaku::YAKU_HAN(yaku::yakuCalculator::Yaku::YAKU_HAN::HAN::yv_null, diff --git a/mjcore/yaku/yaku.cpp b/mjcore/yaku/yaku.cpp index eca4b3eb..1a9bbd21 100644 --- a/mjcore/yaku/yaku.cpp +++ b/mjcore/yaku/yaku.cpp @@ -685,10 +685,6 @@ void yaku::yakuCalculator::analysisNonLoop(const GameTable* const gameStat, Play analysis.SeenTiles = countseentiles(gameStat); analysis.MachiInfo = chkFuriten(gameStat, targetPlayer); analysis.GameStat = gameStat; - analysis.PlayerStat = &(gameStat->Player[targetPlayer]); - analysis.TsumoHai = &(gameStat->Player[targetPlayer].Tsumohai()); - analysis.MenzenFlag = &(gameStat->Player[targetPlayer].MenzenFlag); - analysis.TsumoAgariFlag = &(gameStat->TsumoAgariFlag); YAKUSTAT result; constexpr ParseMode pMode = {NoTile, Ke_Shun}; // 計算を実行 @@ -709,10 +705,6 @@ void yaku::yakuCalculator::analysisLoop(const GameTable* const gameStat, PlayerI analysis.SeenTiles = countseentiles(gameStat); analysis.MachiInfo = chkFuriten(gameStat, targetPlayer); analysis.GameStat = gameStat; - analysis.PlayerStat = &(gameStat->Player[targetPlayer]); - analysis.TsumoHai = &(gameStat->Player[targetPlayer].Tsumohai()); - analysis.MenzenFlag = &(gameStat->Player[targetPlayer].MenzenFlag); - analysis.TsumoAgariFlag = &(gameStat->TsumoAgariFlag); // 計算ルーチンに渡すパラメータの準備 CalculatorParam* calcprm = new CalculatorParam[160]; memset(calcprm, 0, sizeof(CalculatorParam[160])); std::vector myThreads; diff --git a/mjcore/yaku/yaku.h b/mjcore/yaku/yaku.h index ba8b69bd..8c69ca7e 100644 --- a/mjcore/yaku/yaku.h +++ b/mjcore/yaku/yaku.h @@ -65,10 +65,18 @@ class yaku::yakuCalculator { uint8_t TotalAnKangzi; // 暗槓合計 uint8_t TotalKaKangzi; // 加槓合計 const GameTable* GameStat; // 卓情報へのポインタ - const PlayerTable* PlayerStat; // プレイヤー情報へのポインタ - const Tile* TsumoHai; // 和了牌へのポインタ - const bool* MenzenFlag; // 門前かどうかのフラグ - const bool* TsumoAgariFlag; // ツモアガリどうかのフラグ + const PlayerTable* PlayerStat() const { // プレイヤー情報へのポインタ + return &(GameStat->Player[player]); + } + const Tile& TsumoHai() const { // 和了牌 + return PlayerStat()->Tsumohai(); + } + bool MenzenFlag() const { // 門前かどうかのフラグ + return PlayerStat()->MenzenFlag; + } + bool TsumoAgariFlag() const { // ツモアガリどうかのフラグ + return GameStat->TsumoAgariFlag; + } }; #ifdef MJCORE_EXPORTS static_assert(std::is_trivially_copyable::value, "MentsuAnalysis is not trivially copyable"); diff --git a/mjcore/yaku/ykclass.cpp b/mjcore/yaku/ykclass.cpp index 1b7be1c1..08c0aced 100644 --- a/mjcore/yaku/ykclass.cpp +++ b/mjcore/yaku/ykclass.cpp @@ -28,13 +28,13 @@ yaku::yakuCalculator::Yaku::FixedHan::FixedHan(YAKU_HAN::HAN cHan, YAKU_HAN::HAN yaku::yakuCalculator::Yaku::MenzenHan::MenzenHan(YAKU_HAN bHan) { hFunc = [=](const MentsuAnalysis* const analysisDat) { - return *(analysisDat->MenzenFlag) ? bHan : yaku::yakuCalculator::Yaku::YAKU_HAN(); + return analysisDat->MenzenFlag() ? bHan : yaku::yakuCalculator::Yaku::YAKU_HAN(); }; } yaku::yakuCalculator::Yaku::MenzenHan::MenzenHan(YAKU_HAN::HAN cHan, YAKU_HAN::HAN dHan) { hFunc = [=](const MentsuAnalysis* const analysisDat) { - return *(analysisDat->MenzenFlag) ? + return analysisDat->MenzenFlag() ? yaku::yakuCalculator::Yaku::YAKU_HAN(cHan, dHan) : yaku::yakuCalculator::Yaku::YAKU_HAN(); }; } @@ -42,7 +42,7 @@ yaku::yakuCalculator::Yaku::MenzenHan::MenzenHan(YAKU_HAN::HAN cHan, YAKU_HAN::H yaku::yakuCalculator::Yaku::KuisagariHan::KuisagariHan(YAKU_HAN bHan) { hFunc = [=](const MentsuAnalysis* const analysisDat) { - return *(analysisDat->MenzenFlag) ? bHan : + return analysisDat->MenzenFlag() ? bHan : yaku::yakuCalculator::Yaku::YAKU_HAN( yaku::yakuCalculator::Yaku::YAKU_HAN::HAN(max(bHan.coreHan.getHan() - 1, 0), bHan.coreHan.getUnit()), yaku::yakuCalculator::Yaku::YAKU_HAN::HAN(max(bHan.bonusHan.getHan() - 1, 0), bHan.bonusHan.getUnit()) @@ -52,7 +52,7 @@ yaku::yakuCalculator::Yaku::KuisagariHan::KuisagariHan(YAKU_HAN bHan) yaku::yakuCalculator::Yaku::KuisagariHan::KuisagariHan(YAKU_HAN::HAN cHan, YAKU_HAN::HAN dHan) { hFunc = [=](const MentsuAnalysis* const analysisDat) { - return *(analysisDat->MenzenFlag) ? yaku::yakuCalculator::Yaku::YAKU_HAN(cHan, dHan) : + return analysisDat->MenzenFlag() ? yaku::yakuCalculator::Yaku::YAKU_HAN(cHan, dHan) : yaku::yakuCalculator::Yaku::YAKU_HAN( yaku::yakuCalculator::Yaku::YAKU_HAN::HAN(max(cHan.getHan() - 1, 0), cHan.getUnit()), yaku::yakuCalculator::Yaku::YAKU_HAN::HAN(max(dHan.getHan() - 1, 0), dHan.getUnit())