鬥地主之推測

2021-08-10 03:20:05 字數 1049 閱讀 7447

經過前面所說的調整和改進,終於進入了打牌水平可隨規則數增加的正軌。但不久又出問題了:(

這個問題的現象很簡單,解決起來卻很複雜:跳打。比如地主出了張2,下家在不清楚小鬼分布的情況下就直接出了大鬼,結果就導致地主的小鬼公升級了。

粗看起來應該也比較好解決,增加點規則來判斷下小鬼的分布情況就是了。比如:如果地主出了二,最後是門板用大鬼攔截,則說明小鬼都在地主手中。

我們之前也曾討論過判斷問題,比如地主各牌型的強弱、各玩家的意圖等等,粗看起來這兩個問題都是對某種未知的判斷,似乎並沒有什麼區別。但細細考量下來,這兩者還是有著本質的區別的。

之前討論過,類似意圖、牌型強弱這些判斷其實並不是對具體事物的判斷,而是我們自己設想出來的、是對其他玩家歷史行為的概括,目的是為了簡化後繼的推理。用it的術語說,就是一種為了簡化推理計算從而提前進行了預計算的中間結果,否則我們在書寫規則時,就需要從頭考慮各個玩家的出牌歷史,這會導致規則數量急劇增加同時每條規則也都會非常複雜、難以理解。

而地主手中有沒有小鬼,這是乙個事實,只不過我們現在還不知道,但終有知道的時候(為了和判斷相區別,我們稱這種地主有無小鬼的猜測為推測)。所以,這兩者的本質區別就是判斷和推測存在著乙個是否需要證明的問題;

在很早的時候,這個需要根據事實對推測加以證明的問題就非常困擾著我,因為如果是證真還好,如果是證偽那問題就大了:所有基於這個推測做出的推論全部都要撤銷掉。問題的複雜還在於,我們對於推測其實最常用的是非此即彼的推測,比如:如果 門板不頂牌 則 要麼 門板想進攻 要麼 門板頂不動。這就意味著一旦證偽了某推測,我們不但要撤銷掉所有基於該推測衍生出來的各種推論,還要調整被間接證真的結論及其所衍生出來的各種推論的置信度。其它關聯的問題就更多、更麻煩了:撤銷是否需要回溯、如何回溯到正確的版本、撤銷後的一致性問題、迴圈論證的檢測等等。

在試驗了多種實現之後,考慮到鬥地主的複雜性還不是很大,所以目前採取了一種簡化策略來降低推測的複雜性:不基於推測來進行推測或判斷。這樣就暫時不需要考慮推測的關聯問題了,而只要將推測和最新出示的事實之間做乙個衝突檢測即可:如果推測與最新事實有衝突則將推測撤銷掉即可,這就暫時避免了複雜的回溯問題。

在增加推測後,那麼我們目前就具有了三種能力:

鬥地主發牌

鬥地主的發牌 a 鬥地主的發牌 實現模擬鬥地主的功能 1.組合牌 2.洗牌 3.發牌 4.看牌 public class doudizhu 定義4個花色陣列 string colors 定義整數變數,作為鍵出現 int index 2 遍歷陣列,花色 點數的組合,儲存到map集合 for strin...

案例 鬥地主

案例分析 1 準備 準備54張牌,儲存到一的集合中,特殊牌大小王。其他52張牌 定義乙個陣列 集合,儲存4種花色 定義乙個陣列 集合,儲存13個符號1 2 3 4 5 迴圈遍歷兩個陣列 集合,組裝52張牌,儲存到乙個集合中。5,2,a 再加上大?和小?2 洗牌 使用集合工具collections的方...

鬥地主的規則 歡樂鬥地主的規則

鬥地主牌型 火箭 即雙王 大王和小王 最大的牌。四張同數值牌 如四個 7 單牌 單個牌 如紅桃 5 對牌 數值相同的兩張牌 如梅花 4 方塊 4 三張牌 數值相同的三張牌 如三個 j 三帶一 數值相同的三張牌 一張單牌或一對牌。例如 333 6 或 444 99 飛機帶翅膀 三順 同數量的單牌 或同...