Commit 1: Created a static image of a penguin on an iceberg

I was struggling how to draw an oval for my penguin. I needed to look
up videos/read up how to do it. I also had to look up how to set the size of the image.
I found it really difficult to just start the penguin, but once I got the shapes
I felt more comfortable.

Commit 2: Created an iteration of penguins

Created a function penguins which iterates the drawing of the penguin until the end of the screen.
I needed to do some debugging for this to work, I managed to solve it, but I don't know how I fixed the issue.
For some strange reason it's drawing the first penguin twice and I don't know why. I need to figure that out.
This part was much easier than drawing out the shapes.
This commit is contained in:
ilmabura
2025-09-29 22:09:26 -04:00
parent f41cffdf23
commit 80073316b2
6 changed files with 33 additions and 140 deletions

View File

@@ -1,4 +1,9 @@
Commit 1: Created a static image of a penguin on an iceberg
I was struggling how to draw an oval for my penguin. I needed to look
up videos/read up how to do it. I also had to look up how to set the size of the image.
I found it really difficult to just start the penguin, but once I got the shapes
I felt more comfortable.
# -----------------------------------------------------------------
# Write your entire commit message above this line.

Binary file not shown.

View File

@@ -14,7 +14,7 @@ screen = turtle.Screen()
screen.title("Penguin on Ice (with real ovals)")
screen.bgcolor("white")
t = turtle.Turtle(visible=False)
t = turtle.Turtle(visible=True)
t.speed(0)
t.pensize(3)
t.pencolor("black")
@@ -71,7 +71,7 @@ def right_triangle(ax, ay, leg1, leg2, angle=0, fill=None):
# Ocean (bottom half)
filled_rect(-500, -60, 500, -300, fill="#3d44c6", outline="#3d44c6")
# Ice block (white with light gray outline)
# Iceberg (white with light gray outline)
t.pensize(4)
filled_rect(-500, -60, 120, -150, fill="white", outline="#7f7f7f")
@@ -102,4 +102,5 @@ right_triangle(70, -60, 35, 15, fill="gold")
# beak (92, 60)
# feet (70, -60)
input()

24
penguins.py Normal file
View File

@@ -0,0 +1,24 @@
from drawing import *
from turtle import *
def penguins(ax):
for x in range (ax, -500, -100):
pendown()
# Body (tall oval)
draw_oval(x-60, 10, rx=28, ry=70, tilt=0, fill="black")
# Belly (smaller inner oval)
draw_oval(x-42, 12, rx=12, ry=65, tilt=0,fill="white")
# Arm (middle oval)
draw_oval(x-57, -5, rx=13, ry=30, tilt=0, fill="black")
# Head (circle = oval with equal radii)
draw_oval(x-42, 80, rx=25, ry=25, fill="black")
# Beak (little triangle pointing right)
right_triangle(x-28, 60, 25, 20, fill="gold")
# Feet (two small triangles resting on ice)
right_triangle(x-50, -60, 35, 15, fill="gold")
penup()
penguins (120)

View File

@@ -1,49 +0,0 @@
import turtle
from math import cos, sin, pi, radians
def move_to(x, y):
t.penup(); t.goto(x, y); t.pendown()
def filled_rect(x1, y1, x2, y2, fill, outline="black"):
t.pencolor(outline)
t.fillcolor(fill)
move_to(x1, y1)
t.begin_fill()
t.goto(x2, y1)
t.goto(x2, y2)
t.goto(x1, y2)
t.goto(x1, y1)
t.end_fill()
def draw_oval(cx, cy, rx, ry, tilt=0, fill=None, steps=180):
"""Parametric ellipse; steps controls smoothness."""
ang = radians(tilt)
def R(x, y): # rotate (x,y) by tilt
return (x*cos(ang) - y*sin(ang), x*sin(ang) + y*cos(ang))
t.fillcolor(fill if fill else "")
move_to(cx + rx, cy) # start at angle 0
if fill:
t.begin_fill()
for i in range(1, steps + 1):
theta = 2*pi*i/steps
x, y = rx*cos(theta), ry*sin(theta)
xr, yr = R(x, y)
t.goto(cx + xr, cy + yr)
if fill:
t.end_fill()
def poly(points, fill=None):
if fill: t.fillcolor(fill); t.begin_fill()
move_to(*points[0])
for p in points[1:]:
t.goto(*p)
t.goto(*points[0])
if fill: t.end_fill()
def right_triangle(ax, ay, leg1, leg2, angle=0, fill=None):
"""Right angle at (ax, ay). leg1 along 'angle' degrees, leg2 perpendicular."""
a = radians(angle)
B = (ax + leg1*cos(a), ay + leg1*sin(a)) # along angle
C = (ax - leg2*sin(a), ay + leg2*cos(a)) # 90° to the left
poly([(ax, ay), B, C], fill=fill)

View File

@@ -1,88 +0,0 @@
import turtle
# --- Setup ---
turtle.setup(800, 500)
screen = turtle.Screen()
screen.title("Penguin on Ice")
screen.bgcolor("white")
pen = turtle.Turtle()
pen.speed(8)
pen.pensize(2)
# --- Draw ocean ---
pen.penup()
pen.goto(-400, -100)
pen.pendown()
pen.fillcolor("royalblue")
pen.begin_fill()
for _ in range(2):
pen.forward(800)
pen.right(90)
pen.forward(250)
pen.right(90)
pen.end_fill()
# --- Draw ice block ---
pen.penup()
pen.goto(-400, -100)
pen.pendown()
pen.pencolor("black")
pen.fillcolor("white")
pen.begin_fill()
pen.forward(350) # top edge
pen.right(90)
pen.forward(100) # side edge
pen.right(90)
pen.forward(350)
pen.end_fill()
# --- Draw penguin body ---
pen.penup()
pen.goto(0, -100)
pen.left(90)
pen.pendown()
pen.circle(40, 180) # big oval side
pen.circle(40, 180)
# --- Draw penguin belly (smaller oval) ---
pen.penup()
pen.goto(10, -100)
pen.setheading(90)
pen.pendown()
pen.circle(20, 360)
# --- Draw head ---
pen.penup()
pen.goto(0, -20)
pen.setheading(0)
pen.pendown()
pen.circle(20)
# --- Draw beak (triangle) ---
pen.penup()
pen.goto(20, -10)
pen.pendown()
pen.setheading(0)
pen.forward(20)
pen.right(120)
pen.forward(20)
pen.right(120)
pen.forward(20)
# --- Draw feet ---
pen.penup()
pen.goto(-5, -100)
pen.pendown()
pen.setheading(-30)
pen.forward(20)
pen.penup()
pen.goto(5, -100)
pen.pendown()
pen.setheading(-150)
pen.forward(20)
# Done
pen.hideturtle()
turtle.done()