和了判定(基本形)のソース

掲載しているソースはオフィシャルHSP2.6ゲームプログラミング・クックブック―Windows95/98/2000/Me/XP に収録されている「一人麻雀」のソースを改良したもの。ラベル付け、書式などを修正している。




●変数の説明


atama 雀頭チェックのカウンタ
win 和了判定のフラグ(0:和了ではない 1:和了)
ctable コピーした手牌テーブル(この和了判定に用いる)
table 手牌テーブル
check 面子チェックのカウンタ
koutu 刻子の数
syuntu 順子の数




●ソース


;和了判定
*agari
atama = 0 : win = 0

*table_init
;手牌テーブルコピー(初期化)
dim ctable, 38
memcpy ctable, table, 38*4

*atama_check
;雀頭チェック
if (atama >= 38) { return }
if (ctable.atama < 2) { atama++ : goto *atama_check }
ctable.atama -= 2

;面子チェック
check = 0 : koutu = 0 : syuntu = 0
repeat -1
;刻子チェック
if (ctable.check >= 3) { ctable.check -= 3 : koutu++ }
a = check
if (ctable.a = 0) {
check++
if (check < 38) { continue }
win = 1 : break
}
if (a >= 30) { break }
;順子チェック
a++ : if (ctable.a = 0) { break }
a++ : if (ctable.a = 0) { break }
a = check
ctable.a--
a++ : ctable.a--
a++ : ctable.a--
syuntu++
loop
if (win = 1) { return }
else { atama++ : goto *table_init }




●手牌テーブル(table[], ctable[])


×  一萬 二萬 三萬 四萬 五萬 六萬 七萬 八萬 九萬
[0] [1] [2] [3] [4] [5] [6] [7] [8] [9]

×  一筒 二筒 三筒 四筒 五筒 六筒 七筒 八筒 九筒
[10] [11] [12] [13] [14] [15] [16] [17] [18] [19]

×  一索 二策 三索 四索 五索 六索 七索 八索 九索
[20] [21] [22] [23] [24] [25] [26] [27] [28] [29]

×  東  南  西  北  白  發  中
[30] [31] [32] [33] [34] [35] [36] [37]





このブログの人気の投稿

はじめに