繁体   English   中英

如何在纸牌游戏中实现花色?

[英]How to implement suit in a Card Game?

两名玩家正在玩纸牌游戏。 每张牌由等级(从 1 到 13)和花色(S、H、C 或 D)组成。 对于任意两张牌,等级较高的牌被认为价值较高。 如果他们具有相同的等级,则具有更好花色的卡被认为具有更高的价值。 花色'S'优于花色'H',后者优于花色'C',后者优于花色'D'。 输入永远不会包含两张具有相同点数和花色的牌。 output 数组必须包含从高值到低值排序的卡片索引。 我能够 output 索引,但我无法将西装数组实现到代码中。

最终的 output 应该是 {0,4,2,1,3,5}。

PS 我不允许包含除<iostream>以外的任何库。 谢谢你。

#include <iostream>

using namespace std;

int main()
{
    int n = 6;
    int output[6] ;
    int count = 0, max = 0, index;
    int rank[] = {10,7,7,4,10,4};
    char suit[] = {'S','D','C','C','H','D'};
    for(int i=0 ; i< n ; i++)
    {
        for(int j = 0 ; j < n ; j++)
        {
            if (rank[j] > max)
            {
                max = rank[j];
                index = j;
            }
        }
        output[count]= index;
        count++;
        rank[index]=0;
        max=0;
    }
    for(int i=0 ; i<n ; i++)
        cout<<output[i] << " ";
}

这个问题可以通过使用 class 或 C++ 中的结构并实现自定义自定义排序功能来解决。

看看下面的代码:

#include <iostream>
using namespace std;

typedef struct card{

    int rank;
    char suit;
    int index;

}card;

void swap(card *xp, card *yp)  
{  
    card temp = *xp;  
    *xp = *yp;  
    *yp = temp;  
}

bool compare(card c1, card c2){

        if(c1.suit=='S' && (c2.suit=='H' || c2.suit=='C' || c2.suit=='D')){

            return true;

        }else if(c1.suit=='H' && (c2.suit=='C' || c2.suit=='D')){

            return true;
        }else if(c1.suit=='C' && (c2.suit=='D')){

            return true;

        }else if(c1.suit == c2.suit){

            if(c1.rank > c2.rank){
                return true;
            }
        }
        return false;
    }

int main()
{
    const int n = 6;
    card arr[n];

    int rank[] = {10,7,7,4,10,4};
    char suit[] = {'S','D','C','C','H','D'};
    for(int i=0 ; i< n ; i++)
    {
        arr[i].rank = rank[i];
        arr[i].suit = suit[i];
        arr[i].index = i;
    }

    for (int i = 0; i < n-1; i++) 
    { 
        bool swapped = false; 
        for (int j = 0; j < n-i-1; j++) 
        { 
            if (compare(arr[j+1], arr[j])) 
            { 
                swap(&arr[j], &arr[j+1]); 
                swapped = true; 
            } 
        } 

        if (swapped == false) 
            break; 
}

    for(int i=0 ; i<n ; i++){
        cout<<"Index: "<<arr[i].index<<" Suit: "<<arr[i].suit<<" Rank:"<<arr[i].rank<<endl;
    }
}

Output:

Index: 0 Suit: S Rank:10
Index: 4 Suit: H Rank:10
Index: 2 Suit: C Rank:7
Index: 3 Suit: C Rank:4
Index: 1 Suit: D Rank:7
Index: 5 Suit: D Rank:4

PS:索引的正确顺序应该是{0, 4, 2, 3, 1, 5}。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM