根据条件C#从数组中选择

时间:2015-04-30 00:42:21

标签: c# arrays random

我现在正在C#开发一个基本的扑克游戏(得克萨斯举行' em)。我把面孔和西装分成了枚举,如:

public enum Face { Ace, Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten, Jack, Queen, King }

public enum Suit { Clubs, Spades, Hearts, Diamonds }

然后我生成一个字符串用于调试目的来测试生成。

string[] Faces = Enum.GetNames(typeof (Face));
string[] Suits = Enum.GetNames(typeof (Suit));

int r3 = rnd.Next(Faces.Length);
int r4 = rnd.Next(Suits.Length);

string currentCard = string.Format("{0} of {1}", Faces[r3], Suits[r4]);

这将生成一个随机字符串,例如" Six of Diamonds"

用于"生成"的可视化卡片,我已将卡片中每张卡片的几张图像加载到资源中,并将这些图像加载到像这样的图像数组中(为了杂乱的目的而缩短):

Image[] cardArray = { 
                      Resources._10_of_clubs, 
                      Resources._10_of_diamonds,
                      Resources._10_of_hearts,
                      Resources._10_of_spades,
                      Resources._2_of_clubs,
                      etc...
};

是否可以根据上面的面部和套装组合创建的生成环境从阵列中选择特定图像?所以如果"钻石之六"要生成,程序将进入阵列并挑选出六颗钻石资源。对不起,如果这有点问。即使推进正确的方向也会受到赞赏。

4 个答案:

答案 0 :(得分:1)

Enums基于整数。设置图像以按顺序匹配卡,然后执行

var myCard =  cardArray[(int)Three];

由于卡片上有套装,请将套装的枚举值作为其位置的偏移量,例如

public enum Suit { Clubs = 0, Spades=13, Hearts=26, Diamonds=39 }

然后把它们放在一起

var myCard =  cardArray[(int)Three + (int)Hearts];

答案 1 :(得分:0)

将您的图片存储在Dictionary<String, Image> String,其中Image(作为关键字)将是“钻石之六”,而Dictionary将是6钻石的资源图像。使用此格式将所有图像放入此Dictionary。然后,您从Image imageToDisplay = cardDictionary[cardName]; 获取图像的用法将如下所示。

cardName

npm将是一个包含“Six of Diamonds”的字符串或您希望显示的任何名称。

答案 2 :(得分:0)

我可能会创建一个Card类,并为Suit,Number和Image赋予它属性。完成后,您可以通过创建卡片对象集合来设置卡片资源,然后使用LINQ选择符合您要查找的条件的卡片。

答案 3 :(得分:0)

您的数组没有关于项目原始名称/来源的信息,因此您将无法在数组中查找元素。如果仔细构造数组,您可以基于face和suite 计算索引:

cardArray = {r_Ace_Clubs, ... r_King_Clubs, r_Ace_Spades...};
arrayIndex = suite * (int)Face.MaxElement + (int)face; // assuming MaxElement = King
当您需要查找时,

Dictionary<T,U>通常是更好的选择。您可以使用anonyous类型的new {Face=face, Suite=suite}作为键,将图像作为值。