我正在创建一个经典的蛇游戏,我需要将电路板从原始尺寸缩小到较小的电平板,因为电平增加,我目前得到的是我设法调整电路板的大小,但未使用的PictureBox仍然存在且无法删除它们。我在如何删除和调用使用新变量重新创建PictureBox的方法时遇到了麻烦。
真的很感激,如果有人可以帮我解决我在C#中删除/删除PictureBox的问题。以下是我的项目源代码的一些部分。查看整个源代码,可以直接向我索取。
这里放置了我的代码,用于重新创建/刷新电路板。
private void gotoNextLevel(int nextLevel)
{
mode = "REST";
mySnake = new Snake(mainBoard); //Brand new snake with length 1
apples = new Rewards(nextLevel, mainBoard); //<--- Generate 5 apples
}
以下是我为游戏制作棋盘的方法。
int maxRow = 10, maxCol = 20; //Max 10 rows, and 20 columns in the board
int squareSize = 30; //Each square is 30px by 30px
PictureBox[,] squares;
public Board(Form mainForm)
{
squares = new PictureBox[maxRow, maxCol];
for (int row = 0; row < maxRow; row++)
{
for (int col = 0; col < maxCol; col++)
{
squares[row, col] = new PictureBox();
squares[row, col].Location = new Point(col * squareSize, row * squareSize);
squares[row, col].Height = squareSize;
squares[row, col].Width = squareSize;
squares[row, col].SizeMode = PictureBoxSizeMode.StretchImage;
squares[row, col].BackColor = Color.DarkGray;
squares[row, col].BorderStyle = BorderStyle.FixedSingle;
mainForm.Controls["boardPanel"].Controls.Add(squares[row, col]);
}
}
mainForm.Controls["controlPanel"].Location = new Point(mainForm.Controls["boardPanel"].Location.X, mainForm.Controls["boardPanel"].Location.Y + mainForm.Controls["boardPanel"].Height + 20);
}
这是刷新方法。
private void refresh(Object myObject, EventArgs myEventArgs)
{
mySnake.move(mode); //Move the snake based on mode
modeLBL.Text = mode;
mainBoard.draw();
apples.draw(); //<----- draw apples
mySnake.draw();
//increment the duration by amount of time that has passed
//this method is called every speed millisecond
duration += speed;
timerLBL.Text = Convert.ToString(duration / 1000); //Show time passed
//Check if snke is biting itself. If so, call GameOver.
if (mySnake.checkEatItself() == true)
{
GameOver();
}
else if (apples.checkIFSnakeHeadEatApple( mySnake.getHeadPosition()) == true)
{
score += apples.eatAppleAtPostion(mySnake.getHeadPosition());
scoreLBL.Text = Convert.ToString(score);
if (apples.noMoreApples() == true)
{
clock.Stop();
level++;
levelLBL.Text = Convert.ToString(level);
gotoNextLevel(level);
MessageBox.Show("Press the start button to go to Level " + level, "Congrats");
}
else
{
//Length the snake and continue with the Game
mySnake.extendBody();
}
}
}
答案 0 :(得分:0)
首先:是Visual Studio本身生成的refresh()的签名吗?如果是这样,为什么不复制正文并将其放入没有参数的新方法中,因为显然你甚至不使用当前refresh()方法中的那些。
其次:如果你创建了这个新方法,你可以创建一个方法,首先清除控件,然后调用重绘。我认为它不会被重新绘制,因为它是一个来自控件的事件,因为你刚刚清除了所有控件,所以它永远不会被再次调用。
最后但并非最不重要:如果你有其他控件而不是PictureBox,但你只想删除PictureBox,你可以使用它:
var link = www.example.com/idontknowthelink& some?stuff; var splitLink = link.split('&'); console.log(splitLink[0] + splitLink[1]);