戯言。麻雀一考。理牌(りーぱい)のソートや東南西北。

徒然草2.0

麻雀をつかったアプリを作るため麻雀を学び直している。

麻雀世界の方角は現実世界の裏返し

そういえばあまり意識したことがなかったが、麻雀の方角は現実の世界とは逆(裏)になっている。現実世界では、北を見た場合は右手が東になるが、麻雀世界では、北を見た場合は左手が西になる。

またゲームは時計とは逆周りに行われる。諸説あるようだが、麻雀は現実の世界とは逆(裏)の世界を現しているのかもしれない。という説が面白い。

私たちが生きている現実の世界とは別に何もかも逆にした世界が存在するという話がSFとかであった気がする。

単純に反時計回りに1,2,3,4という数列を意味した東南西北(トン・ナン・シャ・ペイ)が当てはめられただけだと言う人もいるが…。

風の流れる向きを現しているので風下が方角になるとか、地球から空を見上げると羅針盤と向きが逆になるとか、ようはものの見方の問題でヒトの目で内から見るかカミの目で外から見るかの違いだという話もある。方角が違うだけでそこから発想を変えて考えてみると結構スケールが大きい話になる。単純にあべこべだという話では終わらない。

…でも、結局のところ「諸説あり」でこれといって正しい答えはないが正解なんじゃないか。みんなそれで困っていなければOKみたいな。最初になんとなく決まって定着しちゃうと、あとから変更が難しいということかもしれない。今更正しい方に変更するといっても混乱を招くだけだから、このままにしちゃおうというのはおうおうにしてよくある気がする。

理牌(リーパイ)のアルゴリズム

配牌後に牌をソートして見やすくするアルゴリズムはどのようにすべきか?

萬子、筒子、索子、風牌、字牌をそれぞれ配列分割して連結するか等と考えていたが、効率の良いソートアルゴリズムが思いつかなかった。種類が限られるから、一種類ごと総当たりで牌を抜き出して取り出して言ってもいいが、コードを記述するのが少し手間。だいたい理牌の順は萬子、筒子、索子…とはいったものの別に、索子、筒子、萬子でもいいわけで(このへんんってどういう並びが一般的なんだろう)以外に難しい。ただドラの場合は?(9の次は1筒とすべての牌が循環するものだと思っていたが、違うらしく、萬子は萬子、筒子は筒子、索子は索子の中で1,2,3、、、8,9,1という循環を行い、東南西北と白発中はそれぞれの中で循環するらしい。ドラについて間違って覚えていた。これは結構なレベルで忘れている(汗)

最終結論として、牌をオブジェクト化してプロパティにいろいろな情報をもたせようとしているので、なんの情報でソートしてもかまわないので集合 / フィルタなんかをうまく使えないか?とか模索していたが…結論を言えば、そんなややこしいことを考える必要はなかった。

牌に通番を振る。つまり、一萬が1で始まり索子、筒子、東南西北白発ときて中が34で終わる。これを昇順にクイックソートすればよい。

徒然草2.0
スポンサーリンク
シェアする
gomiryoをフォローする
ごみぶろぐ

コメント

タイトルとURLをコピーしました