2011-11-30 44 views
1

我正在创建一个使用数组的游戏,我有我的猎人类,看起来有点像这样;多个使用一个类

public static int x= 11; 
public static int y =11; 
public static String name = "H";` 

以及使用x和y的路径的方法。

我已经在我的棋盘(2d数组)类中以这种方式声明了hunter;

public Hunter hunters[] = new Hunter[5]; 

并且猎人的位置在董事会中声明为:

a2[Hunter.x][Hunter.y] = Hunter.name; 

问题:我想让5个猎人出现在黑板上,我该如何使用阵列来产生额外的4名猎人?谢谢。

+0

你的问题是不是多重继承的问题,因此标签不对。这仅仅是静态VS实例状态的问题。只需将静态修饰符移除到您的变量,并且可以实例化具有不同状态的多个猎人。 –

回答

1

您创建阵列罚款所有你需要做的是使用它:

for (int i = 0; i < 5; ++i) 
{ 
    a2[hunters[i].x][hunters[i].y] = hunters[i].name 
} 

也,你需要使你的猎人成员的非静态

class Hunter 
{ 
    private int x, y; 

    public void setLocation(int x_, int y_) 
    { 
     x = x_; y = y_; 
    } 
} 

你的想法:)

+0

我已经完全从我的代码中移除了静态,但是在我的Main方法中,它仍然无法从静态上下文中执行非静态方法(即使我的main方法现在是'public void main(String [] args)',主要方法是自动静态的? –

1

static关键字(假设您使用的是C++,java,C#)意味着该变量在Hunter类的所有实例中共享。要允许每个Hunter都有自己的位置,请删除static关键字并使用构造函数初始化它们。

我假设你正在使用您所使用的String的Java基础:

public class Hunter { 
    public int x; 
    public int y; 
    public String name; 

    public Hunter(int x, int y, string name) { 
     this.x = x; 
     this.y = y; 
     this.name = name; 
    } 
} 

然后初始化5,你会做

int numHunters = 5; 
for (int i = 0; i < numHunters; i ++) { 
    hunters[i] = new Hunter(/* put x and y and name here */); 
} 

然后,您可以使用它们来填充板:

for (int i = 0; i < numHunters; i ++) { 
    Hunter h = hunters[i]; 
    a2[h.x][h.y] = h.name; 
} 
+0

所以,现在我已经做到了(所有人都在11,11,所以我不能说是否真的有5)我有代码来移动他们,现在我找不到实际做到这一点的方法。它被放置在我的猎人类“x = x + 1;”中,例如,我现在如何复制它? –

1

您没有指定您正在使用的语言。这会有所帮助。 至少,请尝试从属性定义中移除“static”关键字。

在C#中,像

public class Hunter 
{ 
    public int x; 
    public int y; 
    public String name; 
    public Hunter(int newX, int newY, String newName) 
    { 
     x = newX; 
     y = newY; 
     name = newName; 
    } 
} 

创建使用Hunter h1 = new Hunter(11, 11, "H");新的猎人你猎人类可能的样子。一旦创建,你可以做任何事情。

您可能需要做一些阅读了面向对象编程 - 见Intro to OOP ESP部分4.3 - 4.5(它们是短)