# drawing.py # ---------- # By Hope Wright # # a turtle and bubbles will be drawn and animate swimming across the screen # phase 2 would be to have it start smaller and grow is it swims across the screen to look like it's getting closer # phase 3 would be to animate the bubbles. from turtle import * from superturtle.movement import fly from superturtle.animation import animate from superturtle.easing import easeInQuad import math import random def draw_turtle(size): pencolor("green") #draw an oval for the shell height = size*2 width = size*1.5 steps = 100 for i in range(steps + 1): angle = 2 * math.pi * i / steps x = (width) * math.cos(angle) y = (height) * math.sin(angle) goto(x,y) #move to top of for head penup() left(90) forward(size*4) left(90) forward(size*1.5) pendown() #draw a circle for the head circle(size) #draw some lines on the shell penup() left(90) forward(size*2) pendown() forward(size*4) right(180) forward(size*2) left(90) forward(size*1.5) penup() left(180) forward(size*1.5) pendown() draw_flipper(size, 1) draw_flipper(size, 4) def draw_flipper(size, quad): width = 2.5 * size height = 1.5 * size steps = 100 # Number of points to smooth the curve penup() if quad == 1: angle_range = range(0, steps + 1) # Top half for i in angle_range: angle = math.pi * i / steps # Only go from 0 to π radians x = ((width / 2) * math.cos(angle))+(size*2) y = ((height / 2) * math.sin(angle))+size if i == angle_range[0]: goto(x , y ) pendown() else: goto(x, y) forward (size*2.5) elif quad == 4: angle_range = range(0, steps + 1) # Top half for i in angle_range: angle = math.pi * i / steps # Only go from 0 to π radians x = ((width / 2) * math.cos(angle))-(size*2) y = ((height / 2) * math.sin(angle))+size if i == angle_range[0]: goto(x , y ) pendown() else: goto(x, y) forward (size*2.5) elif quad == 3: angle_range = range(0, steps + 1) # Top half for i in angle_range: angle = math.pi * i / steps # Only go from 0 to π radians x = ((width / 2) * math.cos(angle))-(size*2) y = ((height / 2) * math.sin(angle))+size if i == angle_range[0]: goto(x , y ) pendown() else: goto(x, y) forward (size*2.5) else: angle_range = range(0, steps + 1) # Top half for i in angle_range: angle = math.pi * i / steps # Only go from 0 to π radians x = ((width / 2) * math.cos(angle))-(size*2) y = ((height / 2) * math.sin(angle))+size if i == angle_range[0]: goto(x , y ) pendown() else: goto(x, y) forward (size*2.5) def draw_bubble(b_size): pencolor("blue") circle(b_size) def place_bubbles(number): #draws bubbles of random sizes and locations in each of the 4 quadrants for i in range(number): x = random.random()*400 y = random.random()*200 fly(x,y) b_size = random.random()*15 draw_bubble(b_size) for i in range(number): x = random.random()*400 y = random.random()*200 fly(-x,y) b_size = random.random()*15 draw_bubble(b_size) for i in range(number): x = random.random()*400 y = random.random()*200 fly(x,-y) b_size = random.random()*15 draw_bubble(b_size) for i in range(number): x = random.random()*400 y = random.random()*200 fly(-x,-y) b_size = random.random()*15 draw_bubble(b_size) fly(0,0) """ #pass the number of bubbles you want in each quadrant (so it will be 4 X what you pass) for frame in animate(50, loop=False): x = frame.interpolate(-10, 10) y = frame.interpolate(20, -10, easing=easeInQuad) fly(x, y) place_bubbles(1) """ place_bubbles(5) draw_turtle(20) done()