1

另一个经典的纸牌/扑克游戏问题;我正在用随机卡(用户,计算机)填充两只手。现在我们只是比较两只手,并将手的枚举/排名值相加并进行比较。我让它正确显示,我认为我的逻辑是正确的,但我只是不太了解铸造,特别是在涉及枚举时。排名在枚举中建立(deuce = 2 等)。SuperCard 父类已将等级的设置属性设置为 cardsRank

继承人 SuperCard 类:

public abstract class SuperCard
{
    #region Properties

    public Rank cardsRank { get; set; }
    public abstract Suit cardSuit { get; }

    #endregion

    public abstract void Draw();
}

这是主程序:

CardLibrary.CardSet myDeck = new CardLibrary.CardSet(); // create deck of 52 cards
int howManyCards = 5;
int balance = 10;
Console.ForegroundColor = ConsoleColor.Yellow;
Console.BackgroundColor = ConsoleColor.DarkBlue;

Console.WriteLine("Welcome to NewPoker! \nYou get $10 to start. Each bet is $1"); // intro and rules

while (balance != 0)
{
    SuperCard[] computerHand = myDeck.GetCards(howManyCards); // create two hands, user/comp
    SuperCard[] myHand = myDeck.GetCards(howManyCards);
    DrawHands(computerHand, myHand); // call hands
    Console.ReadLine();
    bool won = CompareHands(computerHand, myHand);
    if (won)
    {
        Console.WriteLine("You win this hand! Your balance is {0}", balance.ToString("C"));
        balance++;
        Console.WriteLine("Press enter to play the next hand");
        Console.ReadLine();
    }
    if (!won)
    {
        Console.WriteLine("The dealer wins this hand! Your balance is {0}", balance.ToString("C"));
        balance--;
        if (balance > 0)
        {
            Console.WriteLine("Press enter to play the next hand");
            Console.ReadLine();
        }
    }
}

这是 CompareHands 方法:

public bool CompareHands(SuperCard[] compHand, SuperCard[] userHand)
{
    int compTotal = 0, userTotal = 0;
    foreach (var item in compHand)
    {
        //cast enum rank to int, add?
    }
    foreach (var item in userHand)
    {
        //cast enum rank to int, add?
    }
    if (userTotal > compTotal)
    {
        return true;
    }
    else
        return false;
}

在我看来,我认为需要一个foreach循环来循环每个循环,将item.cardsRank(在 SuperClass 中为Rank枚举设置属性)转换为 int(我不确定如何),然后将该值添加到运行总计(userTotal, compTotal),然后比较它们的返回值,因为我们在程序“won”中调用 bool。非常感谢任何提示或指导!

4

2 回答 2

0

要获得 int 值,您所要做的就是强制转换。

void Main()
{
var rank = Rank.Two;
Console.Write((int)rank);
}

public enum Rank
{
None,
One = 1,
Two = 2
}

例如,这将打印 2。枚举将初始化为零,所以我会在那里粘贴一个“无”值。

于 2013-11-12T02:33:52.217 回答
0

您要查找的内容称为“枚举基础类型”。基本上,您指定可以代表您的枚举值的值。

您可以使用任何整数常量。对于所有 C# 整数类型,请导航到MSDNint当你说的时候,默认是这样

public enum Rank 
{
    Value1,
    Value2
}

编译器将其视为

public enum Rank : int
{
    Value1 = 0,
    Value2 = 1
}

默认情况下,它从第一个项目的 0 开始,并按顺序递增。但你不必遵守它。您不必将任何值设置为 0。当您需要从代码中获取基础值时,只需调用

int rank = (int)Rank.Value1;

并替换(int)为您正在使用的类型。你也可以倒着做。

Rank rank = (Rank)1;

但请记住

可以将任意整数值分配给排名。例如,这行代码不会产生错误:rank = (Rank) 42。但是,您不应该这样做,因为隐含的期望是枚举变量将只保存枚举定义的值之一。将任意值分配给枚举类型的变量会带来很高的错误风险。来自 MSDN

于 2013-11-12T07:19:38.713 回答