MJexeIO.DLL(東風荘画面入出力用ダイナミックリンクライブラリ)v0.92 とつげき東北 TOP

ソフトウェアの形態:制限付フリーウェア
ソフトウェアの機能:東風荘(MJ.exe)画面入出力用ダイナミックリンクライブラリ
動作環境:WINDOWS95以降


MJexeIO.DLLダウンロード
下の「使用条件」、「ソフトウェア開発時の使用条件」をお読みになり、その内容に同意いただけた方だけがダウンロードできます。


MJexeIO.dllを利用したソフト

ツモツモ君♪(東風荘・リーチ時自動和了・ツモ切りツール) 紅孔雀さん・とつげき東北(共同開発)
電脳猫型ドラえもんβ(自動打ちツール) ドラえもんβ
ポテポテ君(多目的ツール) Snoopy (ポテポテ君では、ごく一部の機能にのみMJexeIO.DLLを利用しています)
東風補助ソフトkamo_tool ◆鴨園◆ドラ
観戦補助ツール 観戦◆第二軍


MJexeIO.dllを使った開発

具体的にプログラムを動かすには?(入門用) 「サンプルコード3」の一括/wを用いて、コピペだけで簡単に東風用アプリを作って動かしてみる

「C++のコンパイラを持っているけど、MJexeIO.dllってどうやって使うの? 難しい!」という人に。
コピペするだけでとりあえず、「ミニ東風ツール(?)」ができるようにするためのコーナーです。ぜひ一度ためしてみましょう。
再配布の制限が緩和されました。いくつかの条件下で、ソフトウェア開発者はMJexeIO.dllを当該のソフトと同時に配布することができます。

上に紹介したドラえもんβのページでは、具体的にMJexeIO.dllを使う方法や、VBからの利用法などについて活発な意見交換が行われています。


★ソフトウェアの機能とバージョン情報★

このソフトは、単体では動作しません。このソフトを利用する他のソフトを実行するために必要です。
また、このソフトの関数を呼び出すことで、プログラマは、比較的簡単に東風荘画面入出力を行うためのソフトを開発できます。
テンパイの待ち判定関数等、便利な関数も用意しました。

現在テスト版につき動作保証は一切ありません。
一通りの動作チェックを行ってからバージョン1.00としてリリースします。
全ての関数の動作や引数が大幅に変更になる可能性があります。
v0.19以降に導入された一部の関数は、東風のプログラマ友達である紅孔雀さんに開発・投稿していただきました(関数名の後にその旨が書いてあります)。
現在、呼び出し規約は「C」です。C以外の言語からの呼び出し方等についてはお答えできません。

このDLLを利用して、東風荘の画面上の情報を読み取ったり、東風荘にマウスクリックなどの情報を送ることができます。
東風荘のウインドウハンドルなどの管理は完全に隠蔽されており、非常に簡単に東風荘にアクセスすることが可能になっています。
「C++のコードが書けてコンパイラさえ持っていれば、誰でも東風自動打ちツールが簡単に作れる!」DLLです。
今後、そのためにマニュアルが初心者向けに整理されます。

v0.01 とりあえず公開。機能はごく基本的な牌の読み込み。これが本DLLの骨格。
v0.02 選んだ牌を切れる出力関数PushHaiを実装。
v0.03 右クリック関数RClick、ファンクションキー入力関数PushFunctionKeyを実装。
v0.04 v0.03でPushFunctionKey関数をエクスポートしていなかったので(笑)修正。マニュアルのバグフィクス。
v0.05 東風荘関係のウインドウハンドルの操作を全て隠蔽した。
v0.06 GetTonpuDataの挙動を変更。
v0.07 全ての関数の基本動作チェックとバグフィクスを行った。現段階では返り値がまだ厳密にチェックされていない。
v0.08 全ての関数の返り値をチェックし一部修正した。
v0.09 内部関数を整備。
v0.10 GetCursorDCPosを実装。
v0.15 GetTonpuDataの不具合修正、GetTonpuInfoを導入。
v0.16 PushHaiの不具合修正。
v0.17 GetTonpuDataの、対戦時の返り値を修正。
v0.18 Check_tenpai関数および、Check_agari関数を導入(国士未対応)。
v0.19 GetAvailableFunctionKey、ExistAvailableFunctionKey関数を導入。
v0.20 GetAvailableFunctionKeyの返り値を初期化していなかったので修正。
v0.25 赤牌に対応し、SetMode関数およびTehaiNormalize関数を導入。
v0.26 GetRightestTehai関数を導入。
v0.27 GetSutehaiにおいて、赤ワクに囲まれた状態の牌を読み出せるようにした。
v0.30 Check_tenpai関数が国士にも対応。
v0.32 内部関数であったGetHaiを、ext_GetHai関数としてエクスポート。
v0.33 赤ワクに囲まれた状態の牌を誤認する場合を修正。
v0.38 GetPlayerPoint関数を導入。
v0.39 GetPlayerPoint関数を廃止してGetPlayerInfo関数に差し替え。
v0.40 GetHoldTime関数を導入。
v0.41 GetSutehai関数の返り値で、読み込み失敗の場合でもsutehai[]配列の内容を保障した。
v0.42 GetSutehaiNum関数を導入。
v0.43 GetReach関数を導入。
v0.44 GetSutehaiの返り値を変更。
v0.45 チャット送信をする関数SendChatを導入。
v0.46 SendChatの仕様を一部変更。
v0.50 GetReachの不安定動作を修正。
v0.51 GetSutehaiEx関数を導入。
v0.60 SimulateOrder関数、GetOrder関数を導入。
v0.61 GetNextOrder関数を導入。※現在、カンが入っているとき、リーチ直後が不安定
v0.62 GetNextOrder関数の不具合を一応修正。※引き続き調査中
v0.63 GetExtendInformation関数、GetExtendInformationSize関数を導入し、DLLに拡張(読み込み可能)作業領域を持たせた。
v0.64 GetAvailableFunctionKeyの仕様変更。ボタンの反転状態も取得できるようになった。
v0.70 東風接続系の関数を4つ導入。
v0.71 落ち防止用に瞬間観戦する関数SuperQuickWatchingを導入。
v0.72 東風接続系関数、落ち防止関数の調整。
v0.73 GetAvailableFunctionKeyのflagsが初期化されていなかったのを修正(v0.64〜v0.72)。
v0.74 SimulateOrder関数を高速化。
v0.75 待合画面でボタンを押す一連の関数を導入した。
v0.76 GetSutehaiEx2関数を導入。
v0.77 SelectTaku関数を導入。
v0.78 裏向き牌の牌番号を255から41に変更した。
v0.79 チャット欄の文字列を読み取るための関数を導入。
v0.80 卓画面のウインドウタイトルバー情報を手軽に取得する関数GetPlayInfo関数を導入。
v0.81 SendChatで、64文字を超える場合に送信されなかったのを、自動で切り詰めて送信されるように変更。
v0.82 GetPlayerInfoがエクスポートされていなかったので修正。
v0.83 GetAvailableFunctionKeyにおいて、F4に対応するボタン読み取りに冗長性を持たせて誤認を減らした。
v0.84 画面からの数字取得系・ボタン取得系関数に冗長性を持たせて、誤認率を大幅に減少。
v0.85 同上の関数において、広告サイズなどを一定と仮定し、ウインドウの重なりによる取得失敗可能性を減少させた。
v0.86 v0.83以降のGetAvailableFunctionKey関数が、F9を読み取れないバグを修正。
v0.89 各種調整・瞬間観戦関数の最適化。
v0.90 GetHoldTimeがエクスポートされていなかったので修正。
v0.92 GetAvailableFunctionLeyのF5の戻り値がおかしかったので修正。


★使用条件★

本DLLまたは本DLLを利用するソフトウェアの挙動によるいかなる損害についても、とつげき東北にその責任の一部または全部を負わせないこと(必ず利用者の自己責任の下に利用すること)。

このDLL(MJexeIO.dll)は、次の目的で作られています。
・麻雀研究ソフトを含む麻雀関係のソフト、麻雀関係のソフトの補助的動作をするソフトのうち、善良で健全なソフトをコーディングするプログラマが、その開発効率を向上させること
・そのような善良で健全なソフトを、エンドユーザが利用できるようにすること
利用形態にかかわらず、以上の目的に沿わない場合本DLLの利用を許可しません。

本DLLを利用して悪意あるコードを書くことは可能ですが、とつげき東北はそのようなコード開発・使用のための本DLLの利用を一切認めません。
また仮にそのようなコードが用いられて何らかの損害が生じたとしても、とつげき東北は責任を負いません(ウイルスの被害を、そのウイルスの開発に用いたコンパイラの開発者が負わないことと同様です。悪意あるそうしたコードはこのDLLを利用しなくても書くことができます)。
本DLLはあくまでも「善良なソフトウェア開発の支援」「開発されたソフトウェア使用の補助」を目的としており、開発されたソフトウェアの挙動に責任を持つものではありません。
万一、このDLLを使用するソフトウェアが他人に何らかの損害を与えた場合、このDLLの持つバグ等が原因であっても、その責任の一部または全部を本DLLの作者であるとつげき東北が負うことはありません。
当該ソフトウェアの開発者または当該ソフトウェアの使用者が、全ての法的責任を負います。

以上のことを了承されない方の、本DLL利用、本DLLを利用するソフトウェアの利用を禁止します。


★ソフトウェア開発時の使用条件★

DLLの内容に改変を加えないこと、著作者名(とつげき東北)を変更しないこと。

個人的なソフトウェア開発は(東風荘の利用規約や各種法律を犯さない限り)自由です。
本DLLを利用して、東風荘の利用規約を犯すようなソフトウェア開発を行うことは許可しません。
例えば「遅延行為を行うソフト」の開発に本DLLを使用してはいけません。
バグなどの理由で不慮の迷惑行為に及ばないよう、細心の注意を払ってソフトウェアを開発してください。

一般公開するソフトウェアにおいてこのDLLを使用する場合、以下の条件があります。
MJexeIO.dllの著作者がとつげき東北であることが各ユーザに伝わり、各ユーザが本サイトおよびMJexeIO.dllの使用条件を見ることが可能であるような場合に限り、再配布を許可します。
具体的には、当該ソフトのマニュアルにMJexeIO.dllについての説明や、とつげき東北サイトへのリンクを記入する程度でかまいません(ソフトウェアの出力として「MJexeIO.dllについて」等を表示する必要はありません)。
全ての関数は予告なく仕様変更される可能性があります。
東風荘の楽しさ、バランスを損なわせる程度の機能を持った公開ソフトウェアには使用しないこと。
具体的には例えば、このDLLによって読み出した牌情報から、相手の安全牌を計算してくれるような、麻雀ゲームの重要な技術にかかわる機能を持つソフトウェアに利用することはできません。イーシャンテンチェックやフリテン警告程度の、簡単なアドバイスならかまわないでしょう。安定Rにして1700以上程度の強さを持つ「自動打ちツール」などは東風荘のバランスを損なわせる恐れがあるため、そうしたソフトウェアを不特定多数に広く公開する目的で本DLLを利用することはできません(以上は、個人的な研究程度の範疇なら問題ありません)。
本DLLを用いたソフトウェアの一方的な公開停止要求の権利を、とつげき東北が所有します。とつげき東北が要求した場合、その理由を問わずに、ソフトウェアの公開を停止しなければいけません。
また、当該ソフトウェアの公開・使用に対して東風荘開発・運営者である東氏が禁止または停止要求した場合は、必ずそれに従ってください。
無断で商用に利用することはできません(相談には応じますが、基本的に東風荘の楽しさやバランスを著しく乱すようなソフトには利用できません。また、別途東氏からの許可が必要です)。
以上の規約は、予告なく変更する可能性がありますが、その場合は、新しい規約に即座に従ってください。


使用条件に関する質問・要望は掲示板または
メールでお願いします。悪意のあるソフト開発目的などでない限り、柔軟に対処いたします。


★開発環境★

Borland C++ Builder Pro 5.0


★開発者向けマニュアル★

概要・アルファベット順関数マニュアル

開発者マニュアル(使用法・定義・アルファベット順関数マニュアル・サンプルコード等)(初めにお読みください)

サンプルコード1・場に見えている牌を数え上げするプログラム例
サンプルコード2・観戦中/対戦中に、手前のプレイヤー(自分)の、テンパイチェックを行うプログラム例
サンプルコード3(初心者向け・オススメ)・指定されたHNを一括/wし、東風のチャットウインドウに結果を表示させるプログラム例
サンプルコード4・手前のプレイヤー(自分)のリーチ後に、他家が初めて切った牌の位置を表示するプログラム例
具体的にプログラムを動かすには?(入門用)・「サンプルコード3」の一括/wを用いて、コピペだけで簡単に東風用アプリを作って動かしてみる

入出力の実際1・静止画像から可能な限り打牌の順序を決定する方法、東風荘の不具合による影響など


・目的別関数マニュアル


DLL設定関連

DLLの情報を得たい・DLL全体の動作を変えたい
GetDLLVersion DLLのバージョンを返す関数。
SetMode 赤牌にどう対応させるかを指定する関数。
GetExtendInformation DLLの拡張(読み込み可能)作業領域のデータを取得する関数。
GetExtendInformationSize DLLの拡張(読み込み可能)作業領域のサイズを返す関数。


一般

東風荘の全体的な情報を取得したい
GetTonpuData 東風荘ウインドウのタイトルバーの文字列を取得するとともに、現在起動されているかどうか、待合にいるかどうかが判定できる。
GetTonpuInfo 東風荘のウインドウハンドルを取得するとともに、現在第○東風荘にいる、ということを判定できる。


「接続画面」関連

接続画面から情報を取得する、接続画面に情報を送る
GetTonpuConnectionStatus 東風荘への接続状態を調べる関数。
SetTonpuConnectionInfo 東風荘の接続ウィンドウに接続情報をセットする関数。
PushTonpuConnectionButton 東風荘の接続ボタンを押す関数。
CanselTonpuConnection 接続をキャンセルする関数。


「待合室画面」関連

待合室画面から情報を取得する
GetChatLine チャット欄の指定行の文字列を取得する関数。
GetChatLineNum チャット欄に表示されているチャットの合計行数を得る関数。

待合室画面に情報を送る
PushYoyakuButton 予約ボタンを押す。
PushTorikesiButton 予約取り消しボタンを押す。
PushJouhouButton 卓情報ボタンを押す。
PushKansenButton 観戦ボタンを押す。
PushSyuuryouButton 終了ボタンを押す。
SendChat 東風荘に対して、チャット欄に文字を書いて送信する動作を行う。/w などを自動でさせたい場合にも用いられる。
SuperQuickWatching 落ち防止のために瞬間観戦を行う関数。
SelectTaku 卓を選択する関数(例えば上ランに予約したい、超ランの3番目の卓を観戦させたい、などの場合に利用する)。


「卓画面」関連

卓画面から、牌に関する情報を取得する
ext_GetHai 指定した場所に牌画像があると仮定して、その牌画像が何であるかを返す関数。
GetDoraHai 対戦画面でドラ表示牌を取得する関数。
GetFuroHai 各プレイヤーがフーロしているかどうか、またそのフーロはどのようであるかを取得する関数。
GetHaiSize 東風荘の画面の牌サイズが大・中・小のどれであるかを取得する関数。
GetRightestTehai 最後にGetTehaiで読み込んだプレイヤーの手牌のうち、一番右の牌(ツモった直後ならツモ牌)を返す。
GetSutehai 捨て牌の情報を得る。リーチしている場合、捨て牌においてリーチした牌がどこであるかなども取得できる。
GetSutehaiEx 捨て牌の情報を得る。リーチしている場合、捨て牌においてリーチした牌がどこであるかなども取得できる。網がかかった牌がある場合、その情報も取得する。
GetSutehaiEx2 捨て牌の情報を得る。GetSutehaiExの情報に加えて、ツモ切り線のかかった牌の位置、赤ワクで囲まれた牌の位置の情報も取得できる。
GetSutehaiNum 捨て牌の数と、リーチ順目だけをGetSutehai、GetSutehaiEx、GetSutehaiEx2よりも高速に取得する。
GetTehai 「手前のプレイヤー(対戦時は自分)」の手牌の情報を得る。フーロ牌は含まないので食い仕掛けの場合GetFuroHaiの情報も必要になる。

卓画面から、その他の情報を取得する
GetPlayInfo 卓番号や局番号、観戦者数などの、卓画面のウインドウタイトルから得られる情報を整数値として手軽に取得する関数。
ExistAvailableFunctionKey 東風の画面で、ボタンが出ているかを取得する関数。
GetAvailableFunctionKey 現在押せるボタンが出ているかどうか、その表記は何であるかを取得する関数。
GetCursorDCPos マウスカーソルが、東風の画面のどこにあるかを取得する関数。
GetHoldTime 牌を切るまでの制限時間があと何秒であるかを取得する関数。
GetKaze 手前のプレイヤーが東・南・西・北のうちどの風であるかを取得する関数。
GetPlayerInfo プレイヤーの持ち点とRの値を画面から読み取る。
GetReach 指定プレイヤーがリーチしているか否かを、他のどの関数よりも高速に読み取る。リーチ棒の画像があるかないかで判定する。
GetTurnPlayer 現在HN表示欄が赤色になっているプレイヤーはどこかを取得する。

卓画面に情報を送る
PushFunctionKey 東風荘に対して、ファンクションキーを押す動作を行う。GetAvailableFunctionKeyと組み合わせて、チーやロンの動作をさせられる。
PushHai 東風荘の自分の手に対して、どれかの牌を選んでクリックさせる動作を行う。打牌や、チー・ポンの選択などの際に使う。
RClick 東風荘に対して、右クリックをする動作を行う。チーポンのキャンセルなどの際に使う。
SendChat 東風荘に対して、チャット欄に文字を書いて送信する動作を行う。/w などを自動でさせたい場合にも用いられる。


計算・シミュレート関連

牌の情報を利用したい
Check_tenpai テンパイチェックを行う関数。
Check_agari 「通常手」に対して、ある牌が上がり牌であるかどうかを返す関数。
TehaiNormalize 赤牌ありで取得した牌情報を、赤牌のない通常の牌情報に変換し、Check_tenpai関数などで利用できるようにするための関数。
SimulateOrder ある牌とある牌の順序(どちらが先に切られたか、あるいは不定か)をシミュレートする関数。静止画像のフリテンチェックなどに使える。
GetOrder SimulateOrderでシミュレートした結果を取得する関数。
GetNextOrder SimulateOrderでシミュレートしたあとに、ある牌の直後に切られた牌の位置を手軽に取得する関数。