大家都知道,鬥地主的一副牌有54張,三位玩家,每位17張牌,3張底牌(17*3+3 = 54)。
所以,我們定義乙個list:
listcards= new arraylist();
cards.get(0)-----cards.get(12) 方塊3,方塊4---------方塊k,方塊a,方塊2
cards.get(13)-----cards.get(25) 梅花3,梅花4---------梅花k,梅花a,梅花2
cards.get(26)-----cards.get(38) 紅心3,紅心4---------紅心k,紅心a,紅心2
cards.get(39)-----cards.get(51) 黑桃3,黑桃4---------黑桃k,黑桃a,黑桃2
cards.get(52), cards.get(53) 小王,大王
我們要做的是:
(1)先給listcards 初始化54張牌,
(2)然後,洗牌,其核心思想,是把這54張牌隨機交換二張牌的位置,將牌完全洗亂.
(3)再按照一定的發牌策略,將這54張牌,分別給三位玩家發17張牌,再留3張底牌。
對54張牌初始化,比較簡單,在這就不介紹了,下面主要介紹洗牌和發牌。
洗牌的核心思想:就是把牌隨機的洗亂,以達到完全隨機的狀態。
(1)
(2)
大家應該心裡有數了,應該怎麼做了。
下面是我選擇的方法,這個方法主要是可以方便以後在服務端來配置交換次數。
private void xipai(list cards) {
// todo auto-generated method stub
//洗牌,交換swap_count次 ,swap_count,我們後面可以在服務端配置
for(int i = 0;i
我們看了上面的二篇博文,覺得依照一定的發牌策略和規則,分別給三個玩家發17張,最後3張為底牌就ok了。呵呵,其實一開始我也是這麼做的,後來,想一想,我們為什麼要按一定的發牌策略和規則發牌呢?是不是主要還是為了隨機呢?好,如果我們在洗牌時,做到了足夠隨機,那麼我們是不是就可以這樣發牌,我們把1到17張牌發給玩家1,18到34張牌發給玩家2,35到51張牌發給玩家3,最後三張做底牌。答案當然是可以的,那們發牌就簡單了。
但是,各位,我們是不是還會有這樣的要求:
(1)給玩家自己發一手好牌(如幾個炸彈,幾張大牌),(大牌為(4個2,2個王))
(2)設定幾個炸彈,隨機的發給三個玩家
(3)隨機的給三位玩家發牌
(4)在特定時候,減少炸彈的出現概率,大牌同時出現的概率。
並且要求這些引數,可以在伺服器配置。有沒有好的發牌方法呢:
解決方案:
(1)設定好牌炸彈list(goodbombslist),好牌大牌list(goodkeypaislist),根據要求分別給goodbombslist,和goodkeypaislist分配牌,並發給玩家自己。
(2)設定炸彈list(bombslist),根據要求給bombslist賦值(這個要注意設定炸彈的數目,不能太多,炸彈為1,2,3,4,5,6為佳),然後隨機的把這些炸彈發給三個玩家,發牌的時候要注意隨時判斷玩家手中的牌是否還能分配炸彈。
(3)隨機把總共54張牌洗亂得到allcardslist,再從allcardslist中將goodbombslist,goodkeypaislist,bombslist中的牌都刪除,再把剩下的牌發給三個玩家和底牌。
(4)如果在特定時條件下,調整減少炸彈和幾張大牌同時出現的概率。
並且這些概率值,我們都採用成員變數的方式,提供set和get方法,以方便後面的設定。
因為我的需求,我說一下我的解決方案吧:
(1)給玩家自己發好牌:
設定好牌炸彈list(goodbombslist),好牌大牌list(goodkeypaislist),根據要求分別給goodbombslist,和goodkeypaislist分配牌,並發給玩家自己。
隨機把總共54張牌洗亂得到allcardslist,再從allcardslist中將goodbombslist,goodkeypaislist中的牌都刪除,再把剩下的牌發給三個玩家和底牌。
(2)完全隨機發牌:
隨機把總共54張牌洗亂得到allcardslist,再把allcardslist的牌完全隨機的發給三個玩家和底牌。
如果在特定時條件下,調整減少炸彈和幾張大牌同時出現的概率。
1. 鬥地主演算法的設計與實現
2. 棋牌遊戲開發
模擬鬥地主洗牌和發牌
分析 a 建立乙個牌盒 b 裝牌 c 洗牌 d 發牌 e 看牌 public class test system.out.println public static void main string args 定義乙個點陣列 string numbers for string c colors ar...
集合訓練之鬥地主洗牌發牌實現
2.1 任務功能流程 2.2 造牌功能分析 容器準備 建立集合容器,用於存放撲克牌 hashmappokermap 撲克牌存放容器,key保證唯一性,hashmap便於索引 arraylistpokerlist 撲克牌索引標誌,用於實現隨機取牌 發牌 造牌元素準備 建立陣列,儲存撲克牌組合元素,用於...
鬥地主發牌
鬥地主的發牌 a 鬥地主的發牌 實現模擬鬥地主的功能 1.組合牌 2.洗牌 3.發牌 4.看牌 public class doudizhu 定義4個花色陣列 string colors 定義整數變數,作為鍵出現 int index 2 遍歷陣列,花色 點數的組合,儲存到map集合 for strin...