Handouts: Graphics Reference

We are going to create 1000 circles in random positions on the screen. Circles closer to the bottom-left corner will be blue and circles closer to the top-right corner will be green. This is an example of return values.

• Each circle is 20 pixels by 20 pixels.

• Note every circle is drawn fully on the canvas.

• The time.sleep(0.002) function call waits 2 milliseconds between drawing circles.

## Solution

"""
File: half_green.py
-------------------
Draws circles randomly, where circles in the top-right half are green
and circles in the bottom-left half are blue.
"""

from graphics import Canvas
import random
import time

# The size of the canvas
CANVAS_WIDTH = 500
CANVAS_HEIGHT = 500

# The diameter of each circle
CIRCLE_SIZE = 20

# The number of circles to draw
NUM_CIRCLES = 1000

def main():
canvas = Canvas(CANVAS_WIDTH, CANVAS_HEIGHT)
canvas.set_canvas_title("Half Green")

# Draw 1000
for i in range(NUM_CIRCLES):
x = random.randint(0, canvas.get_canvas_width() - CIRCLE_SIZE)
y = random.randint(0, canvas.get_canvas_height() - CIRCLE_SIZE)

circle = canvas.create_oval(x, y, x + CIRCLE_SIZE, y + CIRCLE_SIZE)

# Set both the fill and outline color to be either green or blue
canvas.set_color(circle, get_color(x, y))

canvas.update()
time.sleep(0.002)

canvas.mainloop()

def get_color(x, y):
"""
Returns the name of the color the circle with top-left coordinate (x, y)
should have.  Since (0, 0) is the top-left corner of the canvas, x increases
as we go to the right, and y increases as we go down.  So the line y = x is
the diagonal line from top-left to bottom right.  If y < x, the dot is above
this line (in the top-right corner), so it's green.  If y >= x, the dot is at
or below this line (in the bottom-left corner, so it's blue.
"""
if x > y:
return "green"
return "blue"

if __name__ == "__main__":
main()