请问Showhand in hand最早是哪里发明的玩法?

showhand是什么意思?
showhand是什么意思?
08-12-30 &
SHOW HAND, 亮出你的手, 就是全出了.手上没东西了, 别人就看到你的手了.
请登录后再发表评论!
SHOW HAND, 亮出你的手, 就是全出了.手上没东西了, 别人就看到你的手
请登录后再发表评论!
梭哈英文名showhand,意思是出示手中所有的牌,这话的意思就是showhand
请登录后再发表评论!C++ ShowHand - 天驱 - 博客园
随笔 - 7, 文章 - 0, 评论 - 1, 引用 - 0
模拟一个梭哈(Show hand) 牌戏,可以洗牌(shuffle)、发牌(Deal)、算牌型(GetType)。
程序为控制台类型,输入Y发牌,输入N退出,不区大小写。输入Y后,先洗牌,把洗过的57张牌都打印出来,再随机抽 5 张,显示它们的牌型和大小。
打印时,牌的表示方法如下:
数字在前,花色在后。
2到9,用对应的数字表示;10 用 T 表示;JQKA就用对应的字母表示
花色:Club(草花) & Diamond(方块) & Heart(红桃) & Spade (黑桃)
[游戏背景]
我们的一付牌里,有 52 张普通牌和 5 张鬼。
52 张普通牌分成 4 种花色,从大到小依次为黑桃(Spade)、红桃(Heart)、方块(Diamond)、草花(club),每种花色是13张牌2-10,J,Q,K,A。
5张鬼不分大小,可以当作任意牌来组成牌型。
 牌型比较:五鬼&五条&同花顺>四条>葫芦>同花>顺子>三条>二对>单对>散牌。
  数字比较:A>K>Q>J>10>9>8 >7>6>5>4>3>2
  花式比较:黑桃>红桃>方块>草花&
  五鬼&&五张鬼
  五条&&五张相同数字的牌,其中至少一张为鬼。
  同花顺&&拥有五张连续性同花色的顺子。以A为首的同花顺最大。A只能出现在顺子的头或尾,不能出现在中间。KA234 不是顺子。
  四条&&四张相同数字的牌,外加一单张。比数字大小,四条「A」最大
  葫芦&&由「三条」加一个「对子」所组成的牌,若别家也有此牌型,则比三条数字大小,三条相同,则比对子,都相同则比花色
  同花&&不构成顺子的五张同花色的牌。先比数字最大的单张,如相同再比第二支、依此类推
  顺子&&五张连续数字的牌组。 以A为首的顺子最大,如果大家都是顺子,比最大的一张牌,如果大小还一样就比这张牌的花式
  三条&&牌型由三张相同的牌组成,以A为首的三条最大
  二对&&牌型中五张牌由两组两张同数字的牌所组成。若遇相同则先比这副牌中最大的一对,如又相同再比第二对,如果还是一样,比大对子中的最大花式
  单对&&牌型由两张相同的牌加上三张单张所组成。如果大家都是对子,比对子的大小,如果对子也一样,比这个对子中的最大花色
  散牌&&单一型态的五张散牌所组成,不成对(二对),不成三条,不成顺(同花顺),不成同花,不成葫芦,不成四条。先比最大一张牌的大小,如果大小一样,比这张牌的花色 .
运行演示:
Input Y to deal, input N to quit...
All cards are:
7 Club 2 Diamond Joker 5 Spade T Club
Your cards are:
Your style is: Three Of Kind, J
Input Y to deal, input N to quit...
All cards are:
Q Heart 4 Club 8 Spade 5 Spade
2 Club 7 Heart T Spade T Club A Spade
Your cards are:
Your style is: One Pair 5
Quit game.
一些对应的英文单词:
"Diamond",
"Heart", //红桃
"Spade", //黑桃
"Five Of Jokers"
"Five Of Kind"
"Straight Flush", //同花顺
"Four Of Kind",
"Full House",
"Straight",
"Three Of Kind",
"Two Pair",
"One Pair",
"Odd Card"
1 class Poker
6 Poker(void);
7 ~Poker(void);
8 inline Poker(int x,int y):v(x),s(y){};
13 private:
14 int//花色
15 int//数字
22 const static int k_DeckTotalNum = 57;
//牌的总数
23 const static int k_DeckHandCardsNum = 5;//玩家牌的数量
27 const static string k_Type[11]=
29 "Odd Card", //散牌
30 "One Pair", //单对
31 "Two Pair", //二对
32 "Three Of Kind", //三条
33 "Straight", //顺子
34 "Flush", //同花
35 "Full House", //葫芦
36 "Four Of Kind", //四条
37 "Straight Flush", //同花顺
38 "Five Of Kind", //五条
39 "Five Of Jokers" //五鬼
44 const static string k_Suit[5]=
46 "Club", //草花
47 "Diamond", //方块
48 "Heart", //红桃
49 "Spade", //黑桃
50 "Joker"
55 const static string k_Value[14]=
1 const static int DECKTOTAL = 57;
2 const static int SUITTOTAL = 5;
3 const static int VALUETOTAL =14 ;
4 const static int JOKER_V=14;
5 const static int JOKER_S=4 ;
10 class ShowHand
12 public:
13 ShowHand();
14 ~ShowHand();
17 void Init();//初始化所有牌
18 void DeInit();
20 void ShowDeck();//显示所有牌面
22 void Shuffle();//洗牌
23 void Deal();//发牌
24 void GetType();//获得玩家牌面类型
28 bool IsOddCard( );
29 bool IsOnePair( );
30 bool IsTwoPair( );
31 bool IsThreeOfKind( );
32 bool IsStraight( );
33 bool IsFlush( );
34 bool IsFullHouse( );
35 bool IsFourOfKind( );
36 bool IsStraightFlush( );
37 bool IsFiveOfKind( );
38 bool IsFiveOfJokers( );
40 void SortCardValue(); //玩家牌 数字排序
41 void SortCardSuit();//玩家牌花色排序
43 int JokerNumer();//joker的数量
45 bool Continu(int n) ;//从第一张起 n个连续递增的数字
48 private:
49 Poker m_Deck[DECKTOTAL];
1 // ShowHand.cpp
2 #include "StdAfx.h"
3 #include "ShowHand.h"
4 #include &ctime&
5 using namespace
7 static vector&Poker& playerD
8 vector&int&//玩家牌的数字
9 vector&int& deckS;//玩家牌的花色
11 ShowHand::ShowHand()
17 ShowHand::~ShowHand()
23 void ShowHand::Init()
m_Deck[0].v=0;
int v=0,s=0;
for(int i=0;i&52;)
for(int j=0;j&4;j++)
m_Deck[i].v=v;
m_Deck[i].s=s;
for(int i=52;i&57;i++)
m_Deck[i].v=JOKER_V;
m_Deck[i].s=JOKER_S;
playerDeck.clear();
ShowHand::DeInit()
55 void ShowHand::Shuffle()
srand((unsigned int)time(NULL));
for(int i=0;i&DECKTOTAL;i++)
int j=rand()%DECKTOTAL;
temv=m_Deck[j].v;
tems=m_Deck[j].s;
m_Deck[j].v=m_Deck[i].v;
m_Deck[j].s=m_Deck[i].s;
m_Deck[i].v=
m_Deck[i].s=
74 void ShowHand::Deal()
cout&&"Your cards are:"&&
for(int i=0;i&5;i++)
int r=rand()%57;
playerDeck.push_back(Poker(m_Deck[r].v,m_Deck[r].s));
cout&&setw(2)
&&k_Value[playerDeck[i].v]&&"
&&k_Suit[playerDeck[i].s]&&
88 void ShowHand::GetType()
cout&&"Your style is:";
SortCardValue();
SortCardSuit();
if(IsFiveOfJokers())
cout&&k_Type[10]&&
else if(IsFiveOfKind() )
cout&&k_Type[9]&&
else if(IsStraightFlush() )
cout&&k_Type[8]&&
else if(IsFourOfKind() )
cout&&k_Type[7]&&
else if(IsFullHouse() )
cout&&k_Type[6]&&
else if(IsFlush() )
cout&&k_Type[5]&&
else if(IsStraight() )
cout&&k_Type[4]&&
else if(IsThreeOfKind() )
cout&&k_Type[3]&&
else if(IsTwoPair() )
cout&&k_Type[2]&&
else if(IsOnePair() )
cout&&k_Type[1]&&
cout&&k_Type[0]&&
142 void ShowHand::ShowDeck()
cout&&"All cards are:"&&
for(int i=0;i&DECKTOTAL;)
cout&&setw(2)
&&k_Value[m_Deck[i].v]&&" " &&k_Suit[m_Deck[i].s]
if(i%5==0)
cout&&endl&&
157 bool ShowHand::IsOddCard(
return true;
162 bool ShowHand::IsOnePair( )
(JokerNumer()==0&&deck[0]==deck[1]&&deck[1]!=deck[2] && deck[2]!=deck[3] &&deck[3]!=deck[4])
||(JokerNumer()==0&&deck[1]==deck[2]&&deck[0]!=deck[1]&& deck[2]!=deck[3]
&& deck[3]!=deck[4])
||(JokerNumer()==0&&deck[2]==deck[3]&&deck[0]!=deck[1]&& deck[1]!=deck[2]
&& deck[3]!=deck[4] )
||(JokerNumer()==0&&deck[3]==deck[4]&&deck[0]!=deck[1]&& deck[1]!=deck[2]
&& deck[2]!=deck[3] )
||(JokerNumer()==1&&deck[0]!=deck[1]&&deck[1]!=deck[2]&& deck[2]!=deck[3] && deckS[3] - deckS[0]&0)
return true;
return false;
bool ShowHand::IsTwoPair()
(JokerNumer()==0&&deck[0]==deck[1]&& deck[2]==deck[3] &&deck[3]!=deck[4])
||(JokerNumer()==0&&deck[0]==deck[1]&& deck[3]==deck[4] &&deck[0]!=deck[2]&&deck[2]!=deck[3])
||(JokerNumer()==0&&deck[1]==deck[2]&& deck[3]==deck[4] &&deck[0]!=deck[1])
||(JokerNumer()==1&&deck[0]==deck[1]&&deck[1]!=deck[2]&& deck[2]!=deck[3] )
||(JokerNumer()==1&&deck[1]==deck[2]&&deck[0]!=deck[1]&& deck[2]!=deck[3] )
||(JokerNumer()==1&&deck[2]==deck[3]&&deck[0]!=deck[1]&& deck[1]!=deck[2] )
return true;
return false;
bool ShowHand::IsThreeOfKind(
(JokerNumer()==0&&deck[0]==deck[2]&&deck[0]!=deck[3]&&deck[3]!=deck[4]
||(JokerNumer()==0&&deck[1]==deck[3]&&deck[0]!=deck[1]&&deck[3]!=deck[4]
||(JokerNumer()==0&&deck[2]==deck[4]&&deck[0]!=deck[1]&&deck[1]!=deck[2] )
||(JokerNumer()==1&&deck[0]==deck[1]&&deck[0]!=deck[2]&&deck[2]!=deck[3]
||(JokerNumer()==1&&deck[1]==deck[2]&&deck[0]!=deck[1]&&deck[2]!=deck[3]
||(JokerNumer()==1&&deck[2]==deck[3]&&deck[0]!=deck[1]&&deck[1]!=deck[2]
||(JokerNumer()==2&&deck[0]!=deck[1]&&deck[1]!=deck[2]&&deckS[4]-deckS [0] & 4
return true;
return false;
bool ShowHand::IsStraight( )
(JokerNumer()==0&&Continu(5) &&deckS[4]-deckS [0] & 4
||(JokerNumer()==1&&Continu(4) &&deckS[3]-deckS [0] & 4
||(JokerNumer()==2&&Continu(3) &&deckS[2]-deckS [0] & 4
return true;
return false;
bool ShowHand::IsFlush( )
(JokerNumer()==0&&deck[4]-deck [0] & 4 && deckS[0]==deckS[4] )
||(JokerNumer()==1&&deck[3]-deck [0] & 4 &&deckS[0]==deckS[3] )
||(JokerNumer()==2&&deck[2]-deck [0] & 4 &&deckS[0]==deckS[2] )
return true;
return false;
bool ShowHand::IsFullHouse( )
(JokerNumer()==1 && deck[0]==deck[1] &&deck[2]==deck[3]&&deck[0]!=deck[2] )
||(JokerNumer()==0&& deck[0]==deck[1] &&deck[1]==deck[2] &&deck[3]==deck[4]&&deck[0]!=deck[3])
||(JokerNumer()==0&& deck[0]==deck[1] &&deck[2]==deck[3] &&deck[3]==deck[4]&&deck[0]!=deck[2])
return true;
return false;
bool ShowHand::IsFourOfKind( )
(JokerNumer()==3 && deck[0]!=deck[1])
||(JokerNumer()==2 && deck[0]==deck[1] &&deck[0]!=deck[2] )
||(JokerNumer()==2 && deck[0]==deck[2]&&deck[0]!=deck[1]
||(JokerNumer()==2 && deck[1]==deck[2] &&deck[0]!=deck[1] )
||(JokerNumer()==1 && deck[0]==deck[1] &&deck[1]==deck[2] &&deck[0]!=deck[3] )
||(JokerNumer()==1 && deck[0]==deck[1] &&deck[1]==deck[3] &&deck[0]!=deck[2])
||(JokerNumer()==1 && deck[1]==deck[2] &&deck[2]==deck[3]&&deck[0]!=deck[1] )
||(JokerNumer()==0&& deck[0]==deck[1] &&deck[1]==deck[2] &&deck[2]==deck[3]&&deck[0]!=deck[4])
||(JokerNumer()==0&& deck[0]==deck[1] &&deck[1]==deck[2] &&deck[2]==deck[4]&&deck[0]!=deck[3])
||(JokerNumer()==0&& deck[0]==deck[1] &&deck[1]==deck[3] &&deck[3]==deck[4]&&deck[0]!=deck[2])
||(JokerNumer()==0&& deck[0]==deck[2] &&deck[2]==deck[3] &&deck[3]==deck[4]&&deck[0]!=deck[1])
||(JokerNumer()==0&& deck[1]==deck[2] &&deck[2]==deck[3] &&deck[3]==deck[4]&&deck[0]!=deck[1])
return true;
return false;
bool ShowHand::IsStraightFlush( )
(JokerNumer()==0&&Continu( 5) && deckS[0]==deckS[4] ) ||
(JokerNumer()==1&&Continu( 4) && deckS[0]==deckS[3] ) ||
(JokerNumer()==2&&Continu( 3) && deckS[0]==deckS[2] ) ||
(JokerNumer()==3&&Continu( 2) && deckS[0]==deckS[1] )
return true;
return false;
bool ShowHand::IsFiveOfKind( )
JokerNumer()==4
||(JokerNumer()==3 && deck[0]==deck[1] &&deck[1]==deck[2])
||(JokerNumer()==2 && deck[0]==deck[1] &&deck[1]==deck[2] &&deck[2]==deck[3])
||(JokerNumer()==1 && deck[0]==deck[1] &&deck[1]==deck[2] &&deck[2]==deck[3] &&deck[3]==deck[4])
return true;
return false;
bool ShowHand::IsFiveOfJokers()
if(JokerNumer()==5)
return true;
return false;
bool ShowHand::Continu(int n)
int count=0;
for (int i=0;i&n-1;i++)
if (deck[i]!=deck[i+1])
return false;
return true;
//对玩家的牌 排序
void ShowHand::SortCardValue()
deck.clear();
for(int i=0;i&5;i++)
deck.push_back(playerDeck[i].v);
sort(deck.begin(),deck.end() );
void ShowHand::SortCardSuit()
deckS.clear();
for(int i=0;i&5;i++)
deckS.push_back(playerDeck[i].s);
sort(deckS.begin(),deckS.end() );
//joker的数量
int ShowHand::JokerNumer()
int count=0;
while(i&=0)
if(deck[i]!=JOKER_V)
3 int _tmain(int argc, _TCHAR* argv[])
if(ch=='Y'||ch=='y')
sh.Init();
sh.Shuffle();
sh.ShowDeck();
sh.Deal();
sh.GetType();
else if(ch=='N'||ch=='n')
cout&&"input error"&&新浪广告共享计划>
广告共享计划
那一场华丽的SHOWHAND【解答部分下】
SHOWHANDHH7HH7SHOWHAND
HH7SHOWHANDHH7
HH7HH7HH7HH7HH7HH7
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。403 - 禁止访问: 访问被拒绝。
403 - 禁止访问: 访问被拒绝。
您无权使用所提供的凭据查看此目录或页面。

我要回帖

更多关于 hand in hand 的文章

 

随机推荐