Question #101283

can you please help me help my son with this assignment . he is new to this and we are so stuck


In this assignment, you will use all of the graphics commands you have learned to create an animated scene. Your program should have a clear theme and tell a story. You may pick any school-appropriate theme that you like.


The program must include a minimum of:


5 circles

5 polygons

5 line commands

2 for loops

1 global variable

You may wish to use the standard boilerplate code for simplegui graphics

Expert's answer

from math import sqrt
try:
    import simpleguik
except ImportError:
    import SimpleGUICS2Pygame.simpleguics2pygame as simplegui

message = 'Welcome! Click your mouse to start animation'
colors = ['Green', 'Red', 'Yellow']
color = 0
width = 600
height = 600
limits = [20, width, 180, height]
square_size = 25
circle_size = 0.5 * sqrt(2) * square_size
position = [limits[0], limits[2]]
pen_width = 4
pen_hwidth = 2
font_size = 24
hacked = False

def keydown(key):
    global color
    color = (color + 1) % len(colors)

def click(position):
    global message, hacked
    message = 'Y got H.@.C.K.E.DDD !!!'
    hacked = True

def square(x, y, a):
    return [[x, y], [x + a, y], [x + a, y + a], [x, y + a]]

def center(x, y, a):
    return x + a / 2.0, y + a / 2.0

def plus(x, y, a):
    cx = x + a / 2.0
    cy = y + a / 2.0
    return [[[cx, y], [cx, y + a]], [[x, cy], [x + a, cy]]]

def screensaver(canvas):
    global position
    position[0] += 2
    if not position[0] < limits[1] - square_size:
        position[0] = limits[0]
    position[1] += 3
    if not position[1] < limits[3] - square_size:
        position[1] = limits[2]

    for i in range(5):
        dx, dy = i * square_size / 2., i * square_size / 0.7,
        # dx, dy = 0, 0
        px, py = position[0] + dx, position[1] + dy
        if px >= limits[1] - square_size:
            px = limits[0] + px - limits[1] + square_size
        if py >= limits[3] - square_size:
            py = limits[2] + py - limits[3] + square_size

        sq = square(px, py, square_size)
        canvas.draw_polygon(sq, pen_width, 'White')

        cnt = center(px, py, square_size)
        canvas.draw_circle(cnt, circle_size, pen_width / 2, colors[color])

        pl = plus(px, py, square_size)
        for ln in pl:
            canvas.draw_line(ln[0], ln[1], pen_width / 2, 'Blue')
    

def draw_handler(canvas):
    text_width = frame.get_canvas_textwidth(message, font_size)
    centered_x = (width - text_width) / 2
    canvas.draw_text(message, [centered_x, 112], font_size, 'Red')

    if hacked:
        screensaver(canvas)

frame = simplegui.create_frame('Animation', width, height)
frame.set_canvas_background('Black')
frame.set_keydown_handler(keydown)
frame.set_mouseclick_handler(click)
frame.set_draw_handler(draw_handler)
frame.start()
LATEST TUTORIALS
APPROVED BY CLIENTS