2013-05-14 224 views
0

我正在制作一款卡片游戏,其中创建了10张不同的卡片,我已在右侧的资源区域中将图片添加到程序中。我的卡结构如下:将图像添加到数组元素

public Form1() 
    { 
     cards = new PlayCard[10]; 
     cards[0] = new PlayCard("Harry", 97, 33, 40); 
     cards[1] = new PlayCard("Dave", 80, 91, 41); 
     cards[2] = new PlayCard("Randle", 90, 13, 45); 
     cards[3] = new PlayCard("Zach", 30, 98, 81); 
     cards[4] = new PlayCard("Shorty", 30, 89, 99); 
     cards[5] = new PlayCard("Matt", 75, 81, 72); 
     cards[6] = new PlayCard("Aaron", 89, 82, 80); 
     cards[7] = new PlayCard("Ryan", 25, 83, 71); 
     cards[8] = new PlayCard("Stephen", 96, 100, 100); 
     cards[9] = new PlayCard("David", 90, 37, 70); 

     InitializeComponent(); 
    } 

我不知道我是如何得到相应的图片显示了决心上卡显示

感谢

+0

我想你将不得不提供你使用哪个UI的更多细节(WinForms,WPF,Win8,HTML)。这将影响您存储图像参考的方式。 – 2013-05-14 08:45:48

+0

确实。您将不得不以某种方式加载纹理,然后将各个卡片引用给这些纹理。 – 2013-05-14 08:46:30

回答

2

使用ImageList。然后,您可以命名每个图像以符合您的名字。 ImageLists有一个很好的介绍,以及如何在运行时和设计时添加图像here

首先添加图像(在运行时显示):

imageList1.Images.Add("pic1", Image.FromFile("c:\\mypic.jpg")); 

从集合中删除图像:

imageList1.Images.RemoveAt(listBox1.SelectedIndex); 
imageList1.Images..RemoveByKey("pic1"); 

要访问图像,从图像采集得到的图像:

panel1.BackgroundImage = imageList1.Images["David"]; 

或适合您的阵列:

panel1.BackgroundImage = imageList1.Images[cards[i][0]]; 

我希望这有助于。


编辑。以解决上述不是面向对象的评论。代替使用ImageList,您可以将Image添加到PlayCard对象。还有一个选项可以使用Dictionary<string, Image>来处理这个映射,但是这也可以被解释为非OOP。

+0

它可以工作,但它确实不是面向对象的,它会无故加重资源管理的负担 - 您必须在两个集合中镜像添加/删除过程。 另外,如果他想重命名一张卡片,则必须去改变卡片的名称。 – 2013-05-14 08:52:31

0

将图像作为属性添加到您的PlayCard类中,然后为每个Playcard分配一个图像(最简单的方法 - 更改您的构造函数)。每个Playcard都会知道它的图像,所以很容易在现有的代码中实现它,而无需太多修改。