1

Screenshot of output image

I made a random walk program using turtle and I want it show where the two turtles cross paths by changing the color.

`import turtle as T
 import random as R
 t = T.Turtle()
 u = T.Turtle()
 t.speed(0)
 u.speed(0)
 t.hideturtle()
 u.hideturtle()
 t.color("red")
 u.color("blue")
 def randWalk(num):
     for i in range(0, num):
         x = R.choice((-1,1))
         X = R.choice((-1,1))
         y = R.choice((-1,1))
         Y = R.choice((-1,1))
         t.forward(x)
         u.forward(X)
         if y == 1:
             t.left(90)
             t.forward(1)
         else:
             t.right(90)
             t.forward(1)
         if Y == 1:
             u.left(90)
             u.forward(1)
         else:
             u.right(90)
             u.forward(1)    
 randWalk(4000)`
cdlane
  • 40,441
  • 5
  • 32
  • 81

1 Answers1

1

Turtle can't interrogate what color is currently on the screen, so one way to approach this might be to have some sort of backing store where you keep track of what color was written to what pixel. Here's a rough example using Python lists:

from turtle import Screen, Turtle
from random import choice

WIDTH, HEIGHT = 300, 300

PEN_COLORS = ['red', 'blue']

OVERLAP_COLOR = 'green'

def randWalk(number):
    for _ in range(number):
        for turtle in turtles:
            direction = choice((-1, 1))
            turtle.forward(direction)

            x, y = map(round, turtle.position())
            old_color = color = turtle.pencolor()
            turtle.undo()  # undo forward()

            if grid[y][x] and grid[y][x] != color:
                color = OVERLAP_COLOR

            turtle.pencolor(color)
            turtle.goto(x, y)  # redo forward()
            turtle.pencolor(old_color)

            grid[y][x] = color

            choice((turtle.left, turtle.right))(90)

        screen.update()

screen = Screen()
screen.setup(WIDTH, HEIGHT)
screen.tracer(False)

grid = [[None] * WIDTH for _ in range(HEIGHT)]

turtles = []

for color in PEN_COLORS:
    turtle = Turtle()
    turtle.hideturtle()
    turtle.pencolor(color)

    turtles.append(turtle)

randWalk(4000)

screen.tracer(True)
screen.exitonclick()

There is additional complication in the code as turtle walks a floating point plane but we need to coerce it to an integer plane to accommodate our backing store and reduce undesirable drawing artifacts.

enter image description here

cdlane
  • 40,441
  • 5
  • 32
  • 81