德州撲克遊戲

2022-04-11 17:22:39 字數 2020 閱讀 5463

哇,好久好久沒寫東西啦。。。

這兩天實現了乙個簡單的遊戲引擎,可以發牌,可以比較兩手牌的大小

這階段過後準備用這個引擎來實現乙個簡單的ai對戰,現在先記錄一下,實現方面我用的是go語言

接下來我假設你已經懂遊戲規則和俗語了

首先是牌的儲存,2~~a,一共13張牌,我用的是乙個14位的二進位制區間來儲存的,比如2-a,將表示為:11111111111110,辣麼第一位是幹啥的呢,請繼續看下面

這樣的儲存方式除了省空間外還有什麼優勢呢?我們順子的判斷為例:

例如順子10jqka,在二進位制區間將表示為11111000000000,叫它s

現在我們有手牌2 3 10 j q k a,那麼它的二進位制表示是11111000000110,叫它t

那麼t&s==s的話,就可以說明t包含乙個順子,並且順子是10jqka

s轉化為10進製的話是15872

類似的我們將所有可能的順子預先儲存好,如下表(10用t表示):

tjqka | 9tjqk | 89tjq | 789tj | 6789t | 56789 | 45678 | 34567 | 23456 | a2345 |

15872 | 7936   | 3968  |  1984  | 992    |  496    | 248     | 124    |  62     |   31     |

由於德州撲克裡面a 2 3 4 5是最小的順子,現在你可以明白二進位制區間裡第0位的作用了,和最高位一樣也是儲存a

我們維護乙個容量為4的int陣列straight,它表示四個花色中每種花色的牌,儲存原理見開頭,它將被用來快速的判斷同花順,同時還可以用來判斷是否為同花

再維護乙個int變數hand,它表示所有手牌的並集,不分花色。它將被用來快速的判斷是否為順子

最後維護乙個容量為13的int陣列count,它用於對每種牌值出現的次數計數

我們將所有牌型做乙個分級:

皇家同花順:10

同花順 :9

四條 :8

葫蘆 :7

同花 :6

順子 :5

三條 :4

兩對 :3

一對 :2

高牌 :1

比較的時候先比較兩手牌的等級,等級相同的情況下,我們進一步分析每一副手牌的value值。

我的value的演算法如下:

對你的手牌進行排序,排序規則是出現次數多的優先,次數相同的則值大的優先,比如:

7 8 4 2 2 a k,排序後為:22ak874,可以理解為16進製制:0x22ad874。

需要注意的是,順子和同花不適應此演算法,順子的value就是該順子的最高牌;同花的value是該花色的牌並集(具體讀者可以自己思考)

各種牌型的判斷以及比較:

1、皇家同花順 royal flush

這個最簡單了,直接用四個花色的牌集(詳見straight陣列),去和15872相與即可(原理見上)

一場牌局只可能出現唯一皇家同花順,所以只需要記錄等級即可,因為只可能win or tie(五張公牌)

2、同花順straight flush

和皇家同花順類似,從大到小遍歷所有可能的順子,和它們做與操作。value值是該順子中最大的高牌

3、四條 four of a kind

維護乙個陣列count int用於對每一種牌值進行計數即可。

還有一種方法是將四種花色的牌集相與,最後二進位制區間內還是1的那些就是我們要的。

4、葫蘆 full house

通過count陣列先遍歷有沒有出現三次的,有的話,再遍歷有沒有出現2次的

5、同花 flush

有兩個方法,乙個是對每乙個花色的牌集進行遍歷,看看二進位制集合裡有沒有5個1

第二個方法詳見**,判斷同花的邏輯處

6、順子 straight

取所有花色牌的集合,去和所有可能的順子做與操作

7、三條 three of a kind;兩對 two pairs; 一對 one pair

運用count陣列計數器

原始碼開源在github上:

德州撲克 資訊

術語表 pokerhands,盲注 blind 翻牌圈 flop 轉牌圈 turn 河牌圈 river 攤牌 showdown 全押 all in 下注 bet 加註 raise 觀讓 check 棄牌 fold 荷官皇家同花順 royal flush 由akqj10五張組成,並且這5張牌花色相同 ...

德州撲克總綱

前言 其實我一直想做些和德州撲克相關的一些工作和研究.我把它全都記錄一下,看看自己在這一塊領域,到底能折騰出什麼來,我給自己定了兩個方向,乙個是實現乙個簡單的支援網路對戰的德州撲克遊戲,乙個是深入研究德州ai.無論怎麼樣,先努力吧.德州對戰平台 其實願望還是美好的,我希望是構建這樣乙個工程,同時開源...

德州撲克小結

1 選擇合適的場子。首先是根據自己的資產規模選擇對應門檻的賭局。你至少要保證資產可以承受5次的爆倉。比如資產不到10萬,那麼去2萬門檻的局比較合適。但資產達到25萬以後,可以考慮5萬以上的局。大盲注的規模,應該是門檻的1 其次是入場如果發現場上有對手的籌碼是你的3 4倍了,那麼應該換乙個場子。因為如...