개발 꿀팁/PYTHON

[파이썬은 오리를 그릴 수 있다]

Jammie 2022. 11. 21. 14:24
반응형

코드 상세
  
파이썬이 오리를 그리는 원리는 터틀 라이브러리를 사용하여 먼저 머리와 몸의 윤곽을 그린 다음 눈, 손, 발, 머리카락 등 다양한 모듈을 그리는 것입니다.
  

1 가져오기
먼저 본문에서 로드해야 하는 라이브러리를 가져오고, 일부 라이브러리가 설치되지 않아 실행 코드가 잘못되면 아나콘다 프롬프트에서 pip 방법으로 설치할 수 있습니

# -*- coding: UTF-8 -*-
'''
import os
import pygame
import turtle as t 
from time import sleep

이 논문은 os, pygame, turtle 및 time의 4개 라이브러리만 사용하여 더 적은 라이브러리를 적용합니다.

os 라이브러리는 파일을 읽을 위치를 설정할 수 있습니다.

pygame 라이브러리는 그리기 과정을 더 재미있게 하기 위해 그리기 과정에 배경음악을 추가했습니다.

터틀 라이브러리는 그림 라이브러리로, 캔버스에 수학적 논리 제어 코드로 그림을 완성할 수 있는 브러시를 주는 것과 같습니다.

time 라이브러리는 시간 관리 라이브러리이며, 이 기사에서는 도면의 일시 중지 시간을 설정하는 데 사용됩니다.

  

2 음악 재생
이어서 pygame 라이브러리를 사용하여 배경음악을 재생합니다

#음악을 틀다
print('음악 재생')
pygame.mixer.init( )
pygame.mixer.music.load
pygame.mixer.music.set_volume(0.5)
pygame.mixer.music.play(1, 10)

이 부분의 코드와 전체 코드는 박리되어 있으며, 택을 선택하여 처음에 이 코드를 넣거나 직접 삭제할 수 있습니다.음악 재생을 선택하면 코드 music.load 함수에 음악을 넣고 싶은 컴퓨터의 로컬 주소를 입력해야 합니다.

  

3 오리의 머리와 몸 바깥 실루엣까지 그려준다
그런 다음 오리에 대한 본격적인 그리기 과정에 들어가 머리와 몸 바깥 윤곽을 먼저 그립니다

t.title
t.speed(10)
#t.screensize(1000, 800)
t.setup(startx=0, starty=0, width=800, height=600)
t.penup( )
t.goto(150, 50)
t.pendown( )
t.color('#FFCC00')
t.pendsize(1)
t.color('yellow')
t.begin_fill( )
t.setheading(30)
#화두
print('화두')
t.circle(40, 70)
t.circle(60, 160)
t.circle(40, 70)
#몸을 그리다
print('바디를 그리다')
t.setheading(-150)
t.circle(100, 30)
t.circle(70, 90)
t.circle(100, 60)
t.circle(70, 90)
t.circle(100, 30)
t.end_fill( )

키코드 상세:

t.pensize(width): 브러시의 크기를 설정합니다.

t.color(color): 브러시의 색상을 설정합니다.

t.penup(): 브러시를 들어 올립니다. 일반적으로 다른 곳에서 그림을 그리는 데 사용됩니다.

t.goto(x,y)는 브러시가 특정 위치로 이동하고 매개변수는 (x,y)이며, 이는 오는 가로 및 세로 좌표에 해당합니다.

t.pendown(): 브러시를 내려놓고 일반적으로 penup과 조합하여 사용한다.

t.left(degree) : 붓을 왼쪽으로 몇 도 돌리고 괄호 안에 도수를 나타낸다.

t.right(degree) : 붓을 오른쪽으로 몇 도 돌리면 괄호 안에 도수를 나타낸다.

t.circle(radius, extent, steps): radius는 반지름을 말하며 양수이면 반지름이 작은 거북이의 왼쪽 radius에서 멀고 음수이면 반지름이 작은 거북이의 오른쪽 radius에서 멀고 extent는 호를 가리키며 steps는 차수를 나타냅니다.

외부 윤곽의 핵심은 circle 함수의 반지름과 호를 조정하여 곡선의 호를 조정하여 오리에 도달할 수 있는 윤곽을 더 매끄럽게 만드는 것입니다.

  

4 눈을 그리다
머리와 몸의 바깥 윤곽을 그린 후 다른 구성 요소를 모듈별로 그릴 수 있습니다. 이 소절은 눈을 그립니다

그림 왼쪽 눈.#
('그림 왼쪽 눈'). print
t.penup ( )
(95에 85) t.goto
t.pendown ( )
('white'). t.color
t.begin_fill ( )
(20) t.setheading
(3) t.pensize
(1570) t.circle
(120) t.setheading
(5015) t.circle
(10) t.left
(20,100) t.circle
(10) t.left
(8,90) t.circle
(40,30) t.circle
t.end_fill ( )
t.penup ( )
(80-102) t.goto
t.pendown ( )
('black'). t.color
t.begin_fill ( )
(0) t.setheading
(2) t.pensize
(360, 1.5) t.circle
t.end_fill ( )
그림 오른쪽 눈.#
('그림 오른쪽 눈'). print
t.penup ( )
(135,95) t.goto
t.pendown ( )
('white'). t.color
t.begin_fill ( )
(160) t.setheading
(3) t.pensize
(70- 15) t.circle
(60) t.setheading
(50- 15) t.circle
(10) t.right
(100- 20) t.circle
(10) t.right
(90- 8) t.circle
(30- 40) t.circle
t.end_fill ( )
t.penup ( )
(102140) t.goto
t.pendown ( )
('black'). t.color
t.begin_fill ( )
(0) t.setheading
(2) t.pensize
(360, 1.5) t.circle
t.end_fill ( )

5 화수
이 소절에서는 그림자의 코드를 소개하는데, 더 잘 보이기 위해 주의해야 할 것은 손의 대칭입니다

#왼손을 그리다
print('왼손 그리기')
t.penup( )
t.goto(60, 42)
t.pendown( )
t.color('#FFCC00')
#t.color('yellow')
t.begin_fill( )
t.setheading(160)
t.circle(20, 50)
t.right(30)
t.circle(90, 50)
t.forward(5)
t.circle(5,180)
t.setheading(-120)
t.forward(5)
t.circle(6,180)
t.right(20)
t.circle(-90, 50)
t.end_fill( )
#오른손을 그리다
print('오른손 그리기')
t.penup( )
t.goto(160, 42)
t.pendown( )
t.color('#FFCC00')
#t.color('yellow')
t.begin_fill( )
t.setheading(-15)
t.circle(10, 80)
t.right(18)
t.circle(80, 42)
t.circle(-5, 180)
t.setheading(80)
t.forward(1)
t.circle(-6, 180)
t.setheading(80)
t.circle(-5, 180)
t.left(10)
t.circle(-90, 40)
t.circle(-80, 30)
t.end_fill( )

6 입과 발을 그리다
이 소절에서는 입과 발을 그리는 코드를 소개합니다

#입술을 부리다
print('입모양 그리기')
t.penup( )
t.goto(114, 85)
t.pendown( )
t.color('#FFFF99')
#t.color('#FFCC00')
#t.color('black')
t.begin_fill( )
t.setheading(180)
t.forward(6)
t.setheading(-130)
t.circle(-50, 40)
t.setheading(-70)
t.circle(-50, 50)
t.circle(20, 90)
t.circle(50, 60)
t.circle(20, 90)
t.right(15)
t.circle(-50, 50)
t.left(120)
t.circle(-50, 47)
t.end_fill( )
#왼발을 그리다
print('왼발을 그리다')
t.penup( )
t.goto(55,-78)
t.pendown( )
t.color('#FFFF99')
t.begin_fill( )
t.setheading(-115)
t.forward(40)
t.setheading(50)
t.circle(-12, 160)
t.setheading(70)
t.circle(-10, 160)
t.setheading(85)
t.forward(39)
t.setheading(170)
t.circle(-100, 18)
t.end_fill( )
#오른발을 그리다
print('오른발 그리기')
t.penup( )
t.goto(113,-97)
t.pendown( )
t.color('#FFFF99')
t.begin_fill( )
t.setheading(-100)
t.forward(35)
t.setheading(60)
t.circle(-10, 160)
t.setheading(80)
t.circle(-10, 160)
t.setheading(90)
t.forward(47)
t.setheading(197)
t.circle(-100, 18)
t.end_fill( )

7 머리를 그리다
이 소절에서는 머리 코드를 그리는 것에 대해 설명합니다

#머리를 그리다
print('머리 그리기')
#첫머리
t.penup( )
t.goto(92, 138)
t.pendown( )
t.color('black')
t.begin_fill( )
t.pensize(1)
t.setheading(115)
t.circle(-100, 15)
t.setheading(20)
t.circle(80,6)
t.setheading(-76)
t.circle(100, 16)
t.setheading(180)
t.circle(30, 20)
t.end_fill( )
#두 번째 머리
t.penup( )
t.goto(106, 140)
t.pendown( )
t.color('black')
t.begin_fill( )
t.pensize(1)
t.setheading(105)
t.circle(-100, 18)
t.setheading(10)
t.circle(80,7)
t.setheading(-92)
t.circle(100, 20)
t.setheading(160)
t.circle(30, 16)
t.end_fill( )
#세 번째 머리
t.penup( )
t.goto(123, 138)
t.pendown( )
t.color('black')
t.begin_fill( )
t.pensize(1)
t.setheading(75)
t.circle(100, 17)
t.setheading(-5)
t.circle(80,7)
t.setheading(-100)
t.circle(120, 15)
t.setheading(160)
t.circle(30, 20)
t.end_fill( )

8글자를 쓰다
마지막으로 회동 문자를 쓰는 코드를 소개합니다

#글을 쓰다
print('문자 쓰기')
def write_1(x, y, ss):
t. hideturtle( )
t.penup( )
t.goto(x, y)
t.pendown( )
t.pencolor('black')
#t.write('퀴즈', font=('Times New Roman', 12, 'normal'))
t.write(ss, font=('Times New Roman', 20, 'normal'))
def write_all():
write_1(-130, 120, '절')
write_1(-130, 80, '일')
write_1(-130, 40, '빠르다')
write_1(-130, 0, '락')
write_1(-130, -40, '!')
defundos():
t.undo( )
t.undo( )
t.undo( )
t.undo( )
t.undo( )
t.undo( )
t.undo( )
t.undo( )
t.undo( )
t.undo( )
t.undo( )
t.undo( )
t.undo( )
t.undo( )
t.undo( )
t.undo( )
t.undo( )
t.undo( )
t.undo( )
t.undo( )
t.undo( )
t.undo( )
t.undo( )
t.undo( )
while 1:
write_all( )
sleep(1)
undos( )
반응형