このプロジェクトでは、オープンなネットワーク麻雀のプロトコルを策定し、その実装を行います。
ちなみに発端は2chのプログラム板の「おまいら最強の麻雀プログラムしてみろよ」スレです(現在はpart2)
将来的には、そのプロトコルを使用した様々なサーバ、クライアントの実装がでてきたら良いなと思います。
とりあえず名前ですが、スレで紹介されていた将棋用のUSI(Universal Shogi Interface)にあやかって、 UMP(Universal Mahjong Protocol)でいこうと思います。
また、基本コンセプトとして、UMPでは麻雀自体のルールは定義しません。つまり、「クイタンあり」のような情報をUMPでは扱いません。
クイタンありかなしかはサーバの実装次第で、クライアントの実装では、 クイタンで和了ろうとして、サーバにコマンドを送り、
認められるかどうかで初めてわかります。
これだと問題だと思われる方もいるでしょうが、逆にそれを扱ってしまうことで、プロトコルの可搬性が落ちてしまうのを避けるためです。
あくまでもUMPでは、麻雀におけるアクションや情報をサーバとクライアントでやりとりするために必要なものを定義するにとどめ、 単純ではあるが、多くのルールに対応できるものを目指します。
サーバ | クライアント | 説明 |
hello [<オプション> ...] | hello [<オプション> ...] | 接続確認。オプションについては後述 |
bye | bye | 接続終了 |
error <メッセージ> | サーバから強制的に接続を切断する際に送る(認証失敗等) | |
gamestart <席> <名前A> ... | ゲーム(半荘)開始 | |
gameend <点数A> ... | ゲーム終了 | |
kyokustart <場風> <親> <本場> <供託> | 一局が始まるときに送る | |
kyokuend | 一局終了 | |
ready? | ok | クライアントの返答を待つ |
point <プレイヤー> (=|+|-)<点数> | プレイヤーの点数を通知する。点数の前には必ず=|+|-が付き、=は点数の直指定、+-は増減を意味する | |
dice <サイコロの目1> <サイコロの目2> | サイコロの出目を送る | |
haipai <プレイヤー> [<配牌>] | 配牌を配る | |
open <プレイヤー> <晒した牌> [<捨牌>] | 手牌を公開する(和了、流局時のテンパイ宣言、オープンリーチ、チー、ポン、カン) | |
dora <牌> | ドラ表示牌を送る | |
tsumo <プレイヤー> <残り枚数> [<牌>] | 自摸る。他家には牌は送らない | |
sutehai? | 捨牌を尋ねる | |
sute <牌> [tsumogiri] | 捨てる | |
ankan <牌> | 暗カン | |
kakan <牌> | 加カン | |
richi <牌> [tsumogiri] | リーチをかけて牌を捨てる | |
openrichi <牌> [<手牌>] [tsumogiri] | オープンリーチをかけて牌をすてる | |
tsumo | ツモあがり | |
sutehai <プレイヤー> <牌> [tsumogiri] | 捨牌 | |
naku? <牌> | 牌を鳴くか尋ねる | |
no | 鳴かない | |
chi <牌1> <牌2> | チー | |
pon <牌1> <牌2> | ポン | |
kan | 明カン | |
ron | ロン | |
say <プレイヤー> chi | pon | kan | ron | tsumo | richi | tenpai | noten | 発声 | |
agari <プレイヤー> <符> <役1> <ハン数1> ... | あがり | |
ryukyoku | 流局 | |
tenpai? | テンパイを宣言するか尋ねる | |
yes | 宣言する | |
no | 宣言しない |
重要度 | オプション名 | 説明 |
◎ | ump=<バージョン> | バージョン |
○ | name=<名前> | 名前。UTF-8をURIエンコードしたもの |
△ | user=<ユーザ名> | 認証用ユーザ名 |
△ | password=<パスワード> | 認証用パスワード |