본문 바로가기
프로그램

[파이썬] 문제 : 터틀(turtle) 로봇 청소기 이동 경로와 같이 그리기

by 오디세이99 2023. 5. 29.
728x90
반응형

import turtle
import random

s_w = 800
s_h = 500
turtle.setup (width=s_w, height=s_h)
t=turtle.Turtle()       # 터틀
t.hideturtle()
t.speed(0)              # 속도 빠르게

t.penup()               # 펜 들기
x = (s_w / 2) - 50      # 왼쪽에 여유를 두고 이동할 x 좌표
y = (s_h / 2) - 50
t.goto(-x, y)           # 이동
t.pendown()             # 펜 내리기
t.color('brown')        # 색 지정
t.pensize(20)           # 선 두께
limit_left = -x         # 왼쪽 이동 제한 
limit_right = x         # 오른쪽 이동 제한
limit_bottom = -y       # 아래 이동 제한
while True:
    if t.ycor() < limit_bottom:   # 현재 y 좌표가 아래쪽 이동제한에  도달하면 반복문 종료
        break
    t.forward(x*2)      # 좌측에서 우측으로 이동
    t.right(90)         # 아래로 방향 바꿈
    t.forward(30)       # 아래로 이동
    t.right(90)         # 좌측으로 방향 바꿈
    t.forward(x*2)      # 좌측으로 이동
    t.left(90)          # 아래로 방향 바꿈
    t.forward(30)       # 아래롷 이동
    t.left(90)          # 우측으로 방향 바꿈
            
turtle.done()

try:
    turtle.bye()
except:
    print("bye")

 

 

클래스로 만들었을때 코드

import turtle
import random

class Robot():
    def __init__(self, w, h):
        self.s_w = w
        self.s_h = h
        turtle.setup (width=self.s_w, height=self.s_h)
        self.t=turtle.Turtle()           # 터틀
        self.t.hideturtle()
        self.t.speed(0)                  # 속도 빠르게

    def run(self):        # 그리는 함수. x,y 좌표. rad:반지름. co:칼라
        self.t.penup()               # 펜 들기
        x = (self.s_w / 2) - 50
        y = (self.s_h / 2) - 50
        self.t.goto(-x, y)            # 이동
        self.t.pendown()             # 펜 내리기
        self.t.color('brown')           # 색 지정
        self.t.pensize(20)            # 선 두께
        limit_left = -x
        limit_right = x
        limit_bottom = -y
        while True:
            if self.t.ycor() < limit_bottom:
                break
            self.t.forward(x*2)
            self.t.right(90)
            self.t.forward(30)
            self.t.right(90)
            self.t.forward(x*2)
            self.t.left(90)
            self.t.forward(30)
            self.t.left(90)
            
robot = Robot(800, 500)
robot.run()

turtle.done()

try:
    turtle.bye()
except:
    print("bye")
728x90
반응형

댓글