成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

nodejs版,麻將智能機(jī)器人出牌算法

ShevaKuilin / 3469人閱讀

摘要:相關(guān)術(shù)語麻將應(yīng)對的五種標(biāo)準(zhǔn)狀態(tài),是吃碰杠聽胡。所以,算法變成了評(píng)估牌面積分的算法,越高說明牌越好,也說明這副牌可以胡的概率更高。表格生成有了評(píng)估方法后,我們只需要對每個(gè)花色的手牌,分配張牌給他,然后計(jì)算胡牌概率,就可以知道牌面積分。

nodejs版,麻將智能機(jī)器人出牌算法。 簡述

麻將,起源于中國,粵港澳及閩南地區(qū)俗稱麻雀,

由中國古人發(fā)明的博弈游戲,娛樂用具,一般用竹子、骨頭或塑料制成的小長方塊,上面刻有花紋或字樣,

北方麻將每副136張,南方麻將多八個(gè)花牌,分別是春夏秋冬,梅竹蘭菊,共計(jì)144張。

項(xiàng)目

請加星收藏倉庫地址,方便以后學(xué)習(xí)使用。

github地址

使用方法
# 下載
git clone https://github.com/wallace5303/nodejs-game.git

# 進(jìn)入文件
cd nodejs-game/aiTable

# 安裝
npm install

# 運(yùn)行
node demo.js
demo內(nèi)容
# 麻將牌所有對應(yīng)的數(shù)字id,請查看配置文件:cardConfig.json

const outCardLogic = require("./outCardLogic");

// 手牌 1萬,2萬,3萬,8萬,8萬,1條,5條
const cards = ["31" , "32", "33", "38", "38", "41", "45"];

// 選出一張最優(yōu)牌
var outLogic = new outCardLogic();

// 第二個(gè)參數(shù)為萬能牌,可選。
var card = outLogic.outAI(cards);

console.log("選出的最優(yōu)牌是:%j", card); // 41(1條)
分類 字牌(合計(jì)28張)

風(fēng)牌:東、南、西、北,各4張,共16張。

箭牌:中、發(fā)、白,各4張,共12張。

花牌(合計(jì)8張)

春、夏、秋、冬,梅、蘭、竹、菊,各一張,共8張。

注:這種牌很少種類的麻將會(huì)用到。

序數(shù)牌(合計(jì)108張)

萬子牌:從一萬至九萬,各4張,共36張。

筒子牌:從一筒至九筒,各4張,共36張。也有的地方稱為餅,從一餅到九餅。

索子牌:從一索至九索,各4張,共36張。也有的地方稱為條,從一條到九條。

相關(guān)術(shù)語

麻將應(yīng)對的五種標(biāo)準(zhǔn)狀態(tài),是“吃”、“碰”、“杠”、“聽”、“胡”。在正式比賽中,五種狀態(tài)的官方語言都是漢語,包括國際比賽。

吃:上家打出牌,與下家的牌正好組成一副順子,他就可以吃。

碰:其他人打出一張牌,自己手中有兩張相同的牌正好組成一副刻子,他就可以碰。

杠:其他人打出一張牌,自己手中有三張相同的牌,即可杠牌,稱為明杠,倒下這個(gè)杠,再到排尾抓一張牌,將手中不需要的一張牌打出。手中有三張相同的牌,又抓到一張相同的牌,稱為暗杠,扣下,別人不知道是啥牌,再到排尾抓一張牌,將手中不需要的一張牌打出?!懊鞲堋北取俺浴眱?yōu)先,如果你要杠的牌剛好是出牌方下家要吃的牌,則吃牌失敗,杠牌成功。

聽:當(dāng)你將你手中的牌都湊成了有用的牌,只需再加上最后一張便可和牌,你就可以進(jìn)入聽牌的階段,報(bào)聽后不能吃、碰、杠,且只能打出本輪摸到的牌。

和:(讀音:hú,ㄏㄨ)當(dāng)最終牌型滿足mAAA+nABC+DD(m、n可以為0),即可和牌(少數(shù)特殊牌型除外)。四位玩家誰先和牌誰為勝利,得分由底分乘上番數(shù)。具體視比賽詳細(xì)規(guī)則而定。

牌型術(shù)語

連子:一萬二萬三萬

刻子:一筒一筒一筒

將:一條一條

胡牌公式

N×連子 + M×刻子 + 1×將

N>=0, M>=0

鬼牌

鬼牌的定義就是能夠變成任意牌的牌,也叫萬能牌。

案例分析

舉個(gè)栗子,看看真實(shí)的人是怎么思考出牌的:

1萬2萬3萬5條,打5條

1萬2萬3萬1條1條6條,打6條

解決思路

從上面的例子可以看出來,打牌的過程,其實(shí)就是打完之后的牌面,胡牌概率最高。

所以,算法變成了評(píng)估牌面積分的算法,越高說明牌越好,也說明這副牌可以胡的概率更高。

評(píng)估方法

為了評(píng)價(jià)這副牌的積分,也就是胡牌的概率,我們可以給他再摸N張牌,看看胡牌情況。
參考如下示例,可以很直觀得出牌面積分:1筒2筒3筒 > 1筒2筒3筒2條3條 > 1筒2筒3筒2條。

1筒2筒3筒

已經(jīng)胡了,胡牌概率為1

1筒2筒3筒2條

只摸1張牌,那么只有當(dāng)摸2條的時(shí)候,才會(huì)贏,胡牌概率為1/9*摸條的概率,有將。

1筒2筒3筒2條3條

只摸1張牌,那么只有當(dāng)摸1條4條的時(shí)候,才會(huì)贏,胡牌概率為2/9*摸條的概率,無將。

表格生成

有了評(píng)估方法后,我們只需要對每個(gè)花色的手牌,分配N張牌給他,然后計(jì)算胡牌概率,就可以知道牌面積分。

不過考慮到計(jì)算量太大,所以我們可使用查表法,提前計(jì)算好,方便快速查找。

出牌算法

遍歷手上的非鬼牌,計(jì)算排除掉這張牌后的牌面積分最大值,這張牌就是要打的牌。

如果打出能聽牌了,就取一個(gè)聽牌最多的牌打出去。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/109969.html

相關(guān)文章

  • 基于狀態(tài)機(jī)模型的斗地主游戲(NodeJs&SocketIO)

    摘要:系統(tǒng)結(jié)構(gòu)系統(tǒng)考慮使用和實(shí)現(xiàn)服務(wù)器端邏輯,前端使用。邏輯流程主要邏輯包括用戶進(jìn)入游戲等待對家進(jìn)入游戲游戲過程結(jié)束統(tǒng)計(jì)這個(gè)過程。 1. 系統(tǒng)結(jié)構(gòu) 系統(tǒng)考慮使用Nodejs和SocketIo實(shí)現(xiàn)服務(wù)器端邏輯,前端使用HTML5。showImg(https://segmentfault.com/img/remote/1460000007643089); 2. 邏輯流程 1 . 主要邏輯包括用戶...

    NoraXie 評(píng)論0 收藏0
  • 基于狀態(tài)機(jī)模型的斗地主游戲(NodeJs&SocketIO)

    摘要:系統(tǒng)結(jié)構(gòu)系統(tǒng)考慮使用和實(shí)現(xiàn)服務(wù)器端邏輯,前端使用。邏輯流程主要邏輯包括用戶進(jìn)入游戲等待對家進(jìn)入游戲游戲過程結(jié)束統(tǒng)計(jì)這個(gè)過程。 1. 系統(tǒng)結(jié)構(gòu) 系統(tǒng)考慮使用Nodejs和SocketIo實(shí)現(xiàn)服務(wù)器端邏輯,前端使用HTML5。showImg(https://segmentfault.com/img/remote/1460000007643089); 2. 邏輯流程 1 . 主要邏輯包括用戶...

    xcold 評(píng)論0 收藏0
  • AI開發(fā)書籍分享

    摘要:編程書籍的整理和收集最近一直在學(xué)習(xí)深度學(xué)習(xí)和機(jī)器學(xué)習(xí)的東西,發(fā)現(xiàn)深入地去學(xué)習(xí)就需要不斷的去提高自己算法和高數(shù)的能力然后也找了很多的書和文章,隨著不斷的學(xué)習(xí),也整理了下自己的學(xué)習(xí)筆記準(zhǔn)備分享出來給大家后續(xù)的文章和總結(jié)會(huì)繼續(xù)分享,先分享一部分的 編程書籍的整理和收集 最近一直在學(xué)習(xí)deep learning深度學(xué)習(xí)和機(jī)器學(xué)習(xí)的東西,發(fā)現(xiàn)深入地去學(xué)習(xí)就需要不斷的去提高自己算法和高數(shù)的能力然后...

    huayeluoliuhen 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<