【Ruby】和了判定プログラムを作成する。(2)-雀頭判定【麻雀】

前回記事は、こちらです。↓

雀頭候補を洗い出して、抜き取る。

麻雀の和了りには必ず雀頭がひとつ必要になりますし、ひとつしか必要のないものです。

これを省くことで、残り12枚が面子になっていることを確認すればよいので、まずは雀頭を抜き出します。

雀頭は同じ牌の2枚組

#牌の種類を配列で定義
hai_type=[
   1, 2, 3, 4, 5, 6, 7, 8, 9,	#萬子
  11,12,13,14,15,16,17,18,19,	#筒子
  21,22,23,24,25,26,27,28,29,	#索子
  31,33,35,37,					#風牌
  41,43,45,						#三元牌
]

#手牌(例)
tehai=[1,1,2,2,3,3,3,4,5,11,12,13,19,19]

tehai_check = Array.new(46,0)    #要素数46(牌の種類数)かつ初期値0の配列
tehai.map {|v|tehai_check[v]+=1}

上の変数”tehai_checkは、次のようになります。

tehai_check=[0, 2, 2, 3, 1, 1, 0, 0, 0, 0, #萬子
             0, 1, 1, 1, 0, 0, 0, 0, 0, 2, #筒子
             0, 0, 0, 0, 0, 0, 0, 0, 0, 0, #索子
             0, 0, 0, 0, 0, 0, 0, 0, 0, 0, #風牌
             0, 0, 0, 0, 0, 0]             #三元牌

雀頭は同じ牌の2枚組になりますので、上の変数”tehai_check ”から、2以上の値の要素を抜き出してリスト化します。

	#雀頭候補抜き取り
	jt=[]  #雀頭候補格納配列
	tehai_check.each_with_index do |v,i|
		if v>=2 then
			jt << i
		end
	end
	#jt=[1, 2, 3, 19]

4種類の牌が雀頭候補としてリスト化されましたので、それぞれが雀頭だった時の面子の判定をすると、和了判定ができる事になります。

#雀頭候補毎にcheck
jt.each_with_index do |v,i|
	tmp=tehai_check.dup #tehai_checkを複製
	amtmp=[]  #和了りの手牌を格納する配列
	
	#雀頭を抜く
	amtmp << [v,v]
	tmp[v]-=2
	
	#刻子判定
	
	#順子判定
	
	#和了判定
	
end	

以降、刻子判定 → 順子判定 → 和了判定 とすることで、和了判定までたどり着けます。

次回は刻子判定を行います。

次回記事は、こちらです。↓

コメント

タイトルとURLをコピーしました