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

Posted

技术标签:

【中文标题】如何在纸牌游戏中实现花色?【英文标题】:How to implement suit in a Card Game? 【发布时间】:2020-06-05 04:35:30 【问题描述】:

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

最终输出应该是 0,4,2,1,3,5。

附:我不允许包含<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] << " ";

【问题讨论】:

用一个类来描述一张卡片。 一个简单的经验法则是问题描述中的名词成为代码中的类。所以你真的需要一个Card 类,甚至是一个简单的Card 结构。这意味着您的等级和花色是配对的,因此您不得不将它们排序在一起。这不是库的问题,而是简单的程序设计问题。 类似:***.com/questions/5257801/… 这能回答你的问题吗? Implementing a Deck of Cards in C++ @ywsoliman,请看我的回答。更新了相应排序的索引、排名和西装。如果它解决了您的用例,请点赞并接受 【参考方案1】:

这个问题可以通过使用 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;
    

输出:

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。

【讨论】:

以上是关于如何在纸牌游戏中实现花色?的主要内容,如果未能解决你的问题,请参考以下文章

如何在微信小游戏制作工具中实现递归函数

这个程序员是如何在游戏中实现这个计算器的?

如何在我的 Sprite Kit 游戏应用中实现 Facebook 和 Twitter 发布?

如何在Unity中实现射线判断鼠标所点击的2D游戏对象?

在Java游戏中实现声音

如何在 GameMaker:Studio 1 中实现 3D 低分辨率效果