扑克牌游戏

Bryan和Neo在玩扑克游戏, 游戏的玩法是两人从一副没有大小王的扑克牌中各抽三张牌比大小。牌的大小关系为2<3<4<…9<10<J<Q<K<A。每个人的三张牌有如下4种类型:

    1. 三张一样的牌,如(A A A)、(2 2 2)

    2. 点数连续的三张牌, 如(2 3 4)、(10 J Q),但(A 2 3)不是。

    3. 一个对带一张,如(2 2 3)、(10 10 Q)。

    4. 三张不一样的牌,如(A 2 3)、(10 9 7),但(10 9 8)算在第2种类型。

比较大小的规则如下:

    1. 若两人牌的类型不同:类型1>类型2>类型3>类型4。

    2. 同为类型1:两人任意出一张,比较点数,点数大者胜。

    3. 同为类型2:两人比较最大的牌的点数,点数大者胜。

    4. 同为类型3:两人先比较一对的点数,若相同,再比较单张的点数,点数大者胜。

    5. 同为类型4:两人相比较最大的点数,若相同,再比较次大的点数,若相同,最后比较最小的点数,点数大者胜。

比较的结果有3种:胜、负、平。现在给出Bryan和Neo各自的三张牌,若Bryan胜,输出win,若Neo胜,输出lose,如果平局,输出draw。

上代码:

  1 #include <iostream>
  2 #include <map>
  3 #include <algorithm>
  4 using namespace std;
  5 
  6 int Type(int arr1[])
  7 {
  8     if( (arr1[0]==arr1[1]) && arr1[1]==arr1[2] )
  9         return 1;
 10     else if( ( (arr1[0]+1)==arr1[1] ) && (arr1[1]+1==arr1[2]) )
 11         return 2;
 12     else if( (arr1[0]==arr1[1]) || (arr1[1]==arr1[2]) )
 13         return 3;
 14     else
 15         return 4;
 16     
 17 }
 18 
 19 int r_help(int a[])
 20 {
 21     int temp;
 22     if(a[0]==a[1])
 23         temp= a[2];
 24     else
 25         temp= a[0];
 26     return temp;
 27 }
 28 
 29 void cardCompare(int array1[],int array2[])
 30 {
 31     if(Type(array1)==1)
 32     {
 33         if(Type(array2)==1)
 34         {
 35             if(array1[0]>array2[0])
 36                 cout<< "C1 win " << endl;
 37             else if(array1[0]<array2[0])
 38                 cout<< "C1 lose " << endl;
 39         }
 40         else
 41             cout<< "C1 win " << endl;
 42     }
 43     if(Type(array1)==2)
 44     {
 45         if(Type(array2)==1)
 46             cout<< "C1 lose " << endl;
 47         else if(Type(array2)==2)
 48         {
 49             if(array1[0]==array2[0])
 50                 cout<< "Draw " << endl;
 51             if(array1[2]>array1[2])
 52                 cout<< "C1 win " << endl;
 53             if(array1[2]<array2[2])
 54                 cout<< "C1 lose " << endl;
 55         }
 56         else
 57             cout<< "C1 win " << endl;
 58     }
 59     if(Type(array1)==3)
 60     {
 61         if(Type(array2)==1 || Type(array2)==2)
 62             cout<< "C1 lose " << endl;
 63         else
 64             if(Type(array2)==3)
 65             {
 66                 if(array1[1]>array2[1])
 67                     cout<< "C1 win " << endl;
 68                 else if(array1[1]<array2[1])
 69                     cout<< "C1 lose " << endl;
 70                 else 
 71                 {
 72                    if(r_help(array1)>r_help(array2))
 73                        cout<< "draw "  << endl;
 74                    else if(r_help(array1)<r_help(array2))
 75                        cout<< "C1 lose " << endl;
 76                    else 
 77                        cout<< "Draw " << endl;
 78                 }
 79             }
 80     }
 81     if(Type(array1)==4)
 82     {
 83         if(Type(array2)==1 || Type(array2)==2 || Type(array2)==3)
 84             cout<< "C1 lose " << endl;
 85         else
 86         {
 87             if(array1[2]>array2[2])
 88                 cout<< "C1 win " << endl;
 89             else if(array1[2]<array2[2])
 90                 cout<< "C1 lose " << endl;
 91             else
 92             {
 93                 if(array1[1]>array2[1])
 94                     cout<< "C1 win " << endl;
 95                 else if(array1[1]<array2[1])
 96                     cout<< "C1 lose " << endl;
 97                 else
 98                 {
 99                     if(array1[0]>array2[0])
100                         cout<< "C1 win " << endl;
101                     else if(array1[0]<array2[0])
102                         cout<< "C1 lose " <<endl;
103                     else
104                         cout<< "Draw " <<endl;
105                 }
106             }
107         }
108     }
109 }
110 
111             
112 
113 int main()
114 {
115     char card[]={'2', '3', '4', '5','6','7','8','9','10','J','Q','K','A'};
116     map<char,int> cardm;
117     for(int i=0;i<13;i++)
118     {
119         cardm[card[i]] = i;
120     }
121     char card1[3];
122     char card2[3];
123     int arra[3];
124     int arrb[3];
125     int n;
126     cin>> n;
127     while(n--)
128     {
129         for(int i=0;i<3;i++)
130         {
131             cin>> card1[i];
132             arra[i] = cardm[card1[i]];
133         }
134         for(int j=0;j<3;j++)
135         {
136             cin>> card2[j];
137             arrb[j] = cardm[card2[j]];
138         }
139         sort(arra, arra+3);
140         sort(arrb, arrb+3);
141         cardCompare(arra, arrb);
142     }
143     return 0;
144 }
145     

程序运行结果:

 小结一下:

用到了STL泛型,头文件<algorithm> <map>

关键是找到除大小王之外的剩余扑克牌的存储方式--->

char card[]={'2', '3', '4', '5','6','7','8','9','10','J','Q','K','A'};

用map<char, int> 对每个扑克牌字符 进行映射为int型的0,1,2,3,4,5,6,7,8,9,10,11,12

 

 

转载于:https://www.cnblogs.com/sjlove/p/3148051.html

评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符 “速评一下”
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页