Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 도트아트
- 마스터키보드 피치밴드 비활성화
- 피치밴드비활성화
- 유니티 구글 로그인 오류
- 도트
- 도트하트
- 원드라이브 백업 삭제
- 버전 기록 제거
- onedrive 저장 공간
- 마스터키보드 피치밴드 고장
- 유니티
- 도트강아지
- Pixel Studio
- 픽셀
- 도트애니메이션
- 미디신호차단
- 하도트트
- 피치휠비활성화
- 마이크로소프트 대학
- 원드라이브 저장공간 부족
- 원드라이브 문서 용량보다 큰 공간 차지
- 피치밴드 고장
- 미디차단
- 에이블톤 라이브10
- 피치밴드 차단
- 대학교 용량 축소
- 유니티 구글 로그인
- 도트 프로그램
- 애니메이션
- 마스터키보드 고장
Archives
- Today
- Total
BearCode's Note
파이썬 터틀로 그림 그리기 (픽셀아트/도트 스타일) 본문
과제로 수행했던 파이썬 터틀로 그림 그리기 코드입니다.
벚꽃이 흩날리는 나무를 픽셀 아트 느낌으로 표현했습니다.
되는대로 작성한 터라 코드가 깔끔하지 않습니다.
우선 처음에 격자를 그린 다음(사실 안 그려도 사각형 그릴 때 그려져서 최종 결과는 동일)
좌상단부터 사각형을 하나씩 색칠해가며 그림을 그립니다.
첫 줄에는 약간 진한 핑크색이 더 많이 칠해지고,
아랫줄로 갈수록 연한 핑크색이 더 많이 칠해집니다.
중앙 부분에는 연한 핑크 대신 나무줄기를 표현하는 갈색이 칠해집니다.
갈색은 하단부에서 좀 더 좌우로 넓게 칠해져서 밑동을 표현합니다.
마지막으로 랜덤하되 중복되지 않은 위치에 진한 핑크색의 꽃이 그러집니다.
총 10개가 다 그려지거나 중복된 위치에 그리기를 시도해 10번 실패하면 while문이 종료됩니다.
파이썬은 들여쓰기가 중요하더군요.
메모장에 코딩하다보니 스페이스바 누르기가 꽤 번거로웠지만 들여 쓰기는 익숙해진 것 같습니다.
[Python Code]
import random
import turtle as t
#초기세팅
t.clearscreen()
t.speed(0)
#화면 크기 지정
screen_x = 500
screen_y = 500
screen_half_x = screen_x/2
screen_half_y = screen_y/2
t.setup(screen_x+50, screen_y+50)
#화면 분할 개수 지정
split_count_x = 20
split_count_y = 20
#화면 분할 단위크기 지정
split_unit_x = screen_x/split_count_x
split_unit_y = screen_y/split_count_y
#펜 위치 초기화 함수(좌상단으로 이동)
def goto_start_point() :
t.penup()
t.goto(-screen_half_x, screen_half_y)
#펜 색상 및 굵기 지정
t.color('gray')
t.width(1)
#창 배경 색상 지정
t.bgcolor('skyblue')
#가로 줄 그리기
goto_start_point()
temp = 0
for i in range(split_count_x+1) :
t.pendown()
t.goto(screen_half_x, screen_half_y-temp)
temp += split_unit_x
t.penup()
t.goto(-screen_half_x, screen_half_y-temp)
#세로 줄 그리기
goto_start_point()
temp = 0
for i in range(split_count_y+1) :
t.pendown()
t.goto((-screen_half_x)+temp, -screen_half_y)
temp += split_unit_y
t.penup()
t.goto((-screen_half_x)+temp, screen_half_y)
# 좌표에 해당하는 블록에 사각형을 그리는 함수
def draw_rect(x, y, color) :
t.penup()
point_x = (-screen_half_x) + (split_unit_x * (x-1))
point_y = screen_half_y - (split_unit_y * (y-1))
t.goto(point_x, point_y )
t.fillcolor(color)
t.begin_fill()
t.pendown()
t.goto(point_x+split_unit_x, point_y)
t.goto(point_x+split_unit_x, point_y-split_unit_y)
t.goto(point_x, point_y-split_unit_y)
t.goto(point_x, point_y)
t.end_fill()
t.penup()
#픽셀 그림 그리기
back_colors=["lavenderblush", "pink", "peru"]
color_index = 0
split_count_half_x = int(split_count_x/2)
split_count_half_y = int(split_count_y/2)
tree_thick = int(split_count_x/10)
tree_height = split_count_half_y-split_count_half_y/2
for i in range(1, split_count_y+1) :
c = i / split_count_y
for j in range(1, split_count_x+1) :
b = random.random()
if b <= c :
if j > split_count_half_x-tree_thick and j < split_count_half_x+tree_thick and i > tree_height :
color_index = 2
elif i >= int(split_count_y*0.9) and j > split_count_half_x-tree_thick-int(i/10) and j < split_count_half_x+tree_thick+int(i/10) and i > tree_height :
color_index = 2
else :
color_index = 0
else :
color_index = 1
draw_rect(j,i,back_colors[color_index])
#픽셀 꽃 그리기 함수
def draw_flower(x, y, color_middle, color_leaf) :
draw_rect(x,y,color_middle)
draw_rect(x,y-1,color_leaf)
draw_rect(x+1,y,color_leaf)
draw_rect(x,y+1,color_leaf)
draw_rect(x-1,y,color_leaf)
#랜덤한 위치에 픽셀 꽃 그리기
flower_colors=["palevioletred", "hotpink"]
check_list=[' ']
is_duplicate = False
count_bad = 0
count_good = 0
flower_count= 10
fail_limit=10
while count_bad < fail_limit and count_good < flower_count:
x = random.randint(2, split_count_x-2)
y = random.randint(2, split_count_y-2)
xy = int(str(x) + str(y))
for j in check_list :
if(j == xy) :
is_duplicate = True
count_bad += 1
if is_duplicate :
if_duplicate = False
continue
else :
check_list.append(xy)
check_list.append(xy-1)
check_list.append(xy-2)
check_list.append(xy+1)
check_list.append(xy+2)
check_list.append(int(str(x-1) + str(y)))
check_list.append(int(str(x-2) + str(y)))
check_list.append(int(str(x+1) + str(y)))
check_list.append(int(str(x+2) + str(y)))
count_good += 1
draw_flower(x,y,flower_colors[0],flower_colors[1])
Comments