09/01/04 12:17:38
役が成り立っているか脳内で判定してると思うが、
まあそういう役が成り立っているかを判定する関数があるとする。
int check_toitsu(const toitsu_t *toitsu); /* ちゃんと対子として成り立っていれば 1 を、そうでなければ 0 を返す */
int check_ipeko(const ipeko_t *ipeko); /* ちゃんと一盃口として成り立っていれば 1 を、そうでなければ 0 を返す */
これを使って ryanpeko_t 型の値が本当に二盃口として成り立っているのかをチェックする関数を作ると、こうなって、
int check_ryanpeko(const ryanpeko_t *ryanpeko) {
return
check_ipeko(&ryanpeko->ipeko[0]) &&
check_ipeko(&ryanpeko->ipeko[1]) &&
check_toitsu(&ryanpeko->toitsu);
}
chitoitsu_t 型の値が本当に七対子として成り立っているのかをチェックする関数を作ると、こうなる。
int check_chitoitsu(const chitoitsu_t *chitoitsu) {
int i;
for (i = 0; i < 7; i++)
if (!check_toitsu(chitoitsu->toitsu[i]))
return 0;
return 1;
}
んで、手牌 tehai をこのチェック関数に渡すには、こんな感じになるわけだ。
if (check_ryanpeko((const ryanpeko_t*)&tehai))
puts("二盃口として解釈可能です");
if (check_chitoitsu((const chitoitsu_t*)&tehai))
puts("七対子として解釈可能です");