討論區快速選單
知識庫快速選單
討論區最近新進100則主題 程式設計俱樂部Facebook粉絲團 軟體開發過程中有哪些資安漏洞?
[ 回上頁 ] [ 討論區發言規則 ]
麻將遊戲的問題
更改我的閱讀文章字型大小
作者 : kagaya(kagaya) VC++優秀好手C++優秀好手貼文超過1000則人氣指數超過30000點
[ 貼文 1602 | 人氣 38709 | 評價 4610 | 評價/貼文 2.88 | 送出評價 115 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/5/20 下午 12:12:54
關於牌型的判斷.我使用如下的方法
就是把第二張和第一張相減.第三張和第二張相減
如果都是1就是順.都是0就是刻.二是0三是1就是雀
然後跟據結果移到下一個位置.直到移到最後一張為止
統計3張一組(順和刻)和兩張一組(雀)的數量來判斷是否胡牌
不過某些情況就判不出來了.例如(12344556699)它會判出4個雀
我是參考博碩出的書裡面的麻將邏輯寫的.它用的是兩張一組的比對方法.還是我誤會它的意思?
不知道哪裡有較好的判斷範例呢?
謝謝

while (i<arr2.length) {
c1 = Number(arr2[i]);
c2 = Number(arr2[i+1]);
c3 = Number(arr2[i+2]);
k = c2-c1;
q = c3-c2;
if (k == 1) {
if (q == 1) {
o3++;
i += 3;
} else {
i++;
}
} else if (k == 0) {
if (q == 0) {
o3++;
i += 3;
} else {
o2++;
i += 2;
}
} else {
i++;
}
作者 : ma_hty(白老鼠(Gary))討論區板主 OpenGL卓越專家DirectX優秀好手C++頂尖高手貼文超過2000則人氣指數超過70000點
[ 貼文 2189 | 人氣 89850 | 評價 10120 | 評價/貼文 4.62 | 送出評價 79 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人kagaya註記此篇回應為很有道理 2005/5/20 下午 08:39:12
現在的電腦跑得這麼快, 犯不著這麼省資源, 三隻一組的把所有的胡牌可能性也找一次吧
作者 : hkln(HKLN.net) Perl卓越專家Oracle卓越專家資訊類作業求救優秀好手一般優秀好手程式設計甘苦談優秀好手C#卓越專家貼文超過2000則人氣指數超過100000點
[ 貼文 2135 | 人氣 122272 | 評價 14600 | 評價/貼文 6.84 | 送出評價 7 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人kagaya註記此篇回應為很有道理 2005/5/21 上午 12:54:57
>統計3張一組(順和刻)和兩張一組(雀)的數量來判斷是否胡牌
>不過某些情況就判不出來了.例如(12344556699)它會判出4個雀

是不是這樣子?(不太熟麻雀規則)

<script language="JavaScript">

var deck = new Array(1,2,3,4,4,5,5,6,6,9,9);
var freq = new Array(9);
var count1 = 0, count2 = 0, count3 = 0;
var i;

for (i = 0; i < freq.length; i++) freq[i] = 0;
for (i = 0; i < deck.length; i++) freq[ deck[i]-1 ]++;

alert(freq);

////
for (i = 0; i < freq.length; i++) {
if (freq[i] >= 3) {
count1++;
freq[i] -= 3;
}
}
alert('刻=' + count1);

////
i = 0;
while (i < freq.length - 2) {
if (freq[i] != 0 && freq[i+1] != 0 && freq[i+2] != 0 ) {
count2++;
freq[i]--; freq[i+1]--; freq[i+2]--;
} else {
i++;
}
}
alert('順=' + count2);

////
for (i = 0; i < freq.length; i++) {
if (freq[i] >= 2) {
count3++;
freq[i] -= 2;
}
}
alert('雀=' + count3);

</script>
作者 : kagaya(kagaya) VC++優秀好手C++優秀好手貼文超過1000則人氣指數超過30000點
[ 貼文 1602 | 人氣 38709 | 評價 4610 | 評價/貼文 2.88 | 送出評價 115 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/5/21 上午 07:39:25
感謝hkln大大的範例
不過如果是4,5,6,6,6或4,5,5,5,6的狀況就會判斷錯誤哦
ma_hty大大
我目前的做法就是判斷第二張和第三張.應該就是三隻一組吧?
還是我不了解你的意思呢?
謝謝
作者 : kagaya(kagaya) VC++優秀好手C++優秀好手貼文超過1000則人氣指數超過30000點
[ 貼文 1602 | 人氣 38709 | 評價 4610 | 評價/貼文 2.88 | 送出評價 115 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/5/21 上午 07:46:26
hkln大大.我把你的順和刻迴圈對調.好像就正確了
我再多找些牌型測試
作者 : kagaya(kagaya) VC++優秀好手C++優秀好手貼文超過1000則人氣指數超過30000點
[ 貼文 1602 | 人氣 38709 | 評價 4610 | 評價/貼文 2.88 | 送出評價 115 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/5/21 上午 08:02:13
1,1,1,2,3,4,5,6,7,8,8
這個牌型還是錯誤.因為它把要做刻的1先拿去做順了=.=
作者 : hkln(HKLN.net) Perl卓越專家Oracle卓越專家資訊類作業求救優秀好手一般優秀好手程式設計甘苦談優秀好手C#卓越專家貼文超過2000則人氣指數超過100000點
[ 貼文 2135 | 人氣 122272 | 評價 14600 | 評價/貼文 6.84 | 送出評價 7 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人kagaya註記此篇回應為最佳解答 2005/5/21 下午 10:52:56
>1,1,1,2,3,4,5,6,7,8,8
>這個牌型還是錯誤.因為它把要做刻的1先拿去做順了=.=

Patch 的藝術:

<script language="JavaScript">

var deck = new Array(1,2,3,4,4,5,5,6,6,9,9); // true
var deck = new Array(1,1,1,2,3,4,5,6,7,8,8); // true
//var deck = new Array(4,5,6,6,6); // true
//var deck = new Array(4,5,5,5,6); // true

var freq = new Array(9);
var flag_win = false;

var i;

for (i = 0; i < freq.length; i++) freq[i] = 0;
for (i = 0; i < deck.length; i++) freq[ deck[i]-1 ]++;

////
for (i = 0; i < freq.length; i++) {
var freq_curr = new Array();

freq_curr = array_clone(freq);

if (freq_curr[i] >= 2) {
freq_curr[i] -= 2;

//alert('freq_curr='+freq_curr);

var freq1 = new Array();
freq1 = remove_straight( remove_flush(freq_curr));

if (! is_freq_clear(freq1)) freq1 = remove_flush( remove_straight(freq_curr));

if (is_freq_clear(freq1)) {
flag_win = true;
break;
}
}
}


alert('牌型=' + deck + '\n胡牌=' + flag_win);


function remove_straight(freq) {
var result = new Array();
result = array_clone(freq);
for (var i = 0; i < result.length - 2; ) {
if (result[i] != 0 && result[i+1] != 0 && result[i+2] != 0 ) {
result[i]--; result[i+1]--; result[i+2]--;
} else {
i++;
}
}
return result;
}

function remove_flush(freq) {
var result = new Array();
result = array_clone(freq);
for (var i = 0; i < result.length; i++) {
if (result[i] >= 3) result[i] -= 3;
}
return result;
}


function array_clone(ary1) {
var ary2 = new Array();
for (var i=0;i<ary1.length;i++) ary2[i] = ary1[i];
return ary2;
}

function is_freq_clear(freq) {
for (var i=0;i<freq.length;i++) if (freq[i] != 0) return false;
return true;
}

</script>
作者 : arex_huang(小小孩) 貼文超過200則
[ 貼文 339 | 人氣 5660 | 評價 1210 | 評價/貼文 3.57 | 送出評價 10 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人kagaya註記此篇回應為很有道理 2005/5/21 下午 11:35:40
把第十四張牌擺進來

然後拿掉所有的刻
拿掉所有的順
最後應該要剩下一個對

基本上是這樣

作者 : kagaya(kagaya) VC++優秀好手C++優秀好手貼文超過1000則人氣指數超過30000點
[ 貼文 1602 | 人氣 38709 | 評價 4610 | 評價/貼文 2.88 | 送出評價 115 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/5/22 上午 11:02:02
感謝hkln大大的回答.這樣應該就可以判斷全部的胡牌形式了
arex_huang大大.你說的是聽牌哦.而且方法上面有試過了
謝謝
作者 : hkln(HKLN.net) Perl卓越專家Oracle卓越專家資訊類作業求救優秀好手一般優秀好手程式設計甘苦談優秀好手C#卓越專家貼文超過2000則人氣指數超過100000點
[ 貼文 2135 | 人氣 122272 | 評價 14600 | 評價/貼文 6.84 | 送出評價 7 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人kagaya註記此篇回應為很有道理 2005/5/22 上午 11:15:07
>感謝hkln大大的回答.這樣應該就可以判斷全部的胡牌形式了

抱歉,還要修改一下,
應該根據那隻牌的情況來決定做順還是做刻,而不是先刻後順或先順後刻。
規則是:由左至右掃瞄,如果那隻牌的數目等於3,那就要做刻,不要做順。

例如 1,1,1,2,3,4,9,9
1 號牌有3隻,那就要做刻。

題外話,您想寫是那一種麻雀?
作者 : arex_huang(小小孩) 貼文超過200則
[ 貼文 339 | 人氣 5660 | 評價 1210 | 評價/貼文 3.57 | 送出評價 10 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人kagaya註記此篇回應為很有道理 2005/5/22 下午 03:00:22

>題外話,您想寫是那一種麻雀

十三張跟十六張不太一樣ㄟ
我是不小心剛好兩種都寫過

我的做法應"牌型去判斷"同時加上判斷完以後是否可以"胡牌"
有不少的玩法都是只有是可以叫的出來的都算.
作者 : hkln(HKLN.net) Perl卓越專家Oracle卓越專家資訊類作業求救優秀好手一般優秀好手程式設計甘苦談優秀好手C#卓越專家貼文超過2000則人氣指數超過100000點
[ 貼文 2135 | 人氣 122272 | 評價 14600 | 評價/貼文 6.84 | 送出評價 7 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/5/22 下午 04:30:35
>>題外話,您想寫是那一種麻雀
>
>十三張跟十六張不太一樣ㄟ
>我是不小心剛好兩種都寫過

所以我才想知道 kagaya 大大正在寫哪一種麻將,可以單靠雀刻順來判斷胡牌。

>我的做法應'牌型去判斷'同時加上判斷完以後是否可以'胡牌'
>有不少的玩法都是只有是可以叫的出來的都算.

是,應該用這種方法。
作者 : kagaya(kagaya) VC++優秀好手C++優秀好手貼文超過1000則人氣指數超過30000點
[ 貼文 1602 | 人氣 38709 | 評價 4610 | 評價/貼文 2.88 | 送出評價 115 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/5/22 下午 07:20:07
我是寫16張麻將.香港和日本好像比較流行13張
我知道13張麻將有七對子.國士無雙等特殊牌型
不過16張似乎沒有.好像只要完成3張的5組2張的1組就能胡牌了?
其實麻將我雖然會打.但不精通.只有過年的時候會玩個一把而已=.=
作者 : kagaya(kagaya) VC++優秀好手C++優秀好手貼文超過1000則人氣指數超過30000點
[ 貼文 1602 | 人氣 38709 | 評價 4610 | 評價/貼文 2.88 | 送出評價 115 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/5/22 下午 07:25:43
還有13張要有台才能胡牌.而16張似忽不用
所以16張好像比較容易胡牌的樣子~_~
在這裡跟各位大大學到不少.謝謝
作者 : perfectlifepan(愛嬌仔) 人氣指數超過10000點
[ 貼文 39 | 人氣 12740 | 評價 30 | 評價/貼文 0.77 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/6/27 上午 04:30:34
用樹結構來分析多少對
    否則清一色的牌子會很難計算
作者 : kagaya(kagaya) VC++優秀好手C++優秀好手貼文超過1000則人氣指數超過30000點
[ 貼文 1602 | 人氣 38709 | 評價 4610 | 評價/貼文 2.88 | 送出評價 115 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/6/27 上午 09:12:48
麻將如何用樹結構我不懂耶
能請教嗎.謝謝=.=
作者 : totomi(兔兔米)
[ 貼文 16 | 人氣 3020 | 評價 60 | 評價/貼文 3.75 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人kagaya註記此篇回應為很有道理 2005/8/2 上午 11:13:37

我是用遞延迴圈解,
以下流程不論幾張,
只要合乎胡牌(一雀+順刻n = 2 + 3n張) 規則都通用。

一、建立[35]牌數陣列統計各張牌的數量。
二、取雀子。牌數 -2 。
三、進入遞延迴圈。
四、判斷牌數陣列是否全部歸零,如果沒牌,就回傳true。
五、判斷是否為順子,如果是,標示之後進入遞延迴圈。(順牌各減一)
六、判斷是否為刻牌,如果是,標示之後進入遞延迴圈。(刻牌減三)
七、回傳false。
八、五和六的回傳值如果回傳 false ,記得把標示的牌還原。
九、三如果回傳為true,代表可以胡。
十、三隻一組,把所有的牌型找出來,不然有些台會算不出來。(例:平胡)

聽牌的話:
一、先拿掉某一張牌。
二、依序補上所有的牌。
三、如果可以胡,代表此副牌為聽牌。
四、可以順便找出所有聽牌要丟的牌,以及可以胡的牌。

作者 : 3388038(3388038)
[ 貼文 5 | 人氣 3 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/9/23 上午 12:46:41
請問一下 各位先輩 有人寫過麻將的程式嗎?
作者 : 3388038(3388038)
[ 貼文 5 | 人氣 3 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/9/23 上午 02:02:28
不好意思 想再請問一下 有人知道外包的話 麻將遊戲要多少錢呢 謝謝
作者 : arex_huang(小小孩) 貼文超過200則
[ 貼文 339 | 人氣 5660 | 評價 1210 | 評價/貼文 3.57 | 送出評價 10 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/9/23 上午 02:11:28
上面回文的應該不少人有寫過吧??
還有如果要問別人資訊??
您是否也該提出你的資料呢?

一個麻將可以幾萬也可以幾十萬?

問題是你要寫的是哪一種的麻將....
作者 : 3388038(3388038)
[ 貼文 5 | 人氣 3 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/9/23 上午 08:55:21
can you contact me?----my email address---- tobenicer2000@yahoo.com
作者 : 3388038(3388038)
[ 貼文 5 | 人氣 3 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/9/24 下午 03:58:59
不好意思 剛那篇是回給 小小孩先生的
作者 : ioriiori(IORiIORi)
[ 貼文 1 | 人氣 5 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2008/7/21 下午 05:56:31

>
>我是用遞延迴圈解,
>以下流程不論幾張,
>只要合乎胡牌(一雀+順刻n = 2 + 3n張) 規則都通用。
>
>一、建立[35]牌數陣列統計各張牌的數量。
萬子 一萬到九萬,每一數四張。
索子 一條到九條,每一數四張。
筒子 一筒到九筒,每一數有四張。
字牌 東、南、西、北、中、發、白 ,每種四張。
花牌 松、蘭、竹、菊及春、夏、秋、冬八張。
請問為什麼是[35]? 花牌不算的話是[34]就夠用吧,還是[35]有其他用處…
謝謝解答
>二、取雀子。牌數 -2 。
>三、進入遞延迴圈。
>四、判斷牌數陣列是否全部歸零,如果沒牌,就回傳true。
>五、判斷是否為順子,如果是,標示之後進入遞延迴圈。(順牌各減一)
>六、判斷是否為刻牌,如果是,標示之後進入遞延迴圈。(刻牌減三)
>七、回傳false。
>八、五和六的回傳值如果回傳 false ,記得把標示的牌還原。
>九、三如果回傳為true,代表可以胡。
>十、三隻一組,把所有的牌型找出來,不然有些台會算不出來。(例:平胡)

作者 : apple2007(小紅帽)
[ 貼文 7 | 人氣 0 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2008/11/2 下午 05:02:43
感謝你大大hkin(HKLNnet):
     剛剛看到你ㄉ麻將文章感到非常的興趣,
     不知道是否能與認識做個朋友,
     因為我也是同行的,是否能與你一起合作,
     找適當的客戶把你的程式作品發表出去,
     如果有意願,傳個信箱給我可以嗎?
     我的信箱《camdy05233@yahoo.com.tw》小紅帽
     謝謝。
 板主 : 小呆 , 冷眼
 > 遊戲程式設計 - 討論區
 - 最近熱門問答精華集
 - 全部歷史問答精華集
 - 遊戲程式設計 - 知識庫
  ■ 全站最新Post列表
  ■ 我的文章收藏
  ■ 我最愛的作者
  ■ 全站文章收藏排行榜
  ■ 全站最愛作者排行榜
  ■  月熱門主題
  ■  季熱門主題
  ■  熱門主題Top 20
  ■  本區Post排行榜
  ■  本區評價排行榜
  ■  全站專家名人榜
  ■  全站Post排行榜
  ■  全站評價排行榜
  ■  全站人氣排行榜
 請輸入關鍵字 
  開始搜尋
 
Top 10
評價排行
遊戲程式設計
1 aming 2280 
2 冷眼 1450 
3 阿西德倫 510 
4 PLAYER 390 
5 garf 340 
6 Akira 330 
7 白老鼠(Gary) 290 
8 BlueTulip 270 
9 東昇 250 
10 CCL 240 
遊戲程式設計
  專家等級 評價  
  一代宗師 10000  
  曠世奇才 5000  
  頂尖高手 3000  
  卓越專家 1500  
  優秀好手 750  
Microsoft Internet Explorer 6.0. Screen 1024x768 pixel. High Color (16 bit).
2000-2019 程式設計俱樂部 http://www.programmer-club.com.tw/
0.1557617