λ‘œλ΄‡κ΅μœ‘/2회차_파이썬

[ν„°ν‹€ κ·Έλž˜ν”½] μ΄λ²€νŠΈμ™€ ν•¨μˆ˜

SSEMπŸ‘Œ 2022. 1. 11. 19:35

1. μ΄λ²€νŠΈλž€?

  - μ΄λ²€νŠΈλŠ” ν”„λ‘œκ·Έλž¨μ— μ˜ν•΄ κ°μ§€λ˜κ³  처리될 수 μžˆλŠ” λ™μž‘μ„ λ§ν•©λ‹ˆλ‹€.

    예) ν‚€λ³΄λ“œλ₯Ό λˆŒλ €μ„ λ•Œ, 마우슀λ₯Ό ν΄λ¦­ν–ˆμ„ λ•Œ

  - νŠΉμ • μ΄λ²€νŠΈκ°€ λ°œμƒν•˜λ©΄ μ •ν•΄μ§„ μ½”λ“œκ°’μ„ κ°€μ§„ ν•¨μˆ˜κ°€ μ‹€ν–‰λ©λ‹ˆλ‹€.

 

이벀트 예제1

  • Turtle λͺ¨λ“ˆμ€ ν‚€λ³΄λ“œ μž…λ ₯을 Screen 객체λ₯Ό μ‚¬μš©ν•΄μ„œ μ²˜λ¦¬ν•©λ‹ˆλ‹€.
  • Screen κ°μ²΄μ—λŠ” ν‚€λ³΄λ“œμ™€ 마우슀 μž…λ ₯을 μ œμ–΄ν•˜λŠ” λ‹€μ–‘ν•œ ν•¨μˆ˜μ™€ κΈ°λŠ₯이 μžˆμŠ΅λ‹ˆλ‹€.
  • Screen 객체λ₯Ό λ§Œλ“€μ§€ μ•Šκ³  λ°”λ‘œ 이벀트λ₯Ό μ²˜λ¦¬ν•˜λŠ” 방법도 μžˆμŠ΅λ‹ˆλ‹€.

 

κΈ°λ³Έ 예제 ν‚€λ³΄λ“œ ν‚€(Key)
screen = turtle.Screen()
screen.onkey(ν•¨μˆ˜λͺ…, 'μ½”λ“œ')
screen.listen()




μœ„μͺ½ ν™”μ‚΄ν‘œ 'Up'
μ•„λž˜μͺ½ ν™”μ‚΄ν‘œ 'Down'
μ™Όμͺ½ ν™”μ‚΄ν‘œ 'Left'
였λ₯Έμͺ½ ν™”μ‚΄ν‘œ 'Right'

# ν‚€λ³΄λ“œ ν‚€ : μ•ŒνŒŒλ²³ μ†Œλ¬Έμž, space λ“± ...

# onkey(ν•¨μˆ˜λͺ…, 'μ½”λ“œ') - ν‚€λ³΄λ“œλ₯Ό μ˜€λž«λ™μ•ˆ λˆŒλŸ¬λ„ ν•œλ²ˆλ§Œ μ΄λ²€νŠΈκ°€ λ°œμƒ

# onkeypress(ν•¨μˆ˜λͺ…,'μ½”λ“œ') - ν‚€λ³΄λ“œλ₯Ό μ˜€λž«λ™μ•ˆ λˆ„λ₯΄λ©΄ μ§€μ†μ μœΌλ‘œ μ΄λ²€νŠΈκ°€ λ°œμƒ

예제 μ†ŒμŠ€(22-key_event.py) 예제 μ†ŒμŠ€(22-key_event2.py)
import turtle as t

t.shape('turtle')
scr = t.Screen()

def right():
    t.setheading(0)
    t.forward(50)
def up():
    t.setheading(90)
    t.forward(50)
def left():
    t.setheading(180)
    t.forward(50)   
def down():
    t.setheading(270)
    t.forward(50)

scr.onkey(right,'Right')
scr.onkey(up,'Up')
scr.onkey(left,'Left')
scr.onkey(down,'Down')

scr.listen()

#t.mainloop()
import turtle as t

t.shape('turtle')

def right():
    t.setheading(0)
    t.forward(50)
def up():
    t.setheading(90)
    t.forward(50)
def left():
    t.setheading(180)
    t.forward(50)   
def down():
    t.setheading(270)
    t.forward(50)

t.onkey(right,'Right')
t.onkey(up,'Up')
t.onkey(left,'Left')
t.onkey(down,'Down')

t.listen()

#t.mainloop()

 

μ‹€μŠ΅1) ν‚€λ³΄λ“œ μ•ŒνŒŒλ²³μ„ μž…λ ₯ν•˜λ©΄ μ„ μ˜ 색깔이 λ°”λ€Œλ„λ‘ ν”„λ‘œκ·Έλž¨μ„ μˆ˜μ •ν•΄ λ΄…μ‹œλ‹€.

 

μ‹€μŠ΅2) 'space' ν‚€λ₯Ό λˆ„λ₯΄λ©΄ 그림이 μ§€μ›Œμ§€λ„λ‘ ν”„λ‘œκ·Έλž¨μ„ μˆ˜μ •ν•΄ λ΄…μ‹œλ‹€.

 

 

이벀트 예제2

  • 마우슀둜 화면을 ν΄λ¦­ν–ˆμ„ λ•Œμ˜ 이벀트λ₯Ό μ²˜λ¦¬ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • 마우슀λ₯Ό ν΄λ¦­ν•œ 점의 μ’Œν‘œ(x,y)λ₯Ό 인수둜 ν•¨μˆ˜κ°€ μ‹€ν–‰λ©λ‹ˆλ‹€.

 

예제 μ†ŒμŠ€(23-click_event.py)  
import turtle as t

t.speed(0)
t.pensize(2)
t.hideturtle()
t.onscreenclick(t.goto)

t.listen()

#t.mainloop()
t.goto #거뢁이에 미리 μ •μ˜λœ goto ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•©λ‹ˆλ‹€.
         #마우슀 ν΄λ¦­ν•œ μœ„μΉ˜λ‘œ μ›€μ§μž„

 

2. 별 그리기

  별을 κ·Έλ¦¬λŠ” ν•¨μˆ˜λ₯Ό μ •μ˜ν•˜μ—¬ 화면에 별을 그렀보도둝 ν•˜κ² μŠ΅λ‹ˆλ‹€. 첫 번째 μ˜ˆμ œμ—μ„œλŠ” μ§€μ •ν•œ μœ„μΉ˜μ— 별을 그렀보고, 두 번째 μ˜ˆμ œμ—μ„œλŠ” 이λ₯Ό μˆ˜μ •ν•˜μ—¬ μž„μ˜μ˜ μœ„μΉ˜μ— μ—¬λŸ¬ κ°€μ§€ 크기의 별 20개λ₯Ό 그렀보렀고 ν•©λ‹ˆλ‹€. λ§ˆμ§€λ§‰ μ˜ˆμ œμ—μ„œλŠ” 마우슀λ₯Ό ν΄λ¦­ν•˜λŠ” 곳에 별을 κ·Έλ €λ³΄κ² μŠ΅λ‹ˆλ‹€.

예제 μ†ŒμŠ€(24-star_def.py)  
import turtle as t

def star():
    t.begin_fill()
    for i in range(5):
        t.forward(30)
        t.left(144)
    t.end_fill()

t.bgcolor('black')
t.color('yellow')
t.ht()
t.speed(10)

star()

t.penup()
t.goto(100,100)
t.pendown()
star()

 

 

예제 μ†ŒμŠ€(24-star_def2.py)  
import turtle as t
import random as r

def star(x,y):
    t.penup()
    t.goto(x,y)
    t.pendown()
    
    size = r.randint(15,30)
    
    t.begin_fill()
    for i in range(5):
        t.forward(size)
        t.left(144)
    t.end_fill()

t.bgcolor('black')
t.color('yellow')
t.ht()
t.speed(10)

for i in range(20):
    star(r.randint(-300,300),r.randint(50,300))

 

 

예제 μ†ŒμŠ€(25-star_click.py)  
import turtle as t
import random as r

def star(x,y):
    t.penup()
    t.goto(x,y)
    t.pendown()
    
    size = r.randint(15,30)
    
    t.begin_fill()
    for i in range(5):
        t.forward(size)
        t.left(144)
    t.end_fill()

t.bgcolor('black')
t.color('yellow')
t.ht()
t.speed(10)

t.onscreenclick(star)

t.listen()
#t.mainloop()

 

3. λˆˆμ†‘μ΄ 그리기

예제 μ†ŒμŠ€(26-snow_def.py)  
import turtle as t
import random as r

def snow():
    snowsize = r.randint(8,12)
    for i in range(12):
        t.forward(snowsize)
        t.backward(snowsize)
        t.right(360/12)

t.bgcolor('black')
t.color('white')
t.pensize(2)

t.ht()
t.speed(0)

for j in range(20):
    t.penup()
    x = r.randint(-350,350)
    y = r.randint(0,350)
    t.goto(x,y)
    t.pendown()
    snow()