更新:请参阅底部的EDIT 3 。
我是 C# 和一般编程的初学者(所以请温柔一点!)。我遵循了大量的教程并阅读了书籍,并认为我理解了课程。到现在。
我有一个相当简单的单类项目,它使用 2D 字符串数组来设置一个 10x10 的字母 E(空)和 F(全)网格。我使用 int x 和 int y 来引用数组的坐标,并使用 switch 来检测输入并从 x 和 y 中加减来确定数组单元格是空的还是满的。
class MainGame
{
public MainGame()
{
string[,] mapTerr = new string[10, 10]
{
{ "F", "F", "F", "F", "F", "F", "F", "F", "F", "F" },
{ "F", "E", "E", "E", "E", "E", "E", "E", "E", "F" },
{ "F", "E", "E", "E", "E", "E", "E", "E", "E", "F" },
{ "F", "E", "E", "E", "E", "E", "E", "E", "E", "F" },
{ "F", "E", "E", "E", "E", "E", "E", "E", "E", "F" },
{ "F", "E", "E", "E", "E", "E", "E", "E", "E", "F" },
{ "F", "E", "E", "E", "E", "E", "E", "E", "E", "F" },
{ "F", "E", "E", "E", "E", "E", "E", "E", "E", "F" },
{ "F", "E", "E", "E", "E", "E", "E", "E", "E", "F" },
{ "F", "F", "F", "F", "F", "F", "F", "F", "F", "F" },
}; // long-winded I know, but helps visualise the array
int x, y;
string navDir;
Console.WriteLine("Enter a command:");
navDir = Console.ReadLine();
switch (navDir)
{
case "N":
case "n":
x -= 1;
if (mapTerr[x, y] == "F")
{
Console.WriteLine("You cannot move North, it is blocked!");
x += 1;
}
else
{
Console.WriteLine("You move North.");
}
break;
case "E":
case "e":
y += 1;
if (mapTerr[x, y] == "F")
{
Console.WriteLine("You cannot move East, it is blocked!");
y -= 1;
}
else
{
Console.WriteLine("You move East.");
}
break;
// etc...
这工作正常。但是,我尝试将其拆分为单独的类:一个用于创建数组,另一个用于控制输入和输出。这是我的尝试:
class Program
{
public static void Main(string[] args)
{
Map map = new Map();
UserControl usercontrol = new UserControl();
}
}
class Map
{
string[,] mapTerr = new string[10, 10] {
{ // array contents here
};
}
class UserControl
{
int x, y;
string navDir;
public UserControl()
{
Console.WriteLine("Enter a command:");
navDir = Console.ReadLine();
switch (navDir)
{
case "N":
case "n":
x -= 1;
if (mapTerr[x, y] == "F") // ERROR: The name 'mapTerr' does not exit in the current context"
{
Console.WriteLine("You cannot move North, it is blocked!");
x += 1;
}
else
{
Console.WriteLine("You move North.");
}
break;
// etc...
我一生都无法弄清楚如何让它发挥作用。错误主要出现在从交换机内部调用数组时。
我意识到这是因为数组与 Map 类而不是 UserControl 类相关联,那么如何使其可见/可用?
尽管在这里和其他地方在线搜索了数组/范围/类部分,但没有什么能真正用简单的术语来完全解释事情。我认为这是范围问题,我试图以不可能的方式调用对事物的引用。如果有人能解释我做错了什么,也许能暗示我可以用正确的方式做事,我真的很感激!(为冗长的解释/问题道歉)
编辑 1:在该行旁边添加了特定的错误消息作为注释。这发生在开关中引用 mapTerr 的每一行上。
编辑 2:阐明实例化和类结构。
编辑 3:好的,字符串数组是在 Map 类中公开设置的,public string[,] elsaNav = new string[10, 10] {{/*contents*/};
我在 Program 类中实例化了 map 类,但仍然无法从 UserControl 类中调用 mapTerr 数组,尽管使用map.mapTerr
...