对不起,如果我的英语不好(我是法国学生)。你知道吗
我正在为一个学校项目工作,我想在一个有墙壁、喷泉和路灯的模型化的地方创造一个人群运动。我几乎做了所有的事情:人工智能被创造出来,可以在二维平面上移动,我的地方用我之前说过的一些东西来建模,我用雷诺的Boid规则(对齐、内聚、分离)来处理人群移动过程中的人与人之间的互动。我仍然需要编写一个函数来模拟人们触摸墙壁或其他结构时的物理现象。你知道吗
但我正在研究群组的初始化(创建),但它不起作用:群组由N个人(代理)组成,其中N在1到5518之间(由于空间限制,最大人数)。 代码如下:
self.agents = []
x = 50
y = 55
X = 0
while X < N:
if x <= 100 and x >= 50 and y <= 165 and y >= 55:
k = 0
while k < 50 and X < N:
for a in range(11):
for b in range(13):
if (x, y) != ((70 + a),(104 + b)):
x += k
agent = UnAgent(x, y)
self.agents.append(agent)
X += 1
k += 1
x = 50
y += 1
我认为有一个无限循环,但我不能解决它。为了更好地理解我的代码,这里有一个我的绘图计划的图像,然后第二个图像是我的程序,其中所有代理在一个唯一的绘图(x,y)上生成,在这个地方的中心(这是我不想要的,我希望每个人都被放置在一个唯一的绘图上,同时通过x坐标旅行,然后添加1到y坐标,然后通过X坐标等,并且人不能在红块中产卵所以喷泉)
编辑:
嗨@PatrickArtner,谢谢你关注我的问题并帮助我!你的回答非常有用,所以我尝试修改你的代码(与我的代码相比真的可以理解!)这就是我所拥有的:
def addMonumentCentral():
'''Bloque la place de (70,104) à (80,116) avec des "briques" '''
L=[]
for a in range(70,81):
for b in range(104,117):
L.append((a,b)) # List of every unique tuple occupied by water
class Foule:
def __init__(self, count, largeur = 150, hauteur = 220):
self.largeur = largeur
self.hauteur = hauteur
self.agents = []
numAg = 0
MonumentCentral = addMonumentCentral()
for y in range(55,166):permise
for x in range(55,101):
if (x,y) not in MonumentCentral:
agent = UnAgent(x, y)
agent.largeur = largeur
agent.hauteur = hauteur
self.agents.append(agent)
numAg += 1ajoutes
if numAg == count:
break
if numAg == count:
break
我对dictionary不太熟悉,所以我修改了您的第一个函数来返回一个列表,其中返回的每一块水都是这样的:[(.. , ..),(.. , ..), ... ,(.. , ..)]
其中每两个圆括号都是二维平面上的水图。你知道吗
然后,我在我的类Foule中应用了你的第二个函数(在英语中是“crowd”的意思),唯一一个thar不起作用的是if (x,y) not in MonumentCentral:
行。似乎我不能用Python中的元组列表来测试元组:我是Python的初学者,它似乎不起作用,但我不知道如何做一些我以前用这行代码做过的事情。你知道吗
当我执行代码时,我有一个错误行:TypeError: argument of type 'NoneType' is not iterable
。你知道如何用一个元组列表来测试元组的类似方法来替换测试行吗?你知道吗
真的, 阿克塞尔·乔利
编辑2:
我的代码现在可以工作了,结果如下:
class Foule:
def __init__(self, count, largeur = 150, hauteur = 220):
self.largeur = largeur
self.hauteur = hauteur
self.agents = []
numAg = 0 # Nombre d'agents ajoutes
MonumentCentral = []
for a in range(70,81):
for b in range(104,117):
MonumentCentral.append((a,b))
for y in range(55,166): # On parcourt selon les y la zone de spawn permise
for x in range(55,101): # On parcourt selon les x la zone de spawn permise
if (x,y) not in MonumentCentral: # On check si c'est bloqué ou non
agent = UnAgent(x, y) # Position de depart
agent.largeur = largeur
agent.hauteur = hauteur
self.agents.append(agent)
numAg += 1 # Iteration pour compter le nombre d'agents ajoutes
if numAg == count: # On casse si on atteint le nombre d'agents voulu
break
if numAg == count: # On casse si on atteint le nombre d'agents voulu
break
抱歉,它主要是在法语,但它的工作非常完美,现在有1个代理5518个代理!你知道吗
我很难理解您使用的while循环,因此我将它们重写为更简单的
for .. in range(..):
循环,这些循环超出了所需的x
/y
范围。你知道吗如果可以放置一个代理,那么可以通过使用
set
被阻止的坐标来检查,我选择使用dict
来额外存储阻止磁贴的内容(主要用于显示目的)。你知道吗在放置任何代理之前,请阻止所有不可用的瓷砖(将它们放置在集合中)。然后开始放置药剂,检查瓷砖是否被阻塞,然后放置并计数。迭代直到放置所有代理:
输出:
你可以从字典里得到一份特工名单,比如:
您可能应该根据您的类结构调整此代码。你知道吗
相关问题 更多 >
编程相关推荐