2015-12-02 128 views
-2

我的任務是在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

當你說生成,你真的想自己構建圖像,還是你想從文件中拉它? –

回答

0

將圖像添加到程序集資源時,它不作爲磁盤上的文件存在。相反,它作爲生成的二進制數據存在。因此,如果您不使用二進制文件部署文件,而是將它們作爲資源添加,它們將不會作爲部署環境中的文件存在,因此Image.FromFile將無法​​工作。

您可以通過以下兩種方式解決這個問題:1)部署文件,將其設置爲IDE中文件的屬性以便始終複製。所以當生成二進制文件時,它們將被複制到目標文件夾。 2)由於它們已經是資源,所以從那裏加載它們而不是從文件加載它們。

請參閱Load image from resources area of project in C#