石畑 恭平
E-mail : ishihata@amy.hi-ho.ne.jp
ここでは、Windows版「まうじゃん」及び WindowsCE版「まうじゃん+」でサポートされている対戦相手プラグインの仕様を説明します。
C/C++ を知らない方は、読んでも分からないと思います。あしからず。
1 概要
対戦相手プラグインは DLL の形で供給されます。よって、プラグインを作成するには
DLL を作ることのできる環境が必要です。私は C/C++ のことしか分かりませんのではっきりとは言えませんが、
DLL を作れるのであれば他の言語でも作成できると思います。
なお、この仕様書は Windows 版「まうじゃん」と WindowsCE版「まうじゃん+」の両方に対応しています。この仕様書に従って書いたソースコードは、両プラットフォーム用にビルドして使うことができます(きっと)。
まず、Windows.h をインクルードしてください。
#include <windows.h>
プラグインの DLL には MJPInterfaceFunc という関数が存在する必要があります。プロトタイプは
UINT WINAPI MJPInterfaceFunc(LPVOID inst,UINT message,UINT param1,UINT param2);で、この関数を介してウィンドウメッセージと同じような感じで「まうじゃん」本体からメッセージが送られてきます。ここで WINAPI 呼び出し規約を使っているのは、C/C++以外の言語でも作れるように、との考えからですが、実は本当にこれで良いのか自分でも分かってなかったりします。そうそう、当然のことですが、この関数は外部から見えるようにしといてください。
UINT WINAPI MJSendMessage(LPVOID inst,UINT message,UINT param1,UINT param2);です。この関数へのアドレスは、プラグインの初期化時に得ることができます。
2 簡単な例
とりあえず、簡単なプログラム例を見てみましょう。
ファイル名 Test.c #include <windows.h>
#include "MIPIface.h"
UINT (WINAPI *MJSendMessage)(LPVOID,UINT,UINT,UINT);
UINT WINAPI MJPInterfaceFunc(LPVOID inst,UINT message,UINT param1,UINT param2)
{
switch(message){
case MJPI_SUTEHAI :
return MJPIR_SUTEHAI | 13;
case MJPI_ONACTION :
return 0;
case MJPI_STARTKYOKU :
return 0;
case MJPI_ENDKYOKU :
return 0;
case MJPI_STARTGAME :
return 0;
case MJPI_ENDGAME :
return 0;
case MJPI_CREATEINSTANCE :
return 0;
case MJPI_INITIALIZE :
MJSendMessage = (UINT (WINAPI *)(LPVOID,UINT,UINT,UINT))param2;
return 0;
case MJPI_YOURNAME :
return (UINT)TEXT("てすと");
case MJPI_DESTROY :
return 0;
}
return MJR_NOTCARED;
}
このプログラムをビルドするには、上記2つのファイルの他に、ヘッダファイル MIPIface.h が必要になります。
ファイル名 Test.def LIBRARY Test
EXPORTS
MJPInterfaceFunc
MIPIface.h ダウンロード
必要なファイルがそろったら、ビルドしてみましょう。Visual C++ を使用する場合は以下のようにします。
ビルドしてできた DLL は、「まうじゃん」に認識させると”てすと”という名前の対戦相手になります。内容は、「ツモ切り!」です。なにが来ようと「ツモ切り」です。WINDOWSプログラミングの経験のある方なら、だいたいどういうものか分かっていただけたと思います。
3 インスタンスの考え方
ある程度プログラミングの経験のある方なら分かると思うのですが、オブジェクト指向においてはクラスとインスタンスという考え方が重要になります。対戦相手プラグインもこの考え方を使っています(と言うより、DLLの考え方がそうだから仕方ないんですよね)。ここまで読んで「なんだか難しそうだな」と思ってしまった方、そんなに身構えるほどのことではありません。要するに、対戦相手ごとに作業領域が必要だ、ということなのです。
なぜそういうものが必要なのか? DLLのプログラムを組んだことのある方なら分かると思うのですが、DLLは複数のところで使われている場合でも、そのDLLのグローバル変数はすべてのところで共有されてしまうのです。たとえば、ある対戦相手プラグインを作って、その対戦相手同士を対戦させたとしましょう。もし、そのプラグインの内部データをグローバル変数に入れていたら、ある対戦相手が別の対戦相手の内部データを破壊してしまうことになります。そのため、グローバル変数を使わずに、内部データを保存するためのメモリ(=作業領域)が必要になります。
「まうじゃん」では、各対戦相手のための作業領域を本体側で確保し、そこへのポインタをプラグインに送るという形をとっています。また、このポインタを用いて各対戦相手を区別しています。
MJInterfaceFunc 関数および MJSendMessage 関数の第1引数(inst)は、このポインタを表します。このポインタを使って内部データにアクセスしたり、MJSendMessage 関数で「まうじゃん」本体に指示を出します。
ただし、MJInterfaceFunc 関数を介して「まうじゃん」本体からメッセージが送られる場合、場合によっては第1引数(inst)に 0 (NULL) が指定されることがあります。これは、そのメッセージが個々のインスタンスに対するものではなく、クラス全体に対するものだということを表します。とは言っても、そういうメッセージは限られてますので、あまり深く考える必要は無いでしょう。どのようなメッセージがこれに当たるのかは、各メッセージを説明しながら書きます。
このような仕様のため、言語としては C よりも C++ を使った方が楽です(クラスを扱えるから)。
4 決まりごと
4.1 MIPIface.h について
対戦相手プラグインを作るには、MIPIface.h というヘッダファイルが必要です。
MIPIface.h ダウンロード
プログラムの先頭で、windows.h の後に #include してください。
#include <windows.h>
#include "MIPIface.h"
4.2 牌番号
プログラムでは、牌を 0 から 33 の整数の値で表します。各牌と数の対応は以下の通りです。
番号 | 0 | ・・・ | 8 | 9 | ・・・ | 17 | 18 | ・・・ | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 |
牌 | 一萬 | ・・・ | 九萬 | 一筒 | ・・・ | 九筒 | 一索 | ・・・ | 九索 | 東 | 南 | 西 | 北 | 白 | 発 | 中 |
4.3 構造体
対戦相手プラグインのインターフェースでは、手牌の状態を MJITehai という構造体で表します。この構造体は MIPIface.h で定義されており、その定義は以下のようになっています。
メンバ変数の内容を以下に説明します。typedef struct { UINT tehai[14]; UINT tehai_max; UINT minshun[4]; UINT minshun_max; UINT minkou[4]; UINT minkou_max; UINT minkan[4]; UINT minkan_max; UINT ankan[4]; UINT ankan_max; UINT reserved1; UINT reserved2; } MJITehai;
tehai[14] : 鳴いたものやアンカン以外の、手の内にある手牌の状態を表します。ただしこの中にはツモ牌は含まれません。「まうじゃん」本体から手牌の状態を得る場合は昇順にソートされて渡されますが、プラグインから「まうじゃん」本体に渡す時はソートされている必要はありません。
tehai_max : tehai[14]の中に実際にあるデータの数。最大で13になります。
minshun[4] : ミンシュン(チーした順子)を表します。順子ですから連なった3つの牌から成っているわけですが、その内の一番小さいもの(たとえば、2,3,4の場合は2)の牌番号がこの値となります。
minshun_max : ミンシュンの数。
minkou[4], minkou_max : ミンコを表します。
minkan[4], minkan_max : ミンカンを表します。
ankan[4], ankan_max : アンカンを表します。
reserved1, reserved2 : 予約されています。
以前のバージョンでは「赤五」ルールのことを考えていませんでした。そのため、そのままでは赤五と普通の牌の区別ができません。
「赤五」ルールに対応するためには、まず構造体タイプをタイプ1に変更します。それには後述のMJMI_SETSTRUCTTYPEメッセージを送ります。初期化の部分で送れば良いでしょう。
すると、そのプラグインが得られるあらゆる牌情報(手牌、捨て牌、ツモ牌)の牌番号には、赤に関する付加情報が入るようになります。具体的には、牌番号の第6ビットが、赤牌かそうでないかのフラグになります。つまり、赤五の牌番号は、case MJPI_INITIALIZE : MJSendMessage = (UINT (WINAPI *)(LPVOID,UINT,UINT,UINT))param2; if (inst) if ((*MJSendMessage)(inst,MJMI_SETSTRUCTTYPE,1,0)==MJR_NOTCARED) return 1; return 0;
赤五萬 ・・・ 4 + 64 = 68になります。
赤五筒 ・・・ 13 + 64 = 77
赤五索 ・・・ 22 + 64 = 86
また、手牌を表す構造体として、MJITehai 構造体の代わりに MJITehai1 構造体を用いることになります。
拡張されたメンバ変数について説明します。typedef struct { UINT tehai[14]; UINT tehai_max; UINT minshun[4]; UINT minshun_max; UINT minkou[4]; UINT minkou_max; UINT minkan[4]; UINT minkan_max; UINT ankan[4]; UINT ankan_max; UINT minshun_hai[3][4]; UINT minkou_hai[3][4]; UINT minkan_hai[4][4]; UINT ankan_hai[4][4]; UINT reserved1; UINT reserved2; } MJITehai1;
minshun_hai[ j ][ i ] : minshun[ i ]の構成を表します。minshun_hai[0][ i ]は鳴いた牌の牌番号,minshun_hai[1][ i ], minshun_hai[2][ i ]は残りの2牌の牌番号です。
minkou_hai, minkan_hai, ankan_hai も同様です。
5 メッセージ
メッセージには、「まうじゃん」本体からプラグインへ送られてくる(MJInterfaceFunc で受けることになる)MJPIメッセージと、プラグインから「まうじゃん」本体に送る(MJSendMessage で送る)MJMIメッセージがあります。ここではそれぞれについて説明します。
「まうじゃん」本体からプラグインに送られてくるメッセージを MJPIメッセージと呼びます。MJPIメッセージに対しては、基本的に”無視”することができます(例外あり)。無視する場合は、MJR_NOTCARED
を返します。この場合、「まうじゃん」本体が適当に処理してくれます。よって、プラグインでは応答したいメッセージに対するコードだけを書いて、あとは無視する、ということができます。ちなみに、MJPIメッセージに対する無効な戻り値は原則として無視されます。
|
|
|
|
MJPI_CREATEINSTANCE | 必要な作業領域を返す |
|
MJPI_INITIALIZE | インスタンス初期化 |
|
MJPI_YOURNAME | 名前を返す |
|
MJPI_DESTROY | インスタンス破棄 |
|
MJPI_SUTEHAI | 捨て牌 |
|
MJPI_ONACTION | 他家のアクションへの対応 |
MJPI_STARTGAME | 半荘(一荘)開始 | |
MJPI_ENDGAME | 半荘(一荘)終了 | |
MJPI_STARTKYOKU | 局の開始 | |
MJPI_ENDKYOKU | 局の終了 | |
MJPI_BASHOGIME | 場所決め | |
MJPI_ISEXCHANGEABLE | 途中参加の可否 | |
MJPI_ONEXCHANGE | 途中参加 |
では、メッセージを説明しましょう。
5.1.1 ちゃんとに応答すべきメッセージ
このメッセージはインスタンスに 0 (NULL) を指定して送られることがあります。
必要な作業領域のサイズ(バイト数)を返してください。
戻り値 : インスタンス生成に必要なサイズ(バイト数)
無視した場合 : 0とみなされる
このメッセージはインスタンスに 0 (NULL) を指定して送られることがあります。
インスタンスを初期化する時に一回だけ送られてきます。MJSendMessage 関数へのポインタはこのときにのみ取得できます。
param2 : MJSendMessage 関数へのポインタ
戻り値 : 正常終了のときは0、それ以外のときは0以外
無視した場合 : 異常終了とみなされる
このメッセージはインスタンスに 0 (NULL) を指定して送られることがあります。
対戦相手の名前を表す文字列へのポインタを返してください。文字列の終端はNULL文字(\0)である必要があります。また、名前は半角10文字(全角なら5文字)以下でなくてはなりません。
文字コードについて
Windows 版「まうじゃん」では、文字コードに ASCII/シフトJIS コードを使用しています。それに対して WindowsCE 版「まうじゃん+」では、文字コードに UNICODE(UTF-16) を使用しています。どちらのプラットフォームにも対応できるよう、文字を扱う際は TCHAR 型と TEXT マクロを使用することをおすすめします。これらの型やマクロについては、Win32 プラットフォームSDK のドキュメント等をご覧ください。
戻り値 : 名前を表す文字列へのポインタ
例 :
return (UINT)TEXT("てすと");
無視した場合 : 適当な名前がつけられる
このメッセージはインスタンスに 0 (NULL) を指定して送られることがあります。
インスタンスを破壊する直前に送られます。必要な事後処理をおこなってください。
戻り値 : 正常終了のときは0、それ以外のときは0以外
無視した場合 : 異常終了とみなされる
捨て牌する状況のときに送られます。
LOWORD(param1) : 牌番号 今持ってきた牌 , それ以外 : つも牌は無い
戻り値 :
単に牌を捨てる場合 : MJPIR_SUTEHAI | x無視した場合 : 適当な牌が捨てられます。
リーチをかける場合 : MJPIR_REACH | x
ツモする場合 : MJPIR_TSUMO
流す場合 : MJPIR_NAGASHI
カンする場合 : MJPIR_KAN | hai_nox : 手牌の左端からの番号(0〜13)。MJITehai 構造体の tehai メンバの添字に対応する。ツモ牌は右端にあると考え、常に13に当たる。
hai_no : 牌番号"|"記号は論理和を表す。
自分を含む誰かがアクションを起こした時に送られます。
LOWORD(param1) : アクションを起こした家(自分が0,下家が1,対面が2,上家が3)
HIWORD(param1) : アクションの対象となる家(自分が0,下家が1,対面が2,上家が3)
param2 : 起こしたアクション
捨て牌(リーチの場合を除く) : MJPIR_SUTEHAI | hai_no戻り値 :
捨て牌してリーチ : MJPIR_REACH | hai_no
ポン : MJPIR_PON | hai_no
チー(左端を鳴いた場合) : MJPIR_CHII1 | hai_no
チー(右端を鳴いた場合) : MJPIR_CHII2 | hai_no
チー(間を鳴いた場合) : MJPIR_CHII3 | hai_no
ミンカン : MJPIR_MINKAN | hai_no
アンカン : MJPIR_ANKAN | hai_no
ロン : MJPIR_RON | hai_no
ツモ : MJPIR_TSUMO
流し : MJPIR_NAGASHIhai_no : 牌番号 , それぞれ下位8ビットを使用
何もしない : 0無視した場合 : 何もしません。
ポン : MJPIR_PON | no_aka5_flag
チー(左端を鳴く場合) : MJPIR_CHII1 | no_aka5_flag
チー(右端を鳴く場合) : MJPIR_CHII2 | no_aka5_flag
チー(間を鳴く場合) : MJPIR_CHII3 | no_aka5_flag
カン : MJPIR_KAN
ロン : MJPIR_RONno_aka5_flag : 赤五を優先させて順子(あるいは明刻)を作る場合は0,そうでない場合は1
5.1.2 それほど重要でないメッセージ
半荘(一荘)開始時に送られます。
戻り値 : 0を返してください。
無視した場合 : 0を返したと見なされます。
半荘(一荘)終了時に送られます。
LOWORD(param1) : 順位(0〜3)
(int)param2 : 点数
戻り値 : 0を返してください。
無視した場合 : 0を返したと見なされます。
局が開始されるときに送られます。
LOWORD(param1) : 局(0 : 東一局,1 : 東二局,・・・,4 : 南一局,・・・,7 : 南四局,8 : 西一局,・・・,11 : 西四局,12 : 北一局,・・・,15: 北四局)
LOWORD(param2) : 自分の家(0 : 東,1 : 南,2 : 西,3 : 北)
戻り値 : 0を返してください。
無視した場合 : 0を返したと見なされます。
局が終了するときに送られます。
param1 : 局が終了した理由。以下のうちのどれか。
MJEK_AGARI : 誰かが和がった(LONG*)param2 : 点数の変化をあらわす LONG [4] へのポインタ。この配列の値はそれぞれ自分、下家、対面、上家の点数の変化分をあらわす。
MJEK_RYUKYOKU : 流局
MJEK_CHONBO : チョンボ
戻り値 : 0を返してください。
無視した場合 : 0を返したと見なされます。
場所決めのときに送られます。
(UINT*)param1 : nokoriへのポインタ
UINT nokori[4]戻り値 : 取る牌のインデックス(0〜3)を返してください。場所決めに使う4つの牌の現在の状態を表します。
左端の牌が nokori[0],右端の牌が nokori[3]に対応します。
値が4以上の牌が、まだ残っているものです。
無視した場合 : 適当に取ってくれます。
このメッセージはインスタンスに 0 (NULL) を指定して送られることがあります。
このプラグインが途中参加に対応しているかどうかを判断するために送られます。途中参加に対応するには、このメッセージに対して 0 を返す必要があります。途中参加可能なプラグインには、途中参加する際に MJPI_ONEXCHANGE メッセージが送られます。
戻り値 : 途中参加に対応するプラグインは 0,そうでないプラグインは0以外
無視した場合 : 途中参加に対応していないとみなされる
途中参加するときに一度だけ送られます。内部データのセット等、必要な処理をおこなってください。
MJPI_ISEXCHANGEABLEに0以外を返したプラグイン(途中参加に対応していないプラグイン)には、このメッセージは送られません。
LOWORD(param1) : 現在の状態を表す。以下のうちのどれか。
MJST_INKYOKU : 局の中戻り値 : 正常終了のときは0、それ以外のときは0以外LOWORD(param2) : 局(0 : 東一局,1 : 東二局,・・・,4 : 南一局,・・・,7 : 南四局,8 : 西一局,・・・,11 : 西四局,12 : 北一局,・・・,15: 北四局)MJST_BASHOGIME : 場所決め中
HIWORD(param2) : 自分の家(0 : 東,1 : 南,2 : 西,3 : 北)
無視した場合 : 異常終了したとみなされる
プラグインが情報取得などの目的で「まうじゃん」本体に送るメッセージを
MJMIメッセージと呼びます。これらのメッセージは、前述の MJSendMessage関数を用いて送ります。なお、MJMIメッセージとともに送られる無効なデータは原則として無視されます。
|
|
MJMI_GETTEHAI | 手牌の取得 |
MJMI_GETMACHI | 待ち牌の取得 |
MJMI_GETAGARITEN | あがり点の取得 |
MJMI_GETKAWA | 河の取得 |
MJMI_GETKAWAEX | 河の取得・拡張版 |
MJMI_GETDORA | ドラの取得 |
MJMI_GETSCORE | 点数の取得 |
MJMI_GETKYOKU | 現在の局の取得 |
MJMI_GETHONBA | 現在何本場かを取得 |
MJMI_GETREACHBOU | 現在場に出ているリーチ棒の数を取得 |
MJMI_GETHAIREMAIN | 残りの山牌数を取得 |
MJMI_GETVISIBLEHAIS | 任意の牌の場に見えている数を取得 |
MJMI_ANKANABILITY | 暗槓、加槓可能な牌の取得 |
MJMI_KKHAIABILITY | 九種九牌かどうかのチェック |
MJMI_SSPUTOABILITY | 十三不塔かどうかのチェック |
MJMI_LASTTSUMOGIRI | 最後に捨てた牌がツモ切りかどうかの取得 |
MJMI_GETRULE | ルールの取得 |
MJMI_SETSTRUCTTYPE | 構造体タイプの設定 |
MJMI_FUKIDASHI | 吹き出しを出す |
MJMI_SETAUTOFUKIDASHI | 自動吹き出しの設定 |
MJMI_GETWAREME | 現在の割れ目を取得 |
MJMI_GETVERSION | インターフェースのバージョンを取得 |
以下に MJMIメッセージの説明をします。
自分の手牌を得ます。また、対象のプレイヤーの手牌も、見えている部分(ミンツやアンカン)だけ得られます。
param1 : 対象のプレイヤー(自分が0,下家が1,対面が2,上家が3)
(MJITehai*) param2 : データを受け取るためのバッファへのポインタ。データは MJITehai構造体です。
戻り値 : 成功した場合は1,失敗した場合は0を返します。
任意の手牌の待ち牌(当たり牌)を得ます。
(MJITehai*) param1 : 手牌へのポインタ。ただし、0を指定すると現在の自分の手牌を指定したことになる。
(UINT*) param2 : 待ち牌のデータを受け取るためのバッファへのポインタ。このバッファは UINT型の配列で、その大きさ(添字)は34以上である必要があり、インデックスが牌番号に対応して、当たり牌の値は0以外に、そうでない牌の値は0になる。
戻り値 : てんぱっている場合は1,そうでない場合は0を返します。
任意の手牌を任意の牌であがったときの点数を得ます。ただし、裏ドラは考慮されません。
(MJITehai*) param1 : 手牌へのポインタ。ただし、0を指定すると現在の自分の手牌を指定したことになる。
param2 : あがり牌の牌番号
戻り値 : あがった時の点数
任意のプレイヤーの河の状態を得ます。
LOWORD(param1) : 対象のプレイヤー(自分が0,下家が1,対面が2,上家が3)
(UINT*) param2 : データを得るためのバッファへのポインタ。データは UINT型の配列で、捨てられた牌が順に牌番号の形で得られます。
HIWORD(param1) : バッファの大きさ。UINT配列の大きさ(添字)を与えます。
戻り値 : データの大きさが返されます。
任意のプレイヤーの河の状態を得ます。このメッセージはMJMI_GETKAWAの拡張版です。
LOWORD(param1) : 対象のプレイヤー(自分が0,下家が1,対面が2,上家が3)
(MJIKawahai*) param2 : データを得るためのバッファへのポインタ。データは MJIKawahai型の配列で、捨てられた牌が順に牌番号の形で得られます。MJIKawahai 構造体は以下のように定義されています。
typedef struct {
USHORT hai;
USHORT state;
} MJIKawahai;hai : 牌番号
state : その牌の状態。以下の定数の論理和になります。MJKS_REACH : リーチ宣言牌
MJKS_NAKI : 他家に副露された牌
HIWORD(param1) : バッファの大きさ。MJIKawahai配列の大きさ(添字)を与えます。
戻り値 : データの大きさが返されます。
ドラは何かを取得します。
(UINT*) param1 : データを得るためのバッファへのポインタ。データは UINT型の配列で、牌番号の形で得られます。バッファの大きさは UINT型5個分(20バイト)以上とってください。
param2 : 0 にしてください。
戻り値 : ドラの数
任意のプレイヤーの現在の点数を得ます。
param1 : 対象のプレイヤー(自分が0,下家が1,対面が2,上家が3)
param2 : 0 にしてください。
戻り値 : 点数
現在の局を得ます。
param1 : 0 にしてください。
param2 : 0 にしてください。
戻り値 : 局((0 : 東一局,1 : 東二局,・・・,4 : 南一局,・・・,7
: 南四局,8 : 西一局,・・・,11 : 西四局,12 : 北一局,・・・,15: 北四局))
現在何本場かを得ます。
param1 : 0 にしてください。
param2 : 0 にしてください。
戻り値 : 本数
現在場に出ているリーチ棒の数を得ます。
param1 : 0 にしてください。
param2 : 0 にしてください。
戻り値 : リーチ棒の数
山に残されている牌(王牌を除く)の数を得ます。
param1 : 0 にしてください。
param2 : 0 にしてください。
戻り値 : 山に残されている牌(王牌を除く)の数
任意の牌がいくつ場に見えているかを得ます。
param1 : 牌の牌番号
param2 : 0 にしてください。
戻り値 : 場に見えている数
暗槓、あるいは加槓できる牌を列挙します。
(USHORT*)param1 : 配列 USHORT[3] へのポインタを指定してください。この配列には、暗槓、あるいは加槓可能な牌の牌番号が返されます。
param2 : 0 にすると槓可能な牌すべてが列挙されます。1 を指定するとチョンボチェックが行われ、チョンボになる可能性のある槓は列挙されません。
戻り値 : 槓できる牌の数
例 : たとえば三萬と一策が槓可能な状態でこのメッセージを送ると、戻り値に
2 が返され、 ((USHORT*)param1)[0] に 2 が、 ((USHORT*)param1)[1] に 18
がセットされる。
九種九牌で流せるかどうかを調べます。
param1 : 0 にしてください。
param2 : 0 にしてください。
戻り値 : 流せない場合は0、流せる場合は非0
十三不塔であがれるかどうかを調べます。
param1 : 0 にしてください。
param2 : 0 にしてください。
戻り値 : あがれない場合は0、あがれる場合は非0
最後に捨てられた牌がツモ切りかどうかを得ます。
param1 : 0 にしてください。
param2 : 0 にしてください。
戻り値 : ツモ切りの場合は1、そうでない場合は0
現在のルールを得ます。
param1 : 得たいルールの種類を以下の中から指定します。
param2 : 0 にしてください。
param1 内容 戻り値 MJRL_KUITAN 喰い断の有無 0:無し,1:有り MJRL_KANSAKI 完全先付けの有無 0:無し,1:有り MJRL_PAO 包(パオ)の有無 0:無し,1:有り MJRL_RON 複数ロンの扱い 0:頭ハネ,1:ダブロンまで有り,2:トリプル有り MJRL_MOCHITEN 持ち点 持ち点 MJRL_BUTTOBI ぶっとびの有無 0:無し,1:有り MJRL_WAREME 割れ目の有無 0:無し,1:有り MJRL_AKA5 赤五の有無 0:無し,1:有り MJRL_AKA5S 各赤五牌の数 bit0-3:赤五萬,bit4-7:赤五筒,bit8-11:赤五索の数 MJRL_SHANYU 西入の条件 0:西入無し,1:無条件で西入,2:下の欄参照 MJRL_SHANYU_SCORE 西入条件が2の場合 トップの点数がこの値未満だと西入 MJRL_NANNYU 南入の条件 0:南入無し,1:無条件で南入,2:下の欄参照 MJRL_NANNYU_SCORE 南入条件が2の場合 トップの点数がこの値未満だと南入 MJRL_KUINAOSHI 食い直しの許可/禁止 0:禁止,1:許可 MJRL_URADORA 裏ドラ・カン裏の有無 0:無し,1:有り(カン裏は無し),2:カン裏も有り MJRL_SCORE0REACH 持ち点が900点以下でのリーチ 0:不可,1:可能 MJRL_RYANSHIBA 二翻縛りの有無 0:無し,1:有り MJRL_DORAPLUS ドラとドラ表示牌の関係 0:ドラはドラ表示牌と同じ,1:ドラはドラ表示牌の次の牌 MJRL_FURITENREACH フリテンリーチの可否 bit0:流局時,bit1:ツモ時
各ビットが 0:フリテンリーチはチョンボ,1:チョンボにならないMJRL_KARATEN カラテンの扱い 0:ノーテン扱い,1:テンパイ扱い MJRL_PINZUMO ピンヅモの有無 0:無し,1:有り MJRL_NOTENOYANAGARE ノーテン親流れの有無 bit0:東場,bit1:南場,bit2:西場,bit3:北場
各ビットが 0:無し,1:有りMJRL_KANINREACH リーチ後のカンの許可/禁止 0:禁止,1:待ち不変で可,2:構成不変で可 MJRL_TOPOYAAGARIEND オーラストップ親和がし終了 0:連荘,1:終了 MJRL_77MANGAN 30符4翻を満貫とするか 0:満貫としない,1:満貫とする MJRL_DBLRONCHONBO 正当な和了がある場合のチョンボの扱い 0:チョンボは無効,1:チョンボは有効
戻り値 : 上記の表を参照してください。ただし、指定のルールがサポートされていない場合は
MJR_NOTCARED
が返されます。
「まうじゃん」本体とプラグインの間で交わされるデータのタイプ(構造体タイプ)を変更します。構造体タイプの種別は整数の値で表され、タイプ0,タイプ1,・・・ のように表します。デフォルトの構造体タイプはタイプ0です。
param1 : 構造体タイプ番号
papam2 : 0 にしてください。
戻り値 : 成功した場合は変更前の構造体タイプ番号、失敗した場合は MJR_NOTCARED が返されます。
吹き出しを表示します。表示された吹き出しは、一定時間経つと消えます。
文字コードについて
Windows 版「まうじゃん」では、文字コードに ASCII/シフトJIS コードを使用しています。それに対して WindowsCE 版「まうじゃん+」では、文字コードに UNICODE(UTF-16) を使用しています。どちらのプラットフォームにも対応できるよう、文字を扱う際は TCHAR 型と TEXT マクロを使用することをおすすめします。これらの型やマクロについては、Win32 プラットフォームSDK のドキュメント等をご覧ください。
(TCHAR*) param1 : 吹き出しの中に表示させる文字列へのポインタ。文字列の終端はNULL文字('\0')です。文字列はあまり長くしないでください。
param2 : 0 にしてください。
戻り値 : 成功した場合は1、失敗した場合は0が返されます。
「ポン」、「ロン」、「ツモ」など、アクションを起こしたときに自動的に表示される吹き出しのスイッチです。デフォルトでは「表示する」になっています。
param1 : 吹き出しを自動的に表示するには 1、表示しないようにするには 0 にします。
param2 : 0 にしてください。
戻り値 : 変更する前の状態を返します。
現在の割れ目が誰なのかを得ます。
param1 : 0 にしてください。
param2 : 0 にしてください。
戻り値 : 割れ目(自分が0,下家が1,対面が2,上家が3)
対戦相手プラグインのインターフェースのバージョン(と言うよりリビジョン)の番号を得ます。バージョン番号は正の整数で、新しいバージョンほど大きくなります。なお、現在のバージョンは 12です。
param1 : 0 にしてください。
param2 : 0 にしてください。
戻り値 : バージョン番号
6 プログラム例
プログラミング例として、テスト用プラグイン「てぃると」のソースを公開します。ちょっと読みにくいかもしれませんが、利用してください。
7 その他
あなたが作成したプラグインの著作権は、当然ながらあなたに属します。ですからそのプラグインをどうしようと、基本的にあなたの自由です。ですが、新しいプラグインができたら、できれば私(作者)に連絡してください(強制ではありません)。
これを書いた人 : 石畑 恭平
E-mail : ishihata@amy.hi-ho.ne.jp