数组中的项目,采用枚举和转换为int来加起来

时间:2013-11-12 02:12:06

标签: c# casting enums boolean

另一个经典牌/扑克游戏问题;我用随机卡(用户,电脑)填充两只手。现在我们只是比较两只手并将手的枚举/等级值加起来并进行比较。我有正确的显示,我认为我的逻辑是正确的,但我只是不理解演员,特别是当它涉及到枚举。秩在枚举中建立(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枚举获取set属性)转换为int(其中我不确定如何),然后将该值添加到运行总计(userTotalcompTotal),然后将它们作为返回值进行比较,因为我们在程序“won”中调用bool。非常感谢任何提示或指导!

2 个答案:

答案 0 :(得分:0)

你需要做的就是获得int值。

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

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

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

答案 1 :(得分:0)

您正在寻找的是" Enum底层类型"。基本上,您可以指定可以表示枚举值的值。

您可以使用任何积分常数。对于所有C#整数类型,导航到MSDN。默认为int,所以当你说

public enum Rank 
{
    Value1,
    Value2
}

编译器将其视为

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

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

int rank = (int)Rank.Value1;

并将(int)替换为您使用的类型。你也可以倒退。

Rank rank = (Rank)1;

但请记住

  

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