更新IndexedSeq [Vector] Scala函数式编程

时间:2016-10-04 22:59:35

标签: scala vector functional-programming

我正在尝试在scala中实现Boids植绒算法,以便学习和改进我的函数式编程。

我遇到了绘制鸟类可以移动的'画布'的问题。每当我们打印它们的位置时,我需要使用表示boid的“B”更新画布。

Vector2D代表我自己实现的2D矢量,它只包含x和y位置。

以下解决方案仅打印出有boid的行(即Vectors),并对其进行重复处理。例如,如果传递了3个boids的列表进行绘制,那么将创建9个向量。

需要创建矢量的画布边界量(本例中为10),其中包括有boid的行和不存在的行。

在更通用的形式中,我有一个包含特定值的boundary.x量的Vectors的IndexedSeq。我需要做的是在该向量中的某个位置更新IndexedSeq中的Vector。因此,如果我需要更新(1,1),那么我需要在它的位置1更新序列中的第二个向量。

我很有可能错过了一些明显的东西,所以对这个主题的任何帮助都会非常感激。

干杯,

大卫

object Canvas{

val boundary = Vector2D(10,10)
require(boundary.x == boundary.y)

    def draw(boids: List[Boid]) = {
        val lines = for{
          col <- 0 until boundary.x
          position <- boids.map(_.position)
        } yield Vector.fill(boundary.x)("* ").updated(position.x, "B   ")

        "\n" + (lines mkString "\n")
    }

}

case class Boid (position: Vector2D, velocity: Vector2D){
    def this() = this(Vector2D.random,Vector2D.random)
}

case class Vector2D(x: Int, y: Int)

0 个答案:

没有答案