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)

所有这些都是跟踪单个机器人的位置。如果我有两个机器人并且它们是否在同一个位置,我如何跟踪。

例子:

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

他们将在同一个位置,那么我将如何检查是否有机器人在同一个位置?

4

3 回答 3

3

我认为您需要另一个类,例如 Room() 或 CoordinateSystem() 或包含对所有 Robot 对象的引用的东西。然后你可以有一个类方法说房间,占用,它返回该位置是否被占用。

于 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

虽然创建一个容器来保存所有机器人的信息肯定是检查碰撞的一种方法,但您仍然需要做的底层检查是对每个机器人 (x,y) 进行相等性测试。

因此,以最简单的形式,您可以通过简单的“与”相等测试进行检查,然后创建一个函数来容纳它:

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 回答