電脳麻将UI 〜 selector

電脳麻将ver.2.0.0 からキーボードで打牌選択できるようになりました。これを実現しているのが selector です。リストを表すDOMノードに selector を適用すると、

  • 矢印キーなどで1つ1つ選択し、Enterキーで確定
  • マウスを合わせることで選択し、クリックで確定
  • タッチデバイスではタップで選択し、再度タップで確定

という選択UIが実現できます。

続きを読む

電脳麻将UI 〜 scale

電脳麻将 のスマートフォン表示では、画面サイズに関わらず画面いっぱいに卓を表示していますが、それを実現しているのが関数 scale() です。

スマートフォン用の表示では、卓は 800x450px の固定サイズで描画し、スマートフォン画面の縮尺をそれに合わせています。まず、卓を画面の横幅いっぱいに表示するために、meta 要素の viewport で画面幅を指定します。

続きを読む

電脳麻将UI 〜 fade-in/out

かつて 電脳麻将 では、画面要素の fade-in/out を jQueryメソッド で行っていましたが、ver.1.4.2 でCSSの機能で行うように変更しています。

jQuery ではCSSの opacity の値をタイマーイベントで徐々に変更することで実装していたようです。これをCSSの transition を使用するように変更します。

続きを読む

電脳麻将UIのリファクタリング

1年半ほど前に 電脳麻将 のUIのリファクタリングを始めたのですが、気力が続かずこの一年以上放置状態になっていました。

どこまで続くか分かりませんが、このプロジェクトを再開しようと思います。

続きを読む

牌の危険度計算アルゴリズム(5) 〜 危険度閾値の再調整

打牌選択アルゴリズム(10) 〜 残り牌数の正規化 - koba::blog で残り牌数の数え方を変え、それにより変化した手牌の評価値に合わせて 押し引きアルゴリズムの改善(4) 〜 押し引き閾値の再調整 - koba::blog で押し引きの閾値を再調整しました。今回は牌の危険度の閾値を再調整します。危険度決定アルゴリズム自体は変更しないので、調整は不要な可能性が高いです。

続きを読む

押し引きアルゴリズムの改善(4) 〜 押し引き閾値の再調整

打牌選択アルゴリズム(10) 〜 残り牌数の正規化 - koba::blog で残り牌数の数え方を変えたため、評価値の値も変わりました*1。このため現在の評価値のスケールに合わせて調整していた押し引きの閾値にも変更が必要です。押し引き表の牌姿は評価値何点? - koba::blog押し引きアルゴリズムの改善(3) - koba::blog と同様な方法で再調整していきます。

*1:ツモ可能枚数は見えていない牌数より少ないので、評価値も相対的に低くなる

続きを読む

打牌選択アルゴリズム(10) 〜 残り牌数の正規化

麻雀の打牌選択アルゴリズム(9) - koba::blog 以来、8年ぶりに 電脳麻将 の打牌選択アルゴリズムを変更します。

電脳麻将では手牌の 評価値 を元に打牌を選択していますが、評価値計算 の際の「残り牌数」は「見えていない牌数」つまり、相手の手牌・牌山 に隠れている牌*1を指しています。このため流局時でもまだ最大54枚*2が使えると判断するのですが、実際にはもう使える牌はありません。今回「残り牌数」の総和が「ツモ可能枚数」と一致するように正規化します。ツモ可能枚数は流局時には0枚となるため、もはや使える牌はないことが分かる訳です。

*1:ドラ表示牌・自身の手牌・捨て牌・相手の副露牌 として見えている牌以外

*2:相手の手牌13枚 × 3 + 王牌13枚

続きを読む

牌の危険度決定アルゴリズムを評価する(2)

牌の危険度決定アルゴリズムを評価する - koba::blog ではリーチの直後と終局直前のタイミングで牌の危険度決定アルゴリズムを評価しましたが、今回は「山読み」のアルゴリズムを評価する - koba::blog でやったように毎巡評価し、グラフ化してみました。

評価方法には KLダイバージェンス*1を追加しました。

*1:用語を合わせて「相対エントロピー誤差」としたかったのですが、この方法を「誤差」と呼ぶのは誤りのようです

続きを読む

「山読み」のアルゴリズムを評価する

牌の危険度決定アルゴリズムを評価する - koba::blog では天鳳の牌譜を使って牌の危険度決定アルゴリズムの精度を評価しました。今回はいくつかの山読みアルゴリズムの候補について、同様の手法で評価してみます。

「山読み」といってもランダムに積まれている牌山を直接読むことは不可能です。打ち手の意思が入る手牌に使われている牌を推定することにより、残りの牌が牌山にあると間接的に推定することになります。つまり行うべきことは「手牌読み」という訳です。

続きを読む