Libsaki
Core library of Pancake Mahjong
kan_ctx.h
1 #ifndef SAKI_KAN_CTX_H
2 #define SAKI_KAN_CTX_H
3 
4 #include "../unit/who.h"
5 
6 
7 
8 namespace saki
9 {
10 
11 
12 
13 class KanCtx
14 {
15 public:
16  KanCtx() = default;
17  explicit KanCtx(const KanCtx &copy) = default;
18  KanCtx &operator=(const KanCtx &copy) = default;
19  ~KanCtx() = default;
20 
21  bool during() const
22  {
23  return mDuring;
24  }
25 
26  bool duringMinkan() const
27  {
28  return mDuring && mMinkan;
29  }
30 
31  bool duringAnkan() const
32  {
33  return mDuring && !mMinkan;
34  }
35 
36  Who pao() const
37  {
38  return mPao;
39  }
40 
41  void enterDaiminkan(Who pao)
42  {
43  assert(!mDuring); // daiminkan must be a start
44 
45  mDuring = true;
46  mMinkan = true;
47  mPao = pao;
48  }
49 
50  void enterAnkan()
51  {
52  if (!mDuring) { // start with ankan
53  mPao = Who();
54  mDuring = true;
55  }
56 
57  mMinkan = false;
58  }
59 
60  void enterKakan()
61  {
62  if (!mDuring) { // start with kakan
63  mPao = Who();
64  mDuring = true;
65  }
66 
67  mMinkan = true;
68  }
69 
71  void leave()
72  {
73  mDuring = false;
74  }
75 
76 private:
77  bool mDuring = false;
78  bool mMinkan;
79  Who mPao;
80 };
81 
82 
83 
84 } // namespace saki
85 
86 
87 
88 #endif // SAKI_KAN_CTX_H
Definition: kan_ctx.h:13
void leave()
Called when a discard or another kan happens.
Definition: kan_ctx.h:71
Definition: ai.cpp:18
Definition: who.h:14