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

2024-04-18 23:09:01 发布

您现在位置: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)

它们会在同一个位置,所以我如何检查是否有机器人在同一个位置?你知道吗


Tags: inself程序示例defstep机器人robot
3条回答

虽然创建一个容器来保存所有机器人的信息无疑是检查碰撞的一种方法,但是您仍然需要做的基本检查是对每个机器人(x,y)进行相等性测试。你知道吗

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

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

然后可以对这样的函数进行各种修改,以添加到robot类或新的map/room类中。你知道吗

如果您创建一个类似于Map的类,那么编写一个检查所有robot位置的方法很简单:

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上包含一个对其所在地图的引用(可以通过add_robot方法进行设置,以便Robot在调用其move方法时可以判断其移动是否可行)。你知道吗

我认为您需要另一个类,比如Room()或CoordinateSystem()或是保存对所有Robot对象的引用的类。然后可以在Room,occumped上有一个类方法,它返回该位置是否被占用。你知道吗

相关问题 更多 >