C# 交换两个图片盒
我正在尝试用C#制作游戏2048,但我在移动瓷砖时遇到了一个问题 我把瓷砖放在这里:C# 交换两个图片盒,c#,.net,c#-4.0,C#,.net,C# 4.0,我正在尝试用C#制作游戏2048,但我在移动瓷砖时遇到了一个问题 我把瓷砖放在这里: picture = new PictureBox[4, 4] { {pic1,pic2,pic3,pic4}, {pic5,pic6,pic7,pic8}, {pic9,pic10,pic11,pic12}, {pic13,pic14,pic15,pic16} }; 当我按下“W”键时,
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();
}
}
public作废()
{
for(inti=1;i
但该代码仅交换picturebox中的图像,而不是picturebox本身。如何将picturebox与image及其所有属性交换?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;
}
等等为什么在图片框内交换
图像
s不够?如果您想移动图片框,则需要修改图片框
的位置
属性。当我尝试制作两个分幅的总和时,我需要精确的索引,如果我只更改图像,索引将保留到初始位置,则需要更好的“地图”数据格式除了二维数组的PictureBox
es之外,很难判断PictureBox的价值(即使是反射和依赖变量的名称,如果你考虑过的话)。例如,您可以使用int
s的二维数组。并对其进行操作<代码>变量映射=新的int[4,4]={{{1,1,1,0},…..}代码>关于“交换”:了解如何使用反射克隆控件。您只需使用一个helper PictureBox变量,然后使用三个赋值进行编码:ph=p1;p1=p2;p2=ph代码>我尝试过,但失败了,你能给我一个更明确的代码吗?请注意,这不会切换GUI中的任何图像或任何东西,它只是交换这些变量所指向的PictureBox
es(即切换引用)。不确定您希望这段代码为您做什么。如前所述,根据您希望发生的事情调整代码是您的责任。我添加了一个用于交换图像的变体。请注意,我们没有看到您的所有代码,因此PictureBoxes中可能还有其他感兴趣的属性。您还可以将第一个版本与另外更改位置相结合,以获得相同的视觉效果。。我已经扩展到第一个版本这样做!