Mahjong-Player is a fork of the original mahjong suite (@kobalab/Majiang) created by @kobalab.
Several changes are made for my own daily use as well as contributions from others. It includes but not limited to:
- Easy setup with Docker container images
- An App built with Tauri to play offline
- Bundle with @kobalab/majiang-server for easier local web development and netplay in one package
- Automatic builds and release for new versions
- More notable changes are listed in this section
- Issues are tracked in this project boards
I will take this repository offline if the original author complains. Thanks.
- Add sitemap.xml for docker distribution
- Add macOS App as well as multi-arch docker images (x64/arm64) to ghcr.io
- Onboard Tauri to build mahjong-player into an app
- Make navbar and footer consistent across all the webpages
- Add docker deployment with dockerfile and updated node scripts, auto deploy package with ghcr.io registry
- Bundle @kobalab/majiang-server with the game frontend as a whole, update node scripts
- Switch from @kobalab/tenhou-log server mode to import libs in order to obtain logs from tenhou xml then convert to json
npm install- Install all dependenciesnpm run build:all-dev/npm run build:all-prod- Build static site (./dist), update config/*.json for different base_urlnpm run build:all-docker- Reserved for docker so that html PUG will apply localhost:8080 and pull og:image from github so not bound to specific domain namenpm run build:all-app- Reserved for app, similar tonpm run build:all-dockerbut specifically generated for appnpm run server- Start majiang backend express server and hostdistafter building docsnpm run bot- Show commands to start bot and connect to the server
- The app is built with Tauri, please install rustup and ensure rust version up to date
npm install- Install all dependenciesnpx tauri dev- Build static site, start express server, build tauri app and serve the contentnpx tauri build- Build static site (with docker config), build tauri app with installer based on host arch/plat
Note: A few dependencies may be required for building on linux, see build-dist-apps.yml.
- Build docker image manually and deploy:
docker build -t mahjong-player:latest -f Dockerfile .docker run -d -p 8080:8080 mahjong-player:latest# Without sitemapdocker run -d -p 8080:8080 -e "SITE_URL=https://<my_site_url>" mahjong-player:latest# With sitemap
- Pull existing image from GitHub Packages, build per commit:
docker pull ghcr.io/coralsundy/mahjong-player:latest# Or other tagsdocker run -d -p 8080:8080 ghcr.io/coralsundy/mahjong-player:latest# Without sitemapdocker run -d -p 8080:8080 -e "SITE_URL=https://<my_site_url>" ghcr.io/coralsundy/mahjong-player:latest# With sitemap
Mahjong-Player follows a casual development cycle. For releases, we use CalVer to mark overall versions.
Each release includes two main components and often released together:
- The Web code @kobalab/Majiang stays in sync with the upstream for now, but may branch off later if major features are added.
- The App code uses SemVer to track major, minor, and patch changes, just like Web.
HTML5 + JavaScript で動作する麻雀アプリ「電脳麻将」
| コマンド | 説明 |
|---|---|
release |
リリース用にビルドする。 |
build |
デバッグ用にビルドする。 |
build:js |
JavaScriptのみデバッグ用にビルドする。 |
build:css |
CSSのみビルドする。 |
build:html |
HTMLのみビルドする。 |
以下のサブパッケージを使って構成しています。
- GitHub: https://github.com/kobalab/majiang-core
- npm: @kobalab/majiang-core
手牌の操作、シャンテン数・和了点計算、局進行・卓情報の管理、思考ルーチンの雛形を含む基本クラス群です。
- GitHub: https://github.com/kobalab/majiang-ai
- npm: @kobalab/majiang-ai
麻雀AIとその 開発ツール です。 AIは majiang-core のクラス Majiang.Player の具体的な実装になっています。
- GitHub: https://github.com/kobalab/majiang-ui
- npm: @kobalab/majiang-ui
手牌表示、盤面表示、牌譜再生 など画面表示やユーザとのインタラクションを実現するクラス群です。
- GitHub: https://github.com/kobalab/tenhou-url-log
- npm: @kobalab/tenhou-url-log
電脳麻将の牌譜をネット麻雀 天鳳 のJSON形式の牌譜(各種AI解析の事実上の共通フォーマット)に変換する機能を提供します。
そのほかに以下の関連パッケージがあります。
- GitHub: https://github.com/kobalab/majiang-server
- npm: @kobalab/majiang-server
WebSocketによる麻雀サーバーの実装です。 電脳麻将のネット対戦は本サーバに接続して実現しています。
- GitHub: https://github.com/kobalab/majiang-analog
- npm: @kobalab/majiang-analog
牌譜解析ツールです。 電脳麻将形式の牌譜を解析する基底クラスを提供します。 本クラスのサブクラスを作成し、解析のためのプログラムを書くことができます。
- GitHub: https://github.com/kobalab/tenhou-log
- npm: @kobalab/tenhou-log
ネット麻雀 天鳳 の牌譜を電脳麻将形式に変換します。 本パッケージを利用することで天鳳の牌譜を解析したり、再生したりすることが可能になります。 電脳麻将 牌譜ビューアの天鳳牌譜再生は本サーバに接続して実現しています。
電脳麻将のプログラムを解説した書籍を出版しました。
書籍ではサブパッケージの majiang-core と majiang-ai を扱っています。
書籍出版以降(ver.2.0.0以降)の情報です(カッコ内は執筆時のバージョン)。
- 牌譜エディタ
- 牌譜エディタの使い方 (v2.4)
- 電脳麻将でNAGA解析用のデータを作成する (v2.4)
- 麻雀サーバー
- 麻雀サーバーの使い方 (v2.3)
- Passportで外部認証を実現する (v2.3)
- ネット対戦の持ち時間設定方法 (v2.3)
- 麻雀ボットの実装 (v2.4)
- 偽ラグの実装 (v2.4)
- 点数計算ドリル
- 電脳麻将 ver.2.2.0 公開#点数計算ドリル (v2.2)
- 麻雀の点数計算方法(正式版・簡易版) (v2.2)
- アルゴリズム・その他
- 麻雀AIの作り方 (v2.4)
- 鳴かない麻雀の成績への影響をシミュレーションする (v2.4)
- リーチ禁止の影響をシミュレーションする (v2.4)
- 天鳳鳳凰卓統計(2023年) (v2.4)
- バックトラックで麻雀の和了形一覧を求める (v2.3)
- 麻雀の「待ち」を出力するプログラム (v2.0)
- 麻雀アプリのデバッグに使える牌姿 (v2.0)
- 天鳳鳳凰卓の最高・最大・最長記録 (v2.4)
過去のブログ記事。 内容はやや古いです。 ver.2.0.0 のプログラムの情報は 書籍 をご覧ください。 カッコ内は執筆時のバージョンです。
- プログラム構成
- 電脳麻将のプログラム構成(0) ~ 全体編 (v1.4)
- 電脳麻将のプログラム構成(1) 〜 JavaScript編 (v1.4)
- 電脳麻将のプログラム構成(2) 〜 HTML/CSS編 (v1.4)
- 手牌などのデータ構造
- 麻雀の手牌のJavascript表現 (v0.2)
- 麻雀の手牌の文字列表現 (v0.2)
- 牌山と河のデータ構造 (v1.4)
- 電脳麻将の牌譜形式 (v0.3)
- シャンテン数計算
- 向聴数を求めるプログラム(七対子・国士無双編) (v0.2)
- 向聴数を求めるプログラム(一般手編(再)) (v0.2)
- 向聴数を求めるプログラム(一般手編(再々)) (v0.2)
- 向聴数を求めるプログラム(修正版) (v0.9)
- 和了点計算
- 麻雀の和了点を計算するプログラム (v0.3)
- 麻雀の和了点の計算 ~ 状況役と懸賞役の一覧を作る (v0.3)
- 和了形を求めるプログラム(特殊形) (v0.3)
- 和了形を求めるプログラム(一般形) (v0.3)
- 麻雀の符を求めるプログラム (v0.3)
- 麻雀の役を判定するプログラム(再) (v0.3)
- 麻雀の和了点を計算するプログラム(最終回) (v0.3)
- ゲーム進行
- 麻雀の局進行のプログラム方式 (v0.3)
- 麻雀の局進行のプログラム実装 (v0.3)
- 麻雀の局進行の状態遷移 (v0.3)
- 麻雀ルールのカスタマイズ(0) ~ ルール一覧 (v2.0)
- 麻雀ルールのカスタマイズ(1) ~ 終局判断とポイント計算 (v2.0)
- 麻雀ルールのカスタマイズ(2) ~ 流局処理と連荘判断 (v2.0)
- 麻雀ルールのカスタマイズ(3) ~ 赤牌とドラ (v2.0)
- 麻雀ルールのカスタマイズ(4) ~ 和了役と点計算 (v2.0)
- 麻雀ルールのカスタマイズ(5) ~ 打牌制約 (v2.0)
- 思考ルーチン
- 麻雀AIのプログラム構造 (v0.4)
- 麻雀の打牌選択アルゴリズム(1) (v0.4)
- 麻雀の打牌選択アルゴリズム(2) (v0.4)
- 麻雀の打牌選択アルゴリズム(3) (v0.4)
- ベタオリのアルゴリズム (v0.5)
- 麻雀の副露判断アルゴリズム(1) (v0.6)
- 麻雀の副露判断アルゴリズム(2) (v0.6)
- 麻雀の副露判断アルゴリズム(3) (v0.6)
- 麻雀の副露判断アルゴリズム(4) (v0.6)
- 麻雀の打牌選択アルゴリズム(4) (v0.9)
- 麻雀の打牌選択アルゴリズム(5) (v0.9)
- 麻雀の打牌選択アルゴリズム(6) (v0.9)
- 麻雀の打牌選択アルゴリズム(7) (v0.9)
- 麻雀の打牌選択アルゴリズム(8) (v0.9)
- 麻雀の副露判断アルゴリズム(5) (v0.9)
- 麻雀の打牌選択アルゴリズム(9) (v0.9)
- 押し引き表の牌姿は評価値何点? (v1.5)
- 押し引きアルゴリズムの改善(1) (v1.5)
- 押し引きアルゴリズムの改善(2) (v1.5)
- 押し引きアルゴリズムの改善(3) (v1.5)
- 天鳳鳳凰卓の牌の危険度表 (v1.6)
- 牌の危険度計算アルゴリズム(1) (v1.6)
- 牌の危険度計算アルゴリズム(2) (v1.6)
- 牌の危険度計算アルゴリズム(3) (v1.6)
- 牌の危険度計算アルゴリズム(4) (v1.6)
- 表示処理
- 電脳麻将におけるMVCの実装 (v1.5)
- 麻雀の手牌を表示するプログラム (v1.4)
- その他
- 電脳麻将のプログラム中の中国語一覧 (v0.8)
- 天鳳の牌譜形式を解析する(1) (v0.8)
- 天鳳の牌譜形式を解析する(2) (v0.8)
- 天鳳の牌譜形式を解析する(3) (v0.8)
- 天鳳の牌譜形式を解析する(4) (v0.8)
- 牌画入力ツール (v0.7)
- 電脳麻将で天鳳の牌譜を検討する (v1.4)
- デュプリケート麻雀の実装 (v1.5)
ゲームで使用している牌画像は 麻雀の画像・素材、 音声は 天鳳用オリジナルSE: アンコロキングblog のものを使用させていただいてます。