forked from nekobean/mahjong-cpp
-
Notifications
You must be signed in to change notification settings - Fork 0
/
sample_calculate_score.cpp
72 lines (61 loc) · 3.62 KB
/
sample_calculate_score.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#include "mahjong/mahjong.hpp"
using namespace mahjong;
int main(int, char **)
{
// calc() に手牌を指定した場合、通常手、七対子手、国士無双手の向聴数を計算し、
// 向聴数が最小となる手の種類及び向聴数をタプルで返します。
{
ScoreCalculator score;
// 場やルールの設定
////////////////////////////////////////////////////////////////////////////////
// 場風牌を Tile::Ton, Tile::Nan, Tile::Sya, Tile::Pe から設定します。
score.set_bakaze(Tile::Ton);
// 自風牌を Tile::Ton, Tile::Nan, Tile::Sya, Tile::Pe から設定します。
score.set_zikaze(Tile::Ton);
// 積み棒の数を設定します。(例: 1本場なら1)
score.set_num_tumibo(0);
// 供託棒 (立直棒) の数を設定します。
score.set_num_kyotakubo(0);
// ※ ダブロン、トリロン有りのルールの場合、積み棒、供託棒を受け取らない和了者の精算時には0に設定してください。
// ドラの一覧 (表示牌ではない) を設定します。
score.set_dora_tiles({Tile::Pe});
// 裏ドラがある場合は、裏ドラの一覧 (表示牌ではない) を設定します。
score.set_uradora_tiles({Tile::Pinzu9});
// ルールを設定します。デフォルトは赤ドラ有り、喰い断有りのありありルールです。
// な変更したい場合は以下のように設定します。
// score.set_rule(RuleFlag::AkaDora, false); // 赤ドラなし
// score.set_rule(RuleFlag::OpenTanyao, false); // 喰い断なし
// 手牌、和了牌、フラグの設定
////////////////////////////////////////////////////////////////////////////////
// 手牌
MeldedBlock block(MeldType::Kakan, {Tile::Ton, Tile::Ton, Tile::Ton, Tile::Ton});
Hand hand({Tile::Manzu1, Tile::Manzu2, Tile::Manzu3, //
Tile::Pinzu3, Tile::Pinzu4, Tile::Pinzu5, //
Tile::Sozu1, Tile::Sozu2, Tile::Sozu3, //
Tile::Sozu4, Tile::Sozu4},
{block});
// 和了牌
int win_tile = Tile::Manzu1;
// フラグ (自摸和了、立直など手牌に関係ない点数計算に必要なフラグを指定します。)
// HandFlag::Tumo 自摸和了 (門前かどうかに関わらず、自摸和了の場合は指定)
// HandFlag::Reach 立直成立
// HandFlag::Ippatu 一発成立
// HandFlag::Tyankan 搶槓成立
// HandFlag::Rinsyankaiho 嶺上開花成立
// HandFlag::Haiteitumo 海底撈月成立
// HandFlag::Hoteiron 河底撈魚成立
// HandFlag::DoubleReach ダブル立直成立
// HandFlag::NagasiMangan 流し満貫成立
// HandFlag::Tenho 天和成立
// HandFlag::Tiho 地和成立
// HandFlag::Renho 人和成立
int flag = HandFlag::Tumo | HandFlag::Rinsyankaiho;
// 点数計算の実行
////////////////////////////////////////////////////////////////////////////////
Result ret = score.calc(hand, win_tile, flag);
// 結果は Result 構造体に格納されています。to_string() で文字列として出力できます。
// また、各メンバ変数を参照することで、飜、符、成立役といった情報を個別に取得できます。
// 詳しくは types/result.hpp を参照してください。
std::cout << ret.to_string() << std::endl;
}
}