C# 数组中的项,将枚举和强制转换为int相加
另一个经典的纸牌/扑克游戏问题;我用随机卡片(用户、计算机)填充双手。现在,我们只是比较这两个指针,将指针的enum/rank值相加并进行比较。我正确地显示了它,并且我认为我的逻辑是正确的,但我只是不太理解强制转换,尤其是当涉及枚举时。在枚举中建立秩(平分=2等)。超级卡片父类已将等级的get set属性设置为CardsBank 这是超级卡片类:C# 数组中的项,将枚举和强制转换为int相加,c#,casting,enums,boolean,C#,Casting,Enums,Boolean,另一个经典的纸牌/扑克游戏问题;我用随机卡片(用户、计算机)填充双手。现在,我们只是比较这两个指针,将指针的enum/rank值相加并进行比较。我正确地显示了它,并且我认为我的逻辑是正确的,但我只是不太理解强制转换,尤其是当涉及枚举时。在枚举中建立秩(平分=2等)。超级卡片父类已将等级的get set属性设置为CardsBank 这是超级卡片类: public abstract class SuperCard { #region Properties public Rank c
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
(在Rank
enum的超类中获取set属性)转换为一个int(我不确定如何),然后将该值添加到运行总数(userTotal
,compTotal
),然后比较它们的返回值,因为我们在程序中调用bool“won”。非常感谢任何提示或指导 获得int值所需做的就是强制转换
void Main()
{
var rank = Rank.Two;
Console.Write((int)rank);
}
public enum Rank
{
None,
One = 1,
Two = 2
}
例如,这将打印2。枚举将初始化为零,因此我将在那里保留一个“none”值。您要查找的是所谓的“枚举基础类型”。基本上,您可以指定可以表示枚举值的值 可以使用任何积分常数。对于所有C#integral类型,请导航到。默认值为
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
虽然我做的并不完全一样,但这帮助我理解了我想怎么做,并找到了答案。非常感谢。