牌の危険度計算アルゴリズム(2)

牌の危険度を評価する際に「スジをカウントする」のが最近のトレンドのようである*1。これは「終盤になり安全牌が増えればその分残った牌の危険度が上がる」という考え方で、相対危険度 のようなもの。牌の危険度計算アルゴリズム(1) - koba::blog で実装したカベを考慮した危険度は、巡目によって変化しない 絶対危険度 なので、

  • その牌の絶対危険度 / 絶対危険度の総和

で相対危険度を計算し、押し引きに利用することを試みる。

続きを読む

麻雀ルールのカスタマイズ(2) ~ 流局処理と連荘判断

電脳麻将 ver.2.0 で開発中の新機能「パラメータによるルールのカスタマイズ」。麻雀ルールのカスタマイズ(1) ~ 終局判断とポイント計算 - koba::blog に続き今回の話題は 流局処理連荘判断。これらに関わるパラメータは以下の通り。

  • 途中流局あり
  • 流し満貫あり
  • ノーテン宣言あり
  • ノーテン罰あり
  • 最大同時和了数
  • 連荘方式
続きを読む

麻雀ルールのカスタマイズ(0) ~ ルール一覧

電脳麻将 ver.2.0 開発 における目玉の一つが パラメータによるルールのカスタマイズ である。具体的なパラメータ一覧は ルール · kobalab/majiang-core Wiki · GitHub に記した通り。これらを組み合わせてカスタマイズ可能とする。

実装予定のパラメータでどこまで各種ルールに対応可能か調べてみた。ネット麻雀代表として 天鳳、競技麻雀代表として Mリーグ、古典的ルール代表として 最高位戦Classic を例にパラメータを適用した*1

*1:ただし天鳳は「ナシナシ東風戦」とした

続きを読む

nginx のインストールと設定

nginx

kobalab.net ではWebサーバに Apache を使用していましたが、今後WebSocketを使用したアプリを配置する可能性があることを考慮して、nginx に乗り換えました。Apacheで配信していたコンテンツは

  1. 静的コンテンツ (電脳麻将)
  2. CGIやSSIを使用したコンテンツ (トップページ*1XiuMai*2
  3. Node.js のサービスに連携するリバースプロキシ (LiuLian天鳳牌譜変換サーバ)

に分類できます。1 はnginxで直接配信、2 はnginxをリバースプロキシにしてApacheに連携*3、3 はnginxをリバースプロキシにして直接連携 としました。

*1:アクセスカウンタや新着情報はCGIの出力をSSIで取り込んでいる

*2:mod_perl で動作

*3:可能であればnginxで直接動作させたいが、気軽に雑なCGIが動かせる環境は残しておきたい

続きを読む

電脳麻将におけるMVCの実装

電脳麻将 は HTML5 + CSS3 + JavaScript で動作する SPA です。こういったアプリを実装する場合、現在は ReactVue を使って宣言的に書くのがあたりまえで、jQueryはオワコン といわれています。ですが電脳麻将はあえて jQuery を使って MVC に基づいて実装しています。その理由は jQueryでないと美しく実装できない と考えるからです。

続きを読む

npm モジュールのセキュリティアップデート(2)

GitHubに脆弱性警告が通知されていた。pug-code-gen を 2.0.2 → 2.0.3、pug を 2.0.2 → 3.0.1 にアップデートせよとのお達しである。

f:id:xlc:20210305011307p:plain:w360:right

pug を 2.0.2 → 3.0.1 にアップデートすれば pug-code-gen も 3.0.x にアップデートされるようなので、pug だけアップデートすればよさそうなのだが、この2つのモジュールを使っている pug-cli がアップデートされていない*1。こういうときは npm audit fix を使って package-lock.json を直すが定番だが、さすがにメジャーバージョンのアップデートは対応できない。

以前、npm モジュールのセキュリティアップデート - koba::blog のやり方で修復したことがあるのだが、これはどうやらたまたまうまくいっただけのようである。そこでネットを調べると package.json の resolutions を使って依存パッケージのバージョンを指定する - 30歳からのプログラミング というページを発見したので、これを参考にバージョンアップを試みた。

*1:1.0.0-alpha6 というなんともやる気のないバージョンのまま

続きを読む