프로그램

[파이썬] 문제 : 랜덤색 및 크기로 사각형 그리기

오디세이99 2023. 6. 7. 16:20
728x90
반응형

import turtle
import random

t = turtle.Turtle()
t.hideturtle()                         # 거북이 모양 숨기기
# t.shape ("turtle")
t.speed(0)                             # 가장 빠르게 그리기

colors = ['red','blue','yellow','black']  # 조건1
x = [30, 60, 90, 150, 300]             # 조건 2
y = [400, 600, 800]                    # 조건 3
z = [1, 3, 5]                          # 조건 4

t.pencolor('black')                    # 조건1, 펜 컬러 black

def move():                            # 조건5
    a = random.randrange(-800, 800)    # 랜덤값 선택
    b = random.randrange(-800, 800)
    t.penup()                          # 펜 들기. 그림이 그려지지 않도록 펜을 듬
    t.goto(a, b)                       # a(x), b(y) 좌표로 이동. 화면 중앙이 0,0
    t.pendown()                        # 그리기 시작하기 위해 펜 내림

def draw_box(xx, color):              # 조건2
    move()                            # 핸덤 위치로 이동
    t.fillcolor(color)                # 채우기 색으로 지정
    t.begin_fill()                    # 채우기 시작
    for i in range(4):               # 사각형이니까 4번 반복. 한변 그리는 것을 4번 반복
        t.pensize(z[random.randint(0, len(z)-1)]) # 조건4. 펜 굵기 랜덤 선택
        t.forward(xx)                 # 이동. xx 길이만큼 이동
        t.right(90)                   # 오른쪽으로 90도 방향 변경
    t.end_fill()                      # 채우기 종료

def draw_bigbox(yy):                  # 조건3
    move()                            # 핸덤 위치로 이동
    pos = []                          # 첫 사각형을 그릴때 우측상단,우측하단,좌측하단의 좌표 기억하기 위한 리스트 변수 선언
    for i in range(4):               # 사각형 4개 이어 붙여 그리기
        for j in range(4):           # 사각형 1개 그리기
            t.pensize(z[random.randint(0, len(z)-1)])  # 조건4. 펜 굵기 랜덤 선택
            t.forward(yy)             # 이동. yy 길이마큼 이동
            t.right(90)               # 오른쪽 90도 방향 변경
            if i == 0 and j < 3:     # 첫번째 사각형의 우측상단,우측하단,좌측하단의 좌표 기억
                pos.append([int(t.xcor()), int(t.ycor())])   # 좌표 추가. xcor(), ycor() 함수는 현재  x, y 좌표 알 수 있음
        if i < 3:                     # 첫번째 사각형에 이어붙이기 위해 각 사각형의 첫번째 위치로 이동
            t.penup()
            t.goto(pos[i][0], pos[i][1])
            t.pendown()
    

for i in range(4):                       # 조건3
    yy = y[random.randint(0, len(y)-1)]  # 길이를 랜덤하게 선택. random.randint(0, len(y)-1)로 0~5 번호 선택. 이를 인덱스로 y리스트 요소 선택
    draw_bigbox(yy)                      # 랜덤하게 선택한 길이를 인수로 해서 그리기

for i in range(40):                      # 조건 2
    color = colors[random.randint(0, len(colors)-1)]   # 랜덤하게 색 선택
    xx = x[random.randint(0, len(x)-1)]  # 길이를 랜덥하게 선택
    draw_box(xx, color)                  # 사각형 그리기

turtle.done()

try:
    turtle.bye()
except:
    print("bye")
728x90
반응형