如何在单击图片框后使类中的变量输出到标签

本文关键字:变量 输出 标签 单击 | 更新日期: 2023-09-27 17:56:35

我对OOP相当陌生,不确定如何在我的程序中实现某些东西。我的程序与打鼹鼠非常相似,并且有一个带有图像的图片框数组,并且怪物的图像在应用时间间隔的图片框之间随机移动,或者每当用户点击怪物时,就会移动到一个新的随机图片框及时。我创建了一个怪物和一个玩家子类来尝试将一些 OOP 概念添加到程序中,但不确定如何实现我想要的。基本上,我的主窗体上有一个分数标签,在我的动物类中有一个带有值的分数变量。我希望当用户单击带有痣的图片框时,能够从表单上的标签中添加分数值,并在他们未及时单击标签时从标签中删除分数值。

这是我的代码:

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        PictureBox[] boxes;
        int initialscore = 0;
        int time = 0;
        int randPos;
        public Form1()
        {
            InitializeComponent();
        }
        private void boxes_MouseClick(object sender, MouseEventArgs e)
        {
            PictureBox pb2 = new PictureBox() { Image = Image.FromFile("sword2.png") };
            this.Cursor = new Cursor(((Bitmap)pb2.Image).GetHicon());
            for (int x = 0; x < 27; x++)
            {
                if (sender.Equals(boxes[x]))
                {
                    Image grass = Image.FromFile("swamp.png");
                    PictureBox temp = (PictureBox)sender;
                    temp.Image = grass;
                }
                if (sender.Equals(boxes[x]))
                {
                PictureBox pb = (PictureBox)sender;
                if (pb.Tag == "skeleton.png")
                initialscore++;
                }

            }
            label1.Text = " Score: " +initialscore.ToString();  
        }
        public void timer1_Tick(object sender, EventArgs e)
        {
            boxes[randPos].Image = Image.FromFile("swamp.png"); 
            boxes[randPos].Tag = "swamp.png"; 
            Random r = new Random();
            randPos=r.Next(0, 27);
            boxes[randPos].Image = Image.FromFile("skeleton.png"); 
            boxes[randPos].Tag = "skeleton.png";
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            boxes = new PictureBox[27];
            int top = 100; 
            int left = 100; 
            for (int x = 0; x < 27; x++)
            {
                boxes[x] = new PictureBox();
                boxes[x].Image = Image.FromFile("swamp.png");
                boxes[x].Height = 100;
                boxes[x].Width = 100;
                if (x % 9 == 0)
                {
                    top += 120;
                    left = 120;
                }
                else
                    left += 120;
                boxes[x].Top = top;
                boxes[x].Left = (50 + left);
                Controls.Add(boxes[x]);
                this.boxes[x].MouseClick += new
                System.Windows.Forms.MouseEventHandler(this.boxes_MouseClick);
                label1.Text = " Score: " + initialscore.ToString();
                label2.Text = " Time: " + time.ToString();
        }
    }

}

namespace WindowsFormsApplication1
{
    class Monster
    {
        protected int score;
        public Monster()
        {
            score = 10;
        }
    }
} 
namespace WindowsFormsApplication1
{
    class Player:Monster
    {
    }
}

玩家类中尚未添加任何内容。

我需要添加或更改什么才能在点击移动图像时获得初始分数以改变怪物类中的分数值?

如何在单击图片框后使类中的变量输出到标签

要统一分数的更新/递增和可视化,您应该将其提取到一种方法中:

public void incrementScore(int increment)
{
  initialscore += increment;
  label1.Text = " Score: " + initialscore.ToString();
}

在Form1_Load中,您这样称呼它:

incrementScore(0);

对于点击怪物,您有不同的可能性:如果所有怪物都有相同的点,你可以让它成为怪物类中的静态变量。

protected static int Score = 10;

这允许您在 boxes_MouseClick 事件处理程序中使用它:

incrementScore(Monster.Score);

如果所有怪物都有另一个值,您必须将 score 变量作为实例变量,以某种方式识别您单击的怪物类的实例并使用此值递增