如何在基于pygame的模拟中最好地表示/实现移动对象?

时间:2015-10-22 10:01:44

标签: python loops pygame simulation

我目前正在尝试为大学进行蜜蜂模拟,我已经开始研究如何做到这一点的基础知识。

最初的想法是使用PyGame并在屏幕上向用户展示蜜蜂,但是现在我只是在做基本功能。

我遇到问题的功能是蜜蜂将寻找未使用的细胞然后去使用它们的功能。这是在每个新的框架上运行并在每个蜜蜂对象上运行,因此每个蜜蜂将检查每个细胞。

我正在使用此代码:

 for i in range (0,len(hiveCells)): 
             if hiveCells[i] == "": 
                print("Not taken") 
                hiveCells[i] = "B"

             else:
                 print("Taken") 

但问题当然是它在几秒钟内完成,而蜜蜂已经使用了整个蜂巢,但我需要一种方法来缓慢地完成这项工作并包括前往该单元所需的时间,然后实际需要时间用吗?

最好的方法是什么?我正在考虑使用坐标,它会更接近每个循环的坐标,并检查它是否已到达它们。

1 个答案:

答案 0 :(得分:1)

为了包括每只蜜蜂的旅行时间,您首先需要定义某种距离测量。一个微不足道的选择是使用欧几里德距离。

为了将此功能合并到您的模型中,您需要添加以下内容

  • 为每只蜜蜂和每个蜂巢(细胞)添加一个位置(x,y)和可能的(z)
  • 定义每帧更新过去的时间(以秒为单位)。
  • 定义蜜蜂的速度(以m / s为单位)。
  • 现在每帧更新您知道自上次更新以来已经过了多少时间,并且您可以(使用蜜蜂速度和位置)计算蜜蜂的新位置。
  • 现在,帧的更新频率与模型中经过的时间直接相关。

请注意,为了使其正常工作,您需要某种类型的 ID ,它将蜜蜂与其声称的蜂巢单元相关联。我建议给每只蜜蜂一个独特的 ID

然后,只要蜜蜂声称蜂巢细胞,您就会将唯一的蜜蜂ID存储在蜂巢细胞中,这样在每次更新时,您可以计算每只蜜蜂相对于它飞到的蜂巢细胞的新位置。

另外注意,为了使这个方案起作用,蜂巢单元需要一个位置(你可以存储在一个类似大小的数组中。但是为每个Hive(单元)创建一个对象可能是最干净的,存储它的坐标和声称它的蜜蜂ID。这也可以让你通过添加额外的信息(即蜂蜜存在,或其他什么)蜂巢(细胞)/蜜蜂来进一步改善你的模型。