交换两个图片框

本文关键字:两个 交换 | 更新日期: 2023-09-27 18:28:39

我正试图用C#制作游戏2048,但我在移动瓦片时遇到了问题。

这是我保存瓷砖的地方:

picture = new PictureBox[4, 4] {
               {pic1,pic2,pic3,pic4},
               {pic5,pic6,pic7,pic8}, 
               {pic9,pic10,pic11,pic12}, 
               {pic13,pic14,pic15,pic16} };

当我按下"W"时,我会将其向上移动:

public void Up()
    {
        for (int i = 1; i < picture.GetLength(0); i++)
            for (int j = 0; j < picture.GetLength(1); j++)
                if(picture[i,j].Image!=null && picture[i-1,j].Image==null)
                {
                    picture[i - 1, j].Image = picture[i, j].Image;
                    picture[i, j].Image = null;           
                    Up();       
                }
    }

但该代码仅交换来自picturebox的图像,而不是picturebox本身。如何将图片框与图像及其所有属性进行交换?

交换两个图片框

C#中没有切换功能,因此您需要一个临时辅助变量。

由您决定要切换什么:

  • 数组中引用的pictureBoxes
  • 只是他们的位置
  • 他们的图像
  • 或任何组合

下面是一个简单的助手函数的例子,它交换引用及其位置:

void SwitchControls(PictureBox pb1, PictureBox pb2)
{
    PictureBox temp = pb1;
    Point tempLoc = pb1.Location;
    pb1 = pb2;
    pb2 = temp;
    pb1.Location = pb2.Location;
    pb2.Location = tempLoc ;
}

例如,你可以这样称呼它:

SwitchControls(picture[i - 1, j], picture[i, j]);

要交换图像,您需要将函数写为

void SwitchImages(PictureBox pb1, PictureBox pb2)
{
    Image temp = pb1.Image;
    pb1.Image = pb2.Image;
    pb2.Image = temp.Image;
}

等等。。