1

私は新しい若いプログラマーで、python を学んでいます。より大きなプログラムを作成する方法を学ぶために、サンプル プログラムを作成しています。

class Robot():

    def __init__(self):
        self.xpos = 0
        self.ypos = 0

    def step(self, axis):
        print "step"
        if axis in "xX":
            self.xpos += 1
        elif axis in "yY":
            self.ypos += 1

    def walk(self, axis, steps=2):
        for i in range(steps):
            self.step(axis)

    def get_pos(self):
        print "X:%i  Y:%i" % (self.xpos, self.ypos)


robot = Robot()
robot.walk("x", steps=3)

これは、個々のロボットがどこにいるかを追跡するだけです。2 台のロボットがあり、それらが同じ場所にある場合、どうすれば追跡できますか?

例:

robot1 = Robot()
robot2 = Robot()
robot1.walk("x",5)
robot2.walk("x",5)

それらは同じ場所にあるので、同じ場所にロボットがいるかどうかを確認するにはどうすればよいですか?

4

3 に答える 3

3

Room() や CoordinateSystem() のような別のクラス、またはすべての Robot オブジェクトへの参照を保持する何かが必要だと思います。次に、その場所が占有されているかどうかを返す、Room、占有というクラスメソッドを持つことができます。

于 2012-05-13T14:56:56.653 に答える
0

のようなクラスを作成するとMap、すべてのロボットの位置をチェックするメソッドを簡単に作成できます。

class Map:
    def __init__(self):
        self.robots = []

    def add_robot(self, robot):
        self.robots.add(robot)

    def is_occupied(self, x, y):
        for r in self.robots:
            if r.xpos == x and r.ypos == y:
                return True
        return False

これには、マップ上で実行したい他の多くの操作を許可するという利点があります。たとえば、パスが明確かどうかを知ることができます。

ちなみに、各 Robot に、それが配置されている Map への参照を含めることもできます (これはメソッドによって設定できます。これにより、add_robotメソッドを呼び出したときにロボットがその移動が可能かどうかを知ることができますmove

于 2012-05-13T15:01:16.877 に答える
0

すべてのロボットの情報を保持するコンテナーを作成することは、確かに衝突をチェックする 1 つの方法ですが、依然として行う必要がある根本的なチェックは、各ロボット (x,y) で同等性テストを行うことです。

したがって、最も単純な形式では、単純な AND 演算による等価性テストによってチェックを実行し、それを格納する関数を作成できます。

def check_collision(r1, r2):
    if r1.x == r2.x and r1.y == r2.y:
        return True
    return False    

このような関数は、ロボット クラスまたは新しいマップ/ルーム クラスに追加するために、ある種の変更を加えることができます。

于 2012-05-13T15:02:52.243 に答える