如何创建多维数组并将属性附加到类以确定值在数组中的位置?C#

如何创建多维数组并将属性附加到类以确定值在数组中的位置?C#,c#,arrays,multidimensional-array,C#,Arrays,Multidimensional Array,我正在尝试创建一个多维数组,作为一种基于文本的RPG游戏的2D地图。我想创建一个多维数组,例如5x5。数组将用0填充,以表示对象的空格。其他数字将代表地图上的玩家,一个敌人,一个npc,一个技能对象(如附魔表等),链接到地图的门,以及箱子。它们都有不同的值来表示存在的对象。如果一个玩家试图走进箱子,它会转而抢劫箱子。然后将胸部重置为0以表示空白,让玩家走到那里,表示没有胸部。如果玩家试图越过一个敌人,它将转而参与战斗(由单独的职业和功能处理)。走过一个表示门的数字将链接到另一个表示另一张地图的多

我正在尝试创建一个多维数组,作为一种基于文本的RPG游戏的2D地图。我想创建一个多维数组,例如5x5。数组将用0填充,以表示对象的空格。其他数字将代表地图上的
玩家
,一个
敌人
,一个
npc
,一个
技能对象
(如附魔表等),
链接到地图的门
,以及
箱子
。它们都有不同的值来表示存在的对象。如果一个
玩家
试图走进
箱子
,它会转而抢劫
箱子
。然后将
胸部
重置为0以表示空白,让
玩家
走到那里,表示没有胸部。如果
玩家
试图越过一个
敌人
,它将转而参与战斗(由单独的职业和功能处理)。走过一个表示门的数字将链接到另一个表示另一张地图的多维数组

我想知道我需要在
player
类中放置什么样的属性来处理他在地图上的位置。然后,一个函数将更改该值,使其在地图上移动。为地图创建类是个好主意吗?我是将对象的值存储在那里还是存储在这些对象的各个类中?我该怎么办?谢谢你的帮助。作为参考,这里是我的播放器类(小心,它很长…):


首先,可以按如下方式定义二维贴图阵列:

int[,] map = new int[5, 5];
更多信息,请参阅。是的,我建议你把地图放到课堂上,虽然如果你只是在学习这些东西,我想你可以在短期内把它拼凑起来

第二,我认为你的球员可以有一个X,Y的位置。因此,为了保持上述风格,可以将此添加到您的玩家类中:

public int      x_pos { get; set; }
public int      y_pos { get; set; }
然后你可以使用一个函数来更新他的位置,然后说map[player.x_pos,player.y_pos]=1,或者不管“player”的代码是什么

第三,考虑一下你的地图上有一个方块有熔岩。一个怪物站在那里。或者某个广场是浅水区,玩家站在那里。你打算如何处理在一个正方形上有多个东西?您当前的设计有一点局限性。这可能会变得荒谬:也许你有一个广场,上面施放了一个黑暗咒语,上面漂浮着一团毒气,地上还有10块金子,上面是光滑的大理石,上面有一些苔藓,还有一个地精在那里睡觉

如果我对您的项目理解正确,您将尝试做的许多事情将在这里讨论。我建议你进去看看有没有有用的东西

最后,您的代码所具备的技能[]完全是硬编码的技能,这并不是大多数程序员处理代码的方式。我赞同Jon Skeet的意见,即你应该调查收藏


祝你好运,我想你在项目中会玩得很开心。

你知道吗?首先要了解的是:命名约定。下一件事:收藏。(我真的建议不要在这里列出这么多字段……)蒂姆,我不知道。谢谢你通知我。乔恩,我不明白你的意思。我有命名约定,在所有技能上都有一个
标记
属性来表示它们的来源,所有的东西都是分散的和可读的,几乎所有的东西都有评论……Jon Skeet只是说你应该使用一个集合对象来容纳你的技能。您甚至可以为每一类技能创建一个集合:public IEnumerable Thivery{get;set;}将是一个集合的示例,该集合包含了命名Thivery的技能,因此您知道什么类型的技能。您还可以创建一个名为skill的基类或接口,并从中继承以生成不同类型的技能。我的C语言不是很高级,所以我不知道什么是集合,也不知道你放的代码,所以我现在要查找它并了解它。谢谢你,现在我知道了未来。编辑:我已经有了一个名为“skill”的类,它们都是从中继承的,填充了它们的所有属性和函数。谢谢。我现在肯定有我的研究要做。我要去一些关于你们所说的课本和指南,看看我能想出什么。谢谢。请尝试以下链接:
int[,] map = new int[5, 5];
public int      x_pos { get; set; }
public int      y_pos { get; set; }