和了判定(基本形)の流れ
和了判定の流れを簡単なフローチャートにしてみた。七対子・国士無双の特殊形は考えず、雀頭と面子が4つの「基本形」での和了判定を考える。
まず「手牌テーブル」を用意する。手牌テーブルは、手牌の中にどの牌が何枚あるかを表している。一萬はtable[1]、二萬はtable[2]、、、中はtable[37]と順に配列の要素に当てはめる。一萬が手牌の中に3枚あればtable[1]=3、二萬が手牌に無ければtable[2]=0で表される。
まず雀頭を探索する。手牌テーブルを最初から順に探索し、2枚以上ある牌を雀頭として抜き出す。牌の抜き出しは、手牌テーブルの要素の数から抜き出した牌の数を引く。手牌に一萬が3枚あって(table[1]=3)2枚を雀頭として抜き出した後には、手牌テーブルの一萬は1枚となる(table[1]=1)。
雀頭を決定後、面子(刻子・順子)の抜き出しを行う。もし手牌が和了の形になっていれば、4つの面子を抜き出すことができる。もし4つの面子を抜き出せない場合は、手牌が和了の形ではないか、雀頭の抜き出し方が間違っていることが考えられる。よって、手牌テーブルが空にならない時には手牌テーブルを初期化し、雀頭を抜き出しからやり直す。もし雀頭の抜き出しを手牌テーブル末尾までやっても和了の形を作れなければ、「和了ではない」となる。
すべての処理をフローチャートで表そうとすると、少し複雑になる。次の記事に掲載したHSPのソースを見たほうがすっきり理解できると思う。
まず「手牌テーブル」を用意する。手牌テーブルは、手牌の中にどの牌が何枚あるかを表している。一萬はtable[1]、二萬はtable[2]、、、中はtable[37]と順に配列の要素に当てはめる。一萬が手牌の中に3枚あればtable[1]=3、二萬が手牌に無ければtable[2]=0で表される。
まず雀頭を探索する。手牌テーブルを最初から順に探索し、2枚以上ある牌を雀頭として抜き出す。牌の抜き出しは、手牌テーブルの要素の数から抜き出した牌の数を引く。手牌に一萬が3枚あって(table[1]=3)2枚を雀頭として抜き出した後には、手牌テーブルの一萬は1枚となる(table[1]=1)。
雀頭を決定後、面子(刻子・順子)の抜き出しを行う。もし手牌が和了の形になっていれば、4つの面子を抜き出すことができる。もし4つの面子を抜き出せない場合は、手牌が和了の形ではないか、雀頭の抜き出し方が間違っていることが考えられる。よって、手牌テーブルが空にならない時には手牌テーブルを初期化し、雀頭を抜き出しからやり直す。もし雀頭の抜き出しを手牌テーブル末尾までやっても和了の形を作れなければ、「和了ではない」となる。
すべての処理をフローチャートで表そうとすると、少し複雑になる。次の記事に掲載したHSPのソースを見たほうがすっきり理解できると思う。
