2017-01-27(Fri)
前回の続き。
グローバル変数をなるべく使わない関数への設計変更をぼちぼちと進めています。
ただ、自分の打牌等についてはフォーム上からButtonのClickイベントで関数を呼び出す関係でグローバル変数がいりそうなのがそこそこの数あったので、そこはまぁ割り切ります。
グローバル変数にするのは4人の手牌情報、晒し手牌、捨て牌、リーチ状態等など、すでに確定している情報だけです。
メイン関数(自分の行動、他家の行動)以外からはグローバル変数の変更はさせないようにします。
個別の役判定とか点数計算とかの関数については複製(Clone)した配列とかを引数として渡して、それらの引数以外の情報は使わないように設計します。(関数の引数の種類数がかなり多いところもあるが、それはやむなし。)
今日はシャンテン数判定と手役・得点計算系の関数を全部作り替えました。
(手役判定だけで30種類以上の数あったのでとても大変。)
テストについては、
一人麻雀計算機制作計画その3・メンツの切り分けと役満手役判定
一人麻雀計算機制作計画その4・一般手役判定と得点計算とその他
でやったのと同じ手牌を入力し、全部の役について正しく判定されてるのを確認しました。
その後、麻雀ゲームにおいて、自分の立直処理とツモ和了処理をゲームとして組み込みました。
こんな感じの流れ。

まずまずの配牌。
聴牌目指してツモと打牌を繰り返します。(他家はあいかわらずツモ切りマシーン。)

面前聴牌(まぁ鳴きがないから必然的に面前でしか聴牌しないのですが)。立直ボタンを押す。
打牌候補がシャンテン数0になる4pと7pからしか選択できないようになる。

一発はならず。リーチ状態なので、ツモ切りするしかないです。(暗槓もまだできていない。)

高めの6sツモ。(他家からのロンはまだできてない。)
手役とハン数、裏ドラの情報を載せて、最終的に計算された上がりハン数と符数と点数が表示されると。
今日はもうちょっとゲームの流れに穴がないかをテストでチェックして、
次回は他家からのロンと有効牌計算と他家の簡単なAI(シャンテン数の下がる有効牌の枚数が最も多い打牌をする。聴牌したら立直してツモ和了・ロン和了をする。)を入れるところまでいきたいですね。
グローバル変数をなるべく使わない関数への設計変更をぼちぼちと進めています。
ただ、自分の打牌等についてはフォーム上からButtonのClickイベントで関数を呼び出す関係でグローバル変数がいりそうなのがそこそこの数あったので、そこはまぁ割り切ります。
グローバル変数にするのは4人の手牌情報、晒し手牌、捨て牌、リーチ状態等など、すでに確定している情報だけです。
メイン関数(自分の行動、他家の行動)以外からはグローバル変数の変更はさせないようにします。
個別の役判定とか点数計算とかの関数については複製(Clone)した配列とかを引数として渡して、それらの引数以外の情報は使わないように設計します。(関数の引数の種類数がかなり多いところもあるが、それはやむなし。)
今日はシャンテン数判定と手役・得点計算系の関数を全部作り替えました。
(手役判定だけで30種類以上の数あったのでとても大変。)
テストについては、
一人麻雀計算機制作計画その3・メンツの切り分けと役満手役判定
一人麻雀計算機制作計画その4・一般手役判定と得点計算とその他
でやったのと同じ手牌を入力し、全部の役について正しく判定されてるのを確認しました。
その後、麻雀ゲームにおいて、自分の立直処理とツモ和了処理をゲームとして組み込みました。
こんな感じの流れ。

まずまずの配牌。
聴牌目指してツモと打牌を繰り返します。(他家はあいかわらずツモ切りマシーン。)

面前聴牌(まぁ鳴きがないから必然的に面前でしか聴牌しないのですが)。立直ボタンを押す。
打牌候補がシャンテン数0になる4pと7pからしか選択できないようになる。

一発はならず。リーチ状態なので、ツモ切りするしかないです。(暗槓もまだできていない。)

高めの6sツモ。(他家からのロンはまだできてない。)
手役とハン数、裏ドラの情報を載せて、最終的に計算された上がりハン数と符数と点数が表示されると。
今日はもうちょっとゲームの流れに穴がないかをテストでチェックして、
次回は他家からのロンと有効牌計算と他家の簡単なAI(シャンテン数の下がる有効牌の枚数が最も多い打牌をする。聴牌したら立直してツモ和了・ロン和了をする。)を入れるところまでいきたいですね。
スポンサーサイト