과거 프로그래밍 자료들/python
모두의 파이썬 - Day 17 터틀런 만들기
평부
2022. 9. 15. 18:09
https://thebook.io/007026/day17/01/
모두의 파이썬: 20일 만에 배우는 프로그래밍 기초(개정판): 01 | 터틀런이란?
thebook.io
[조건 1]
- 거북이(t), 악당거북이(te, red), 먹이(ts, green) 3개가 등장
- 일정한 시간마다 거북이와 악당 거북이를 움직이고(거북이 뒤를 악당 거북이가 따라다님)
- 거북이는 화살표로 이동
- 거북이가 먹이를 먹었는지, 악당 거북이에게 붙잡히지 않았는지 확인
- 악당 거북이에게 거북이가 붙잡혔을 경우 더이상 움직이지 않음
01
[조건 1 코드]
# 타이머 기능 = 0.1초 마다 play함수를 실행하도록 함
import turtle as t
import random
# 악당 거북이
te = t.Turtle() # 거북이 추가 시 Turtle은 대문자
te.shape("turtle")
te.color("red")
te.speed(0)
te.up()
te.goto(0, 200)
# 먹이
ts = t.Turtle()
ts.shape("circle")
ts.color("green")
ts.speed(0)
ts.up()
ts.goto(0, -200)
# ←, →, ↑, ↓
def turn_right(): # 오른쪽으로 방향 바꿈
t.setheading(0)
def turn_left(): # 왼쪽으로 방향 바꿈
t.setheading(180)
def turn_up(): # 위로 방향 바꿈
t.setheading(90)
def turn_down(): # 아래로 방향 바꿈
t.setheading(270)
# 실제 거북이 움직이기
def play():
t.forward(10) #방향키로 이동 전까지 계속 앞으로 10씩 감
ang = te.towards(t.pos())
te.setheading(ang) # 악당 거북이가 거북이를 바라보게 함
te.forward(9)
if t.distance(ts) < 12: # 거북이와 먹이 거리가 12미만이면
star_x = random.randint(-230, 230)
star_y = random.randint(-230, 230)
ts.goto(star_x, star_y) # 먹이가 랜덤하게 옮김
if t.distance(te) >= 12: # 거북이와 악당 거리가 12 이상이면
t.ontimer(play, 100) # 0.1초 후 play 함수 실행(계속 진행)
# 거리가 12 미만이면 게임 실행되지 않음
#배경은 500*500 크기, 오렌지색
t.setup(500, 500)
t.bgcolor("orange")
#거북이 색 : 하얀색, 방향키에 따라 움직임
t.shape("turtle")
t.speed(0)
t.up()
t.color("white")
t.onkeypress(turn_right, "Right")
t.onkeypress(turn_left, "Left")
t.onkeypress(turn_up, "Up")
t.onkeypress(turn_down, "Down")
t.listen() #사용자 입력이 잘 처리되도록 거북이 그래픽 창에 포커스를 줌
play()
t.mainloop()
[조건 2]
- 악당 거북이 2마리라면?
- 두 악당 거북이 중 한 마리만 먼저 잡으면 게임 오버
[조건 2 코드]
# 타이머 기능 = 0.1초 마다 play함수를 실행하도록 함
import turtle as t
import random
# 악당 거북이 1
te1 = t.Turtle() # 거북이 추가 시 Turtle은 대문자
te1.shape("turtle")
te1.color("red")
te1.speed(0)
te1.up()
te1.goto(-50, 200)
# 악당 거북이 2
te2 = t.Turtle() # 거북이 추가 시 Turtle은 대문자
te2.shape("turtle")
te2.color("red")
te2.speed(0)
te2.up()
te2.goto(50, 200)
# 먹이
ts = t.Turtle()
ts.shape("circle")
ts.color("green")
ts.speed(0)
ts.up()
ts.goto(0, -200)
# ←, →, ↑, ↓
def turn_right(): # 오른쪽으로 방향 바꿈
t.setheading(0)
def turn_left(): # 왼쪽으로 방향 바꿈
t.setheading(180)
def turn_up(): # 위로 방향 바꿈
t.setheading(90)
def turn_down(): # 아래로 방향 바꿈
t.setheading(270)
# 악당 거북이가 하는 행동들(중복되므로 함수로 빼줌)
def villain(te):
ang = te.towards(t.pos())
te.setheading(ang) # 악당 거북이가 거북이를 바라보게 함
te.forward(9)
# 실제 거북이 움직이기
def play():
t.forward(10)
# 악당 거북이 1
villain(te1)
# 악당 거북이 2
villain(te2)
if t.distance(ts) < 12: # 거북이와 먹이 거리가 12미만이면
star_x = random.randint(-230, 230)
star_y = random.randint(-230, 230)
ts.goto(star_x, star_y) # 먹이가 랜덤하게 옮김
if t.distance(te1) >= 12 or t.distance(te2) >= 12: # 거북이와 악당 거리가 12 이상이면
t.ontimer(play, 100) # 0.1초 후 play 함수 실행(계속 진행)
# 거리가 12 미만이면 게임 실행되지 않음
t.setup(500, 500)
t.bgcolor("orange")
t.shape("turtle")
t.speed(0)
t.up()
t.color("white")
t.onkeypress(turn_right, "Right")
t.onkeypress(turn_left, "Left")
t.onkeypress(turn_up, "Up")
t.onkeypress(turn_down, "Down")
t.listen()
play()
t.mainloop()