我正在制作基于文本的游戏,我希望我的英雄能够在3x3网格内移动。我试着用一个二维数组很容易地做到这一点。我遇到的问题是,我想为每个英雄所在的网格调用一个方法。因此,如果英雄处于网格0,0,那么我会调用atHouse()方法,如果他去了0,1我打电话atTree()方法。每种方法都会给出该区域的描述,其中的项目等...基于文本的游戏运动
因此,由于我无法在数组中存储方法,因此我正在考虑可能采取另一种方式。我只是不知道什么方式可能是最好的。有人以一种比我所描述的更好的质量方式建立了一个世界吗?
我正在制作基于文本的游戏,我希望我的英雄能够在3x3网格内移动。我试着用一个二维数组很容易地做到这一点。我遇到的问题是,我想为每个英雄所在的网格调用一个方法。因此,如果英雄处于网格0,0,那么我会调用atHouse()方法,如果他去了0,1我打电话atTree()方法。每种方法都会给出该区域的描述,其中的项目等...基于文本的游戏运动
因此,由于我无法在数组中存储方法,因此我正在考虑可能采取另一种方式。我只是不知道什么方式可能是最好的。有人以一种比我所描述的更好的质量方式建立了一个世界吗?
最简单的解决方案是创建一个工厂方法:
我建议为每个位置名称的二维数组:
[
["House", "Tree", "etc"],
["etc", "etc", "etc"],
["etc", "etc", "etc"]
]
然后 ,你可以定义一个方法,您可以将该位置传递给您的工厂方法,该方法将获取要在交换机中使用的函数名称。显然,这个解决方案并不是最好的,因为你必须明确定义每个方法调用。
public void runMethod(int row, int col)
{
string mName = myArray[row][col];
switch(mName)
{
case "House":
atHouse();
break;
//etc
}
}
我会认为一个基类的数组,使用describe()
方法将它称为location
是最好的方法。然后,您可以继承house
类和tree
类。
或者您可以创建location
的实例并设置description属性。
所以像位置[] []位置= {Location.atHouse(),Location.atTree(),...}或类似的东西? – tazboy
而不是将对象存储在一个数组中,您可以定义一个方法,将位置作为参数。 说位置1表示英雄在0,0,位置2表示英雄在0,1。
public void heroMoved(int position){
switch(position){
case 1:
call method associated
break;
case 2:
call method associated
break;
.
.
so on
}
}
我明白你的意思了。但因为我宁愿有两个值,就像坐标点一样,我想我可以嵌套switch语句或if语句。所以像1,然后1,2或3; 2然后1,2,3; 3然后是1,2,3;使其成为3x3。不错。谢谢。 – tazboy
为什么你不能在数组中存储方法?如何处理一组数据用你想要的方法放置对象? –
您可以将二维数组映射的索引调用某种调用方对象的函数调用。或者,也许我不明白这个问题... – Whymarrh
你能分享一些代码吗? – Whymarrh