1

我正在尝试用 C# 制作一个简单的基于文本的游戏。我想如何实现这一点是通过向表单添加标签(而不是使用命令提示符)。我在将它们添加到屏幕时遇到了一些问题。Visual Studio 给出了一个未指定的错误(只说我有一个未处理的异常):

你调用的对象是空的

当我尝试使用数组用这些标签填充屏幕时。编码:

private void Main_Game_Load(object sender, EventArgs e)
{
    Label[] Enemies = new Label[20];
    Label[] Projectile = new Label[5];
    Font font = new Font(new System.Drawing.FontFamily("Microsoft Sans Serif"), 12);
    Random rand = new Random();
    Point point = new Point(rand.Next(500), rand.Next(500));

    for (int i = 0; i < Enemies.Length; i++)
    {
        Enemies[i].Text = "E";
        Enemies[i].Font = font;
        Enemies[i].BackColor = ColorTranslator.FromHtml("#000000");
        Enemies[i].Location = point;
        Enemies[i].Size = new Size(12, 12);
        Enemies[i].Name = "Enemy"+i.ToString();
        this.Controls.Add(Enemies[i]);
    }
}

我想知道问题可能隐藏在哪里?我已经用谷歌搜索了它,我的代码似乎应该可以工作(除了现在点不会在尝试填充时随机化)。

4

2 回答 2

3

这行代码创建了一个空数组(即每个元素都没有引用)来存储最多 20 个标签:

Label[] Enemies = new Label[20];

您必须在数组中显式创建每个标签:

for (int i = 0; i < Enemies.Length; i++)
{
    //creates a new label and stores a reference to it into i element of the array 
    Enemies[i] = new Label(); 
    //...
}

一维数组(C# 编程指南)

SomeType[] array4 = new SomeType[10];

此语句的结果取决于 SomeType 是值类型还是引用类型。如果它是值类型,则该语句创建一个包含 10 个元素的数组,每个元素的类型为 SomeType。如果 SomeType 是引用类型,则该语句创建一个包含 10 个元素的数组,每个元素都初始化为一个空引用。

于 2012-12-06T04:20:02.860 回答
2

创建数组时,所有元素都填充有该类型的默认值。对于所有引用类型,即null. 您实际上需要为Label数组中的每个项目创建一个新项目:

for (int i = 0; i < Enemies.Length; i++)
{
    Enemies[i] = new Label();
    //...
于 2012-12-06T04:19:56.920 回答