C# 查找面板所在的面板阵列

C# 查找面板所在的面板阵列,c#,arrays,panel,C#,Arrays,Panel,我正在做一个学校作业,我们必须使用(a)自定义类来制作一个蛇的工作游戏,其中需要多条蛇 我正在尝试使用面板阵列制作这些蛇。 1个名为Snk的面板阵列和1个名为AI的面板阵列(AI是一种尚未开始使用的东西)。 这些是这样做的:(这个很有用) 将代码添加到自定义面板: class PnlSnk : Panel { internal string Direction = "D"; internal int Length = 1; }

我正在做一个学校作业,我们必须使用(a)自定义类来制作一个蛇的工作游戏,其中需要多条蛇

我正在尝试使用面板阵列制作这些蛇。 1个名为Snk的面板阵列和1个名为AI的面板阵列(AI是一种尚未开始使用的东西)。 这些是这样做的:(这个很有用)

将代码添加到自定义面板:

class PnlSnk : Panel
    {
        internal string Direction = "D";
        internal int Length = 1;
    }
我有一个增长函数(它不起作用):

我知道我只是在控件中添加了Snk[1],而不是整个Snk数组,但这有点像是我想做的。 我试图让它成为这样,当增长被触发时,它将发现面板(将是Snk[1]或AI[1](因为这些是头部)属于哪个阵列,并只增长该阵列。 人工智能蛇最终将是可切换的,所以它不会一直存在。
那么我的Grow函数如何知道它需要增长哪个数组呢?

“那么我的Grow函数如何知道它需要增长哪个数组呢?”您的
Grow(PnlSnk p)
方法收到一个“PnlSnk”。它是如何得到那份推荐信的?用户是否正在单击面板?敲击键盘上的键?你的游戏有“活动”蛇和“非活动”蛇的概念吗?如果你只对PnlSnk有一个引用,并且想知道它属于哪个数组,那么你不能让所有数组像那样单独硬编码。您需要的是一个数组数组,这样您就可以遍历所有蛇,并查看其中是否包含PnlSnk。您还可以使用
列表
容纳所有蛇。
class PnlSnk : Panel
    {
        internal string Direction = "D";
        internal int Length = 1;
    }
private void Grow(PnlSnk P)
        {
            // this is the difficult part
            PnlSnk[] S = null;
            foreach (PnlSnk[] PS in Controls)
            {
                if (PS.contains) S = PS;
            }
            // end of difficult part
            S[S[1].Length] = new PnlSnk()
            {
                Size = new Size(16, 16),
                Location = S[S.Length - 1].Location,
                BackColor = S[1].BackColor
            };
            Controls.Add(S[S[1].Length]);
            S[1].Length++;
        }