什么是跟踪碰撞的最有效方法

时间:2012-05-13 14:50:14

标签: python

我是一名新的年轻程序员,我正在学习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)

他们会在同一个位置,所以我如何查看是否有任何机器人在同一个位置?

3 个答案:

答案 0 :(得分:3)

我认为你需要另一个类,如Room()或CoordinateSystem()或者其他类,它包含对所有Robot对象的引用。然后你可以在一个名为Room,occup的类方法上,它返回该位置是否被占用。

答案 1 :(得分: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

这样做的好处是可以允许您在地图上执行许多其他操作 - 例如,您可以判断路径是否清晰。

顺便提一下,您可能希望在每个机器人上包含对其所在地图的引用(可以通过add_robot方法设置),以便机器人可以判断当您运动时它是否可以移动调用其move方法。

答案 2 :(得分:0)

虽然创建容器以容纳所有机器人的信息当然是检查碰撞的一种方法,但您仍需要做的基础检查是对每个机器人(x,y)进行相等测试。

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

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

然后可以对这样的函数进行修改,以添加到机器人类或新的地图/房间类。