我正在制作一个基本的城市建设者游戏(在控制台中)。我遇到了一个方法(DrawMap)的问题。我不能让列表作为方法的输入参数。我得到了一大堆错误,所以这里是代码。
编辑:现在有效,谢谢kmatyaszek。using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace City
{
public class map
{
public int m { get; set; } //Map size
public List<int> info { get; set; }
public List<int> fire { get; set; }
public List<int> police { get; set; }
public List<int> education { get; set; }
public List<int> health { get; set; }
public List<int> cursor { get; set; }
}
class Program
{
static void Main(string[] args)
{
map map1 = new map();
map1.m = 256;
map1.info = new List<int>();
for (int i = 0; i < map1.m; i++)
{
map1.info.Add(0);
}
map1.fire = new List<int>();
for (int i = 0; i < map1.m; i++)
{
map1.fire.Add(0);
}
map1.police = new List<int>();
for (int i = 0; i < map1.m; i++)
{
map1.police.Add(0);
}
map1.education = new List<int>();
for (int i = 0; i < map1.m; i++)
{
map1.education.Add(0);
}
map1.health = new List<int>();
for (int i = 0; i < map1.m; i++)
{
map1.health.Add(0);
}
map1.cursor = new List<int>() { 0, 0 };
DrawMap(map1.info, map1.cursor);
}
static void DrawMap(List<int> map1.info, List<int> map1.cursor)
{
int j = 0;
int k = 0;
for (int k = 0; k < Math.Sqrt(map1.m); k++)
{
Console.SetCursorPosition(map1.cursor[j], map1.cursor[k]);
for (int j = 0; j < Math.Sqrt(map1.m); j++)
{
Console.SetCursorPosition(map1.cursor[j], map1.cursor[k]);
Console.Write("A");
}
}
}
}
}
答案 0 :(得分:1)
您应该阅读有关C#方法(https://msdn.microsoft.com/en-us/library/ms173114.aspx)。
我认为方法DrawMap
应该使用map
对象:
...
map1.health = new List<int>();
for (int i = 0; i < map1.m; i++)
{
map1.health.Add(0);
}
map1.cursor = new List<int>() { 0, 0 };
DrawMap(map1);
}
static void DrawMap(map map1)
{
int j = 0;
int k = 0;
for (k = 0; k < Math.Sqrt(map1.m); k++)
{
Console.SetCursorPosition(map1.cursor[j], map1.cursor[k]);
for (j = 0; j < Math.Sqrt(map1.m); j++)
{
Console.SetCursorPosition(map1.cursor[j], map1.cursor[k]);
Console.Write("A");
}
}
}
...
在DrawMap
中,您在同一范围内声明了两个本地(j和k)。你不能这样做。
在这里,您可以阅读有关局部变量和范围的信息: https://blogs.msdn.microsoft.com/samng/2007/11/09/local-variable-scoping-in-c/
答案 1 :(得分:0)
我不知道从哪里开始。让我们从DrawMap
方法的参数开始。 C#不允许变量名中的.
。声明方法的签名时,只编写参数的名称。不要尝试引用程序中的现有变量。只需选择一个名字。当您在方法调用中传递它们时,编译器将知道您的快速列表:
DrawMap(map1.info, map.cursor);
在您为方法的参数指定了正确的名称之后:
static void DrawMap(List<int> info, List<int> cursor)
您可以使用方法范围内的名称。
第二件事是你在方法中声明你的索引变量两次。看看你的for循环声明。那里有int k=0; k<...
,这意味着声明了一个具有相同名称的新变量。只需删除循环上方的两个变量即可。