電脳麻将 は さくらVPS で運用しており、麻雀サーバー もここにあります。最繁時には 60人程度の方が卓を囲んだ実績 はあるのですが、どこまで受け入れることが可能か調べてみました。もし4000人同時接続できれば 現在の天鳳レベル のトラフィックと言えるでしょう。
続きを読む電脳麻将UI 〜 VoiceOver対応(0)
電脳麻将UI 〜 対局者(ネット対戦)
電脳麻将UI 〜 対局者(対AI戦) - koba::blog に続いて、今回はネット対戦です。変更は以下の4点です。
- WebSocket通信
- 描画担当の変更
- 時間切れ対応
- 開局画面への応答
対AI戦は スタンドアロン型 の実装でしたが、ネット対戦は クライアント・サーバ型 の実装になります。
続きを読む電脳麻将UI 〜 対局者(対AI戦)
Majiang.UI.Player では 電脳麻将UI 〜 対局者(基盤) - koba::blog で説明したように 第3層 応答送信層 のみを実装します。第1層 通知受信層 で受信する 通知メッセージ と第3層で応答する 応答メッセージ の対応は以下の通りです。
続きを読む電脳麻将UI 〜 対局者(基盤)
対局者のUIは Majiang.UI.Player*1 で実装しますが、その構造はやや複雑です。今回はまず構造から説明します*2。
電脳麻将 で対局者を実現するのは以下の2つのクラスです。
- Majiang.AI
- パッケージ @kobalab/majiang-ai で実装する 麻雀AI です。
- Majiang.UI.Player
- パッケージ @kobalab/majiang-ui で実装する打牌選択などの UI です。今回説明したい対象はこちらです。
電脳麻将UI 〜 設計思想
今回は実装方法の説明ではなく、majiang-ui の設計思想について語ってみたいと思います。これは、「なぜjQueryを使うのか」、「なぜ自前でMVCを実装するのか」、「なぜTypescript化しないのか」に対する回答でもあります。
- パッケージに分割する
- Canvas を使わない
- HTMLを「書かない」
- HTML/CSSに依存しない
- jQuery を使い続ける
- MVCモデルを採用する
- 型を定義しない
- Pug と Stylus を採用する
- CSS用のclassを使わない(試み)
電脳麻将UI 〜 盤面

電脳麻将 では盤面を 卓情報 と呼ぶオブジェクトで表します。これを表示するのが @kobalab/majiang-ui の Majiang.Ui.Board です。
卓情報は現在は以下の3つの場面で生成されます*1。
- 対局中に対局エンジン(Majiang.Game)が生成
- 牌譜再生中に牌譜ビューア(Majiang.UI.Paipu)が牌譜から復元
- ネット対局中にクライアント(Majiang.UI.Player)が通信内容から復元
*1:これ以外にも「牌譜解析ツール」も牌譜から卓情報を復元しています

