【问题标题】:Adding Card Images C#添加卡片图像 C#
【发布时间】:2015-12-02 20:30:24
【问题描述】:

我的任务是为我的最终项目用 C# 创建 BlackJack。 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();
    }
}

现在,我只需要一些方法将图像分配给我的卡片,但我不确定如何......任何帮助将不胜感激。

编辑:这是我在 Card 课程中一直在尝试的内容。

   public static Image FromFile()
    {

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

我有一个错误说资源没有文件名的定义。

我已将所有图像作为资源添加到项目中,并使用类似于“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 的文件

【问题讨论】:

  • 确实有一个类叫做Image。您是否在 Google 上搜索过 C# windows forms images 或类似的东西?数以百万计的结果......为什么还要问?
  • 因为我需要根据绘制的卡片生成图像。是的,我知道如何手动将图像添加到图片框,但这没有用。
  • 当你说生成时,你是真的想自己构建图像,还是想从文件中提取它?
  • 这正是我要推荐的。然后您可以使用Image.FromFile() 拉取图像。
  • 我一直在尝试,但一直遇到问题。我会进行编辑并告诉你我在哪里。

标签: c# image playing-cards


【解决方案1】:

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

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

Load image from resources area of project in C#

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-23
    • 1970-01-01
    • 1970-01-01
    • 2016-01-07
    • 2020-08-09
    • 2020-12-18
    相关资源
    最近更新 更多