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