我是一名新的年轻程序员,我正在学习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)
他们会在同一个位置,所以我如何查看是否有任何机器人在同一个位置?
答案 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
然后可以对这样的函数进行修改,以添加到机器人类或新的地图/房间类。