關於撲克牌程式(不限語言)
我想寫一個撲克牌程式 發牌給4個人 從每一家13張牌中由程式挑出5張牌,組成最佳牌型 且考慮最強數字、花色組合 最後輸出贏家
牌型大小順序1同花順 2鐵支 3葫蘆 4同花 5順子 6三條 7兩對
同牌型比數字(A > K > Q > J > 10 > 9 > 8 > 7 > 6 > 5 > 4 > 3 >2), 數字同樣比花色(黑桃 >紅心 > 磚塊 >梅花); 順子順序:最大A、10、J、Q、K 第二大A、2、3、4、5。
2 則回答
最佳解答
你可以用 enum 來表示花色跟數字:
enum CARDS {
NUMBER_2 = 0x01,
NUMBER_3 = 0x02,
NUMBER_4 = 0x03,
NUMBER_5 = 0x04,
NUMBER_6 = 0x05,
NUMBER_7 = 0x06,
NUMBER_8 = 0x07,
NUMBER_9 = 0x08,
NUMBER_10 = 0x09,
NUMBER_J = 0x0A,
NUMBER_Q = 0x0B,
NUMBER_K = 0x0C,
NUMBER_A = 0x0D,
TYPE_SPADE = 0x0400,
TYPE_HEART = 0x0300,
TYPE_DIAMOND = 0x0200,
TYPE_CLUB = 0x0100
};
這麼一來 TYPE + NUMBER 就等於牌, 例如黑桃五 = 0x0104, 梅花 J = 0x040A.
遊戲一開始先 "準備一副牌", 可以用雙層迴圈去跑, 或是直接寫死...
再來是洗牌, 就把每張牌隨機與另一張牌交換:
for (int i = 0;i < 52;++i)
swap(cards[i], cards[rand()%52]);
那麼前 0~12 張就是第一家的牌, 13~25 第二家, 26~38 第三家, 39~51 第四家.
然後牌型的判斷就工人智慧努力刻程式就是了...
- 取花色: card[i] & 0x0f00
- 取數字: card[i] & 0x000f
牌型也是弄個 enum:
enum SIGN {
SIGN_NOTHING = 0x010000, // 無賴
SIGN_PAIR = 0x020000, // 一對
SIGN_TWO_PAIR = 0x030000, // 兩對
SIGN_THREE_OF_A_KIND = 0x040000, // 三條
SIGN_STRAIGHT = 0x050000, // 順子
SIGN_FLUSH = 0x060000, // 同花
SIGN_FULL_HOUSE = 0x070000, // 葫蘆
SIGN_FOUR_OF_A_KIND = 0x080000, // 鐵支
SIGN_ROYAL_FLUSH = 0x090000, // 同花順
};
1. 同花順: 針對每種花色去找是否有順子 (順子的判斷方法看 5)
2. 鐵隻: 同數字的牌有四張
3. 葫蘆: 同數字的牌三張, 另一個數字的牌兩張 (先找 A, 再從 K 找回 2)
4. 同花: 全部的牌花色相同
5. 順子: 有 連續的數字五張 (先找 A K Q J 10, 再找 5 4 3 2 A, 然後從 K Q J 10 9 開始找到 6 5 4 3 2)
6. 三條: 同樣數字的牌三張
7. 兩對: 一個數字的牌兩張, 另一個數字的牌也兩張 (先找 A, 再從 K 找回 2)
8. 一對: 同樣數字的牌兩張
9. 無賴: 先找 A, 然後從 K 找回 2
這麼一來, 最先找到的五張牌就是手上最大的.
每種牌型只要記最大的那張牌即可. 例如
- Q 鐵支 = 0x08000B (花色不重要所以不記),
- 最大的牌是紅心 A 的順子 (10 J Q K A) = 0x05030D
- 葫蘆 Q Q Q 3 3 記三條的數字 = 0x04000B...
其他請自己發揮.
四個人裡面數字最大的就是贏家.
推薦您前往黃金俱樂部遊戲網!
提供您詳盡的說明
您可以先進行遊戲下載:
網址:http://99點5888th點net
誠心服務!會員溫馨!永久服務!
第一:全程直播遊戲的公平與公正性【亞洲唯一直屬會員代理】
第二:點數儲值和託售皆在十分鐘之內完成【全台娛樂城速度最快24小時不分周末】
第三:二十四小時專業客服務線上服務全年無休【大大小小問題都可以馬上做詳細解答喔】
電子機台.真人遊戲和你一同玩樂
麻將 百家樂 5PK 德州撲克 水果盤 賓果
輪盤 21點 10點半 骰盅 牌九 鬥地主 13支
全年網站優惠活動不間斷!
快去註冊會員!免費:http://99點5888th點net