使用动态名称声明 Class 的实例

Declare Instance of Class with Dynamic Name

所以我创建了一个名为 SnakeItem 的 Class,我想在蛇长大时创建一个新的蛇项目实例,它们遵循 snake_Piece_[NUMBER] 的命名约定。已经有 snake_Piece_0,我想在代码中声明一个新实例。不知道怎么写...

SnakeItem snake_Piece_0;
public game_Window()
{
    InitializeComponent();
    snake_Piece_0 = new SnakeItem(Resource1.Black, 0, 0);
}

然后在这个函数中,我要创建它。 (在 snake_length++: 之后)我需要命名以递增,以便它遵循 snake_length 变量。即如果 snake_length = 1 那么它将创建一个名称为 snake_Piece_1.

的片段
 private void fruit_Collision()
 {
    if (snake_Piece_0.Top == Fruit_Item.Top && snake_Piece_0.Left == Fruit_Item.Left)
    {
       snake_Length++;
    }
  }

我不确定我能说什么,如果不可能的话,我必须事先申报所有 400 条蛇碎片,这是我试图避免的。

这是初学者常做的事情 - 尝试动态创建具有新名称的新变量。我也尝试这样做,直到我了解 Lists.

Lists 是可以存储可变数量对象的对象。以下是创建 SnakeItem:

的空列表的方法
List<SnakeItem> snakeItems = new List<SnakeItem>();

您可以添加、访问和删除列表中的项目。以下是一些示例:

snakeItems.Add(new SnakeItem(Resource1.Black, 0, 0)); // add a new item to the list
snakeItems[0] // access the first item in the list. 0 is the first, 1 is the second, etc.
snakeItems.RemoveAt(0) // remove the first item of the list

基本上,只要您想创建一个新的 "variable name",只需 Add 一个新项目到列表中:

    if (snakeItems[0].Top == Fruit_Item.Top && snakeItems[0].Left == Fruit_Item.Left)
    {
        snakeItems.Add(...);
    }

如您所见,snake_Length不再需要了!您可以使用 .Count 访问有多少蛇项目。将所有 snake_Length 替换为 snakeItems.Count.

了解有关列表的更多信息here