관리 메뉴

프로그래밍 삽질 중

모두의 파이썬 - Day 17 터틀런 만들기 본문

과거 프로그래밍 자료들/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()