2019-09-25 06:38:15 +00:00
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
|
|
|
"flag"
|
|
|
|
"git.openprivacy.ca/sarah/microworlds/core"
|
|
|
|
"git.openprivacy.ca/sarah/microworlds/experiments"
|
|
|
|
"image/color"
|
|
|
|
)
|
|
|
|
|
|
|
|
var sniffDistance = flag.Int("sniffDistance", 3, "the distance a turtle can detect pheromone levels from")
|
|
|
|
|
|
|
|
type SlimeMold struct {
|
|
|
|
SniffDistance int
|
|
|
|
}
|
|
|
|
|
|
|
|
func (sm *SlimeMold) Setup(env *core.Environment, t *core.Turtle) {
|
2019-09-29 22:32:54 +00:00
|
|
|
t.SetColor(color.RGBA{100,255,10,0})
|
2019-09-25 06:38:15 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
func (sm *SlimeMold) Run(env *core.Environment, t *core.Turtle) {
|
|
|
|
t.Wiggle()
|
|
|
|
t.FollowGradient(env, sm.SniffDistance, 2, "trail")
|
|
|
|
t.Step(env)
|
|
|
|
t.Drop(env, 1, "trail")
|
|
|
|
}
|
|
|
|
|
|
|
|
func main() {
|
|
|
|
experiment := new(experiments.Experiment)
|
|
|
|
experiment.InitializeExperiment()
|
|
|
|
experiment.InitTurtles(func() core.Actor {
|
|
|
|
sm := new(SlimeMold)
|
|
|
|
sm.SniffDistance = *sniffDistance
|
|
|
|
return sm
|
|
|
|
})
|
|
|
|
experiment.InitPheromone("trail", color.RGBA{0x80, 0xFF, 0x00, 0x00})
|
2019-09-29 22:32:54 +00:00
|
|
|
experiment.OnStep = func(environment *core.Environment, turtles []*core.Turtle, i int) {
|
|
|
|
environment.EvaporateAndDiffuse(0.99, "trail")
|
|
|
|
}
|
2019-09-25 06:38:15 +00:00
|
|
|
experiment.Run()
|
|
|
|
}
|