添加卡片图片C#

问题描述:

我的任务是在C#中为我的最终项目创建BlackJack。 C#对我来说相当陌生,所以我无法将图像分配到我的卡片上。现在我有一个卡类:添加卡片图片C#

public class Card 
{ 
    private string face; 
    private string suit; 

    public Card(string cardFace, string cardSuit) 
    { 
     face = cardFace; 
     suit = cardSuit; 
    } 

    public override string ToString() 
    { 
     return face + " of " + suit; 
    } 
} 

而且我有甲板类:

public class Deck 
{ 
    private Card[] deck; 
    private int currentCard; 
    private const int NUMBER_OF_CARDS = 52; 
    private Random ranNum; 

    public Deck() 
    { 
     string[] faces = { "Ace", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Jack", "Queen", "King" }; 
     string[] suits = { "Hearts", "Clubs", "Diamonds", "Spades" };   

     deck = new Card[NUMBER_OF_CARDS]; 
     currentCard = 0; 
     ranNum = new Random(); 
     for (int count = 0; count < deck.Length; count++) 
      deck[count] = new Card(faces[count % 13], suits[count/13]); 
    } 

    public void Shuffle() 
    { 
     currentCard = 0; 
     for (int first = 0; first < deck.Length; first++) 
     { 
      int second = ranNum.Next(NUMBER_OF_CARDS); 
      Card temp = deck[first]; 
      deck[first] = deck[second]; 
      deck[second] = temp; 
     } 
    } 

    public Card DealCard() 
    { 
     if (currentCard < deck.Length) 
      return deck[currentCard++]; 
     else 
      return null; 
    } 
} 

最后,我有两个按钮,只需交易卡和洗牌甲板用一个简单的Windows窗体这表明,在处理当前卡的字符串标签:

public partial class Form1 : Form 
{ 
    Deck deck = new Deck(); 

    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 
    } 

    private void buttonDeal_Click(object sender, EventArgs e) 
    { 
     Card card = deck.DealCard(); 
     labelOutput.Text = card.ToString(); 
    } 

    private void buttonShuffle_Click(object sender, EventArgs e) 
    { 
     deck.Shuffle(); 
    } 
} 

现在,我只是需要一些方法来分配图像到我的卡,我不知道该如何..任何帮助将是不胜感激。

编辑:这是我一直试图在我的卡类。

public static Image FromFile() 
    { 

     fileName = face + "_" + "of" + "_" +suit+".png"; 
     Image image = Image.FromFile(fileName); 
     return image; 
    } 

我有一个错误,说资源没有fileName的定义。

我已经将所有图像作为资源添加到项目中,并将约定为simliar的所有文件命名为“Eight_of_Clubs”。

编辑:我已经在我的Windows窗体改变了这个:

private void buttonDeal_Click(object sender, EventArgs e) 
    { 
     Card card = deck.DealCard(); 
     string fileName = card.getFace() + "_" + "of" + "_" + card.getSuit() + ".png"; 

     Image image = Image.FromFile(fileName); 
     pictureBox1.Image = image; 
     labelOutput.Text = card.ToString(); 
    } 

但是当我运行该程序,并单击按钮交易我得到的错误: File does not exist exception

哪个是假的,因为有是一个用此项目名为King_of_Spades.png的资源加载的文件

+2

字面上有一个名为'Image'的类。你有谷歌搜索* C#窗体窗体图像*或类似的东西?数以百万计的结果...为什么要打扰? –

+0

因为我需要根据什么卡画出来生成图像。是的,我看到如何手动添加图片到图片框,但这不会有帮助。 – JoeRamDo

+0

当你说生成,你真的想自己构建图像,还是你想从文件中拉它? –

将图像添加到程序集资源时,它不作为磁盘上的文件存在。相反,它作为生成的二进制数据存在。因此,如果您不使用二进制文件部署文件,而是将它们作为资源添加,它们将不会作为部署环境中的文件存在,因此Image.FromFile将无法​​工作。

您可以通过以下两种方式解决这个问题:1)部署文件,将其设置为IDE中文件的属性以便始终复制。所以当生成二进制文件时,它们将被复制到目标文件夹。 2)由于它们已经是资源,所以从那里加载它们而不是从文件加载它们。

请参阅Load image from resources area of project in C#