電脳麻将でMortalと対戦する

電脳麻将 で Mortal と対戦できるようになりました。

と言っても、皆さんが想像する Mortal とは少し異なります。Mortal は深層強化学習を利用した麻雀AIのオープンソースプロジェクトです。そこで開発されたAIもまた Mortal と呼ばれ、天鳳八~九段相当とも評される実力を持つことで知られています。

続きを読む

麻雀サーバーにMjaiボットを接続する

麻雀サーバー の ver. 1.7.0 にMjaiプロトコル完全互換のボットを召喚するブリッジ機能を追加しました。電脳麻将のAIをボットとして召喚する機能 はすでにリリースしていますが、このMjaiブリッジで mjai-manue のような Mjaiプロトコル に準拠したボットも麻雀サーバーに召喚できるようになりました。

続きを読む

さくらVPSで天鳳レベルのサービスは実現できるのか?

電脳麻将 は さくらVPS で運用しており、麻雀サーバー もここにあります。最繁時には 60人程度の方が卓を囲んだ実績 はあるのですが、どこまで受け入れることが可能か調べてみました。もし4000人同時接続できれば 現在の天鳳レベル のトラフィックと言えるでしょう。

続きを読む

電脳麻将UI 〜 VoiceOver対応(0)

アクセシビリティ改善の検討 · Issue #89 · kobalab/Majiang · GitHub で提案されて以来、電脳麻将 のスクリーンリーダー対応は長年の課題でした*1。スクリーンリーダー とは画面に表示された内容を視覚以外の方法で伝えるソフトウェアのことで、その手段としては音声が使われることが多いです。Mac や iPhone では VoiceOver、Windows では NVDA が有名です。電脳麻将をスクリーンリーダーに対応させることができれば、目の不自由な方でも麻雀を楽しむ可能性が広がるはずです*2。

*1:すでに5年も経ってしまいました……

*2:点字麻雀のような試みもあります

続きを読む

電脳麻将UI 〜 対局者(ネット対戦)

電脳麻将UI 〜 対局者(対AI戦) - koba::blog に続いて、今回はネット対戦です。変更は以下の4点です。

  • WebSocket通信
  • 描画担当の変更
  • 時間切れ対応
  • 開局画面への応答

対AI戦は スタンドアロン型 の実装でしたが、ネット対戦は クライアント・サーバ型 の実装になります。

続きを読む

電脳麻将UI 〜 対局者(基盤)

対局者のUIは Majiang.UI.Player*1 で実装しますが、その構造はやや複雑です。今回はまず構造から説明します*2。

電脳麻将 で対局者を実現するのは以下の2つのクラスです。

Majiang.AI
パッケージ @kobalab/majiang-ai で実装する 麻雀AI です。
Majiang.UI.Player
パッケージ @kobalab/majiang-ui で実装する打牌選択などの UI です。今回説明したい対象はこちらです。

*1:ソースプログラムはリファクタリング前の実装ですので、一部ブログ記事と一致しな箇所があることをご了承ください

*2:「電脳麻将本」から抜粋しながら説明します

続きを読む

電脳麻将UI 〜 設計思想

今回は実装方法の説明ではなく、majiang-ui の設計思想について語ってみたいと思います。これは、「なぜjQueryを使うのか」、「なぜ自前でMVCを実装するのか」、「なぜTypescript化しないのか」に対する回答でもあります。

  • パッケージに分割する
  • Canvas を使わない
  • HTMLを「書かない」
  • HTML/CSSに依存しない
  • jQuery を使い続ける
  • MVCモデルを採用する
  • 型を定義しない
  • Pug と Stylus を採用する
  • CSS用のclassを使わない(試み)
続きを読む