在Winforms中处理一副牌数量的问题

本文关键字:一副 问题 Winforms 处理 | 更新日期: 2023-09-27 17:55:55

我正在处理一副牌,如果用户点击一副牌(pictureBox1),一副牌的大小应该减少1,抽出的牌的图像应该显示在另一个PictureBox上。但是,当我运行调试器时,我看到虽然甲板大小为 4(这是正确的),但在 Form() 函数中,一旦我单击甲板 (pictureBox1),甲板大小就会变为 0。如何更改代码,以便在单击甲板时甲板大小为 4,然后减小到 3,依此类推?

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        this.Controls.Add(pictureBox1);
        Card Drill = new Card();
        Card Barrel = new Card();
        Card Cyber = new Card();
        Card Mobius = new Card();
        var KaibaDeck = new List<Card>() {Drill,Barrel,Cyber,Mobius};
        var KaibaHand = new List<Card>() { };
        Drill.Pic = Image.FromFile("C:/wamp/www/drillroid.jpg");
        Barrel.Pic = Image.FromFile("C:/wamp/www/barreldragon.jpg");
        Cyber.Pic = Image.FromFile("C:/wamp/www/cyberphoenix.jpg");
        Mobius.Pic = Image.FromFile("C:/wamp/www/Mobius.jpg");           
    }
    Card Drill = new Card();
    Card Barrel = new Card();
    Card Cyber = new Card();
    Card Mobius = new Card();
    List<Card> KaibaDeck = new List<Card>();
    static Card DrawForKaiba(List<Card> KaibaDeck)
    {
        int KaibaDeckSize = KaibaDeck.Count;
        KaibaDeckSize = KaibaDeck.Count;       
        Random random = new Random();
        int DrawKaiba = random.Next(0, 100) % KaibaDeckSize + 1;
        Card Drew = new Card();
        Drew = KaibaDeck[DrawKaiba - 1];
        KaibaDeck.Remove(KaibaDeck[DrawKaiba - 1]);
        return Drew;
    }
    private void pictureBox1_Click(object sender, EventArgs e)
    {
        Card Drew = new Card();
        Drew = DrawForKaiba(KaibaDeck);
        Image HandCard = Drew.Pic;
        PictureBox pb4 = new PictureBox();
        pb4.Location = new Point(22, 144);
        pb4.Image = HandCard;
        this.Controls.Add(pb4);
        pb4.BringToFront();
    }
}
class Card
{
    int attack;
    string name;
    Image HandCard;
    Image pic;
    public int Attack
    {
        get { return attack; }
        set { attack = value; }
    }
    public string Name
    {
        get { return name; }
        set { name = value; }
    }
    public Image Pic
    {
        set{
            Bitmap pic = new Bitmap(68, 106);
            using (Graphics gr = Graphics.FromImage(pic))
            {
            gr.SmoothingMode = SmoothingMode.HighQuality;
            gr.InterpolationMode = InterpolationMode.HighQualityBicubic;
            gr.PixelOffsetMode = PixelOffsetMode.HighQuality;
            gr.DrawImage(value, new Rectangle(0, 0, 68, 106));
            }
        }
        get
        {
            return pic;
        }
    }
}

在Winforms中处理一副牌数量的问题

也许,更改此行可以解决您的问题

  var KaibaDeck = new List<Card>() {Drill,Barrel,Cyber,Mobius};

将其更改为

  KaibaDeck = new List<Card>() {Drill,Barrel,Cyber,Mobius};

您正在初始化本地卡列表,而不是在表单级别声明的全局卡列表。
当然,您可以删除全局初始化并只保留变量声明

List<Card> KaibaDeck = null;