所以我必须基本上将卡的等级和套装编码为单个整数值。所以,例如,我必须让它说“七心”而不仅仅是“7”进入我正在制作的纸牌游戏中。
enum Suit {Hearts, Diamonds, Clubs, Spades};
enum Rank {A, K, Q, J, _10, _9, _8, _7, _6, _5, _4, _3, _2};
所以我现在有了。我只是将它们放入枚举中。我不确定它是否会起作用。我怎么会以某种方式基本上将这两个字符串组合成一个整数值?所以,我需要做到这一点,所以它说“七心”。我需要一个for循环来组合它们吗?
答案 0 :(得分:0)
首先,没有必要。你不会通过组合成一个整数来节省很多空间。 只需创建一个表示卡片的结构:
struct card {
Suit m_suit;
Rank m_rank;
};
如果你真的想要组合成一个整数(或者只是为了学习如何操作),你可以使用一个整数的低16位来存储套装,并使用高16位的等级。这假设int当然是32位:
int card_from_rank_and_suit(Suit suit, Rank rank)
{
return ((int)suit) & ((int)rank << 16);
}
并回读套装和等级值: 西装suit_from_card(int card) { return(Suit)(card&amp; 0x0000ffff); }
Rank rank_from_card(int card)
{
return (Rank) ((card & 0xffff0000) >> 16);
}
答案 1 :(得分:0)
您可以在int中使用不同的位位置来表示2个部分。例如,您可以使低2位为套装,其余位为卡值。从名为cardValue
的整数参数中获取完整卡名的函数可能包含以下内容:
Suit theSuit = cardValue & 0x03;
Rank theRank = cardValue >> 2;
答案 2 :(得分:0)
你可以用单个字节来完成。由于Rank有四种可能性,卡有13种可能性:例如
为Rank和。保留字节中的第一个半字节 为卡片保留第二个半字节。
Say: 0x1 << 0 = Hearts,
0x1 << 1 = Diamonds,
0x1 << 2 = Clubs,
0x1 << 3 = Spades.
Card的第二个半字节:由于有13种可能性,用数字表示从0x0到0xD。
For example:
ox1 = A, o2 = 2, ox3 = 3, and so on.
如此完整的图片看起来像是:
For Seven of heart: 0001, 0111(0x17)
For Three of Diamonds: 0010, 0011(0x23)