Turtle Game 3 - 울타리 만들기 > Turtle 모듈로 게임 만들기

본문 바로가기
사이트 내 전체검색

회원로그인

올서베이넷
무료 온라인 설문 사이트
OVITII
웹 프레젠테이션 도구

Turtle 모듈로 게임 만들기

Turtle Game 3 - 울타리 만들기

페이지정보

글쓴이 관리자 조회 43,466 조회 날짜 19-06-19 01:38 / Update:19-06-19 22:51
댓글 0 댓글

SNS 공유

  • 트위터로 보내기
  • 페이스북으로 보내기
  • 구글플러스로 보내기

내용

Turtle Game 3 - 울타리 만들기

 

앞선 강좌에서 거북이의 방향과 속도를 제어하는 것을 구현하였다.

 

하지만 여전히 거북이는 화면 밖으로 벗어날 수 있고, 화면을 벗어난 거북이는 어디에 있는지 찾기가 힘들어진다.

 

따라서 화면(window) 안에 울타리를 만들고, 울타리 밖으로 벗어나지 못하게 하는 코드를 추가해본다.

 

 

1. 울타리 만들기

 

Turtle 모듈에서 Turtle 객체가 생성되는 지점은 정 가운데이다.

좌표로써 말하면 정 가운데의 X, Y 좌표값이 (0, 0)인 지점이 된다.

 

1269734546_1560928241.5771.png

 

※ 좌표에 대한 예제는 다음 링크에서 확인한다. https://www.jbmpa.com/python_tip/10

 

만약 생성된 화면안에 울타리를 만든다고 한다면, 아래 그림의 파란색 라인처럼 생각할 수 있다. 

 

1269734546_1560928859.8055.png

 

파란색 라인의 각 모서리의 좌표는 각각 다음과 같다.

왼쪽 위 ( -300, 300)

오른쪽 위 (300,300)

오른쪽 아래 (300, -300)

왼쪽 아래 (-300, -300)

 

위의 좌표를 생각하면서, Turtle 모듈을 이용해서 사각형을 만드는 방법을 전체적으로 구상해보면 다음과 같다.

 

1) Turtle 객체 mypen을 한 개 생성한다.

2) mypen의 최초 위치는 (0,0) 이므로, 왼쪽 위(-300, 300)로 이동 시켜준다.'

3) 왼쪽 위로 이동할 때, 선이 그려지면 안되므로 이동하기전에 penup()을 한다.

4) 왼쪽 위로 이동하였으면, 오른쪽 위(300, 300)까지 이동한다.

5) 오른쪽 위로 이동할때는 선이 그려져야 하므로, pendown()을 한다.

6) 이동 거리는 300 + 300 이므로 600이 된다.

7) 오른쪽 위에 도달하였으면, 아래로 선을 그어야 한다. Turtle 객체는 기본적으로 오른쪽으로 향하고 있기 때문에 아래로 방향을 바꾸려면 오른쪽으로 90도 회전하면 된다. 따라서 right(90)을 해준다.

8) 오른쪽 위에서 오른쪽 아래로 이동한다. 이동 거리는 600이다.

9) 오른쪽 아래에 도달하였으면 다시 오른쪽으로 90도 회전(right(90))한다.

10) 앞으로 600만큼 이동한다. 방향은 90도를 두번 회전하였기 때문에 오른쪽 방향에서 180도, 즉 왼쪽을 향하게 된다. 따라서 거북이는 왼쪽 아래 모서리로 진행한다.

11) 왼쪽 아래에 도달하였으면 다시 오른쪽으로 90도 회전한다. 

12) 앞으로 600만큼 이동한다. 방향은 위쪽이 되므로 최종도착지점은 왼쪽 위(-300, 300)가 된다.

 

 

위에서 구상한 내용을 코드로 작성해 보자.

 

# Turtle 객체를 생성하여 mypen에 저장한다. shape를 지정하지 않으면 기본 값인 "classic"이 된다.

mypen = t.Turtle()

 

# 왼쪽 위로 이동하기 위해서 펜을 든다. 중앙에서 왼쪽 위까지 선이 그려지는 것을 방지한다.
mypen.penup()

 

# mypen 객체를 왼쪽 위(-300, 300)으로 이동한다. 객체를 이동시키는 메서드는 setposition() 이다.
mypen.setposition(-300, 300)

 

# 왼쪽 위로 이동을 하였으면, 펜을 다시 내린다. 선을 긋기 위함이다.
mypen.pendown()

 

# 펜사이즈를 3으로 한다. 
mypen.pensize(3)

 

사각형(울타리)을 그리기 위한 과정은 7)에서 12)까지의 과정이다.

왼쪽 위, 오른쪽 위, 오른쪽 아래. 왼쪽 아래 등으로 복잡한 것 같지만 자세히 보면 매우 단순한 것을 알 수 있다.

 

즉, 앞으로 이동 후 방향 회전, 앞으로 이동 후 방향 회전이 반복된다는 것을 알 수 있다.

 

따라서 앞으로 600만큼 이동, 방향 90도회전을 4번 반복하는 코드를 작성한다.

 

for x in range(4):
    mypen.forward(600)
    mypen.right(90)

 

mypen 객체는 울타리를 그리고 나면 더이상 할 일이 없다. 따라서 mypen 객체의 shape를 안 보이도록 한다.

 

mypen.hideturtle()

 

 

울타리를 만드는 코드는 주인공 거북이보다 먼저 생성되어야 하므로, 거북이를 생성하는 코드 위쪽에 추가한다.

 

모든 코드를 종합하면 아래와 같다.

import turtle as t

 

#스크린 객체 생성
screen = t.Screen()
#스크린 배경색 지정
screen.bgcolor("lightgreen")

 

#Draw border
mypen = t.Turtle()
mypen.penup()
mypen.setposition(-300, 300)
mypen.pendown()
mypen.pensize(3)

 

for x in range(4):
    mypen.forward(600)
    mypen.right(90)


mypen.hideturtle()

 

#Turtle 객체 p 생성
p = t.Turtle()
#p 객체의 모양을 거북이로 만들기
p.shape("turtle")
#p 객체 크기 설정
p.turtlesize(2,2)
#p 객체 색상 설정, 
#색상은 색상 이름 또는 색상 코드(#FFFFFF) 등을 이용하여 설정 할 수 있다.
p.color("blue")
#거북이를 따라다니는 선을 제거
p.penup()

#거북이의 움직임 속도
speed = 1

 

def turnleft():
    p.left(30)

 

def turnright():
    p.right(30)

 

def increasespeed():
    global speed
    speed += 1

 

def decreasespeed():
    global speed
    speed -= 1

 

screen.listen()
screen.onkey(turnleft, "Left")
screen.onkey(turnright, "Right")
screen.onkey(increasespeed, "Up")
screen.onkey(decreasespeed, "Down")


while True:
    p.forward(speed)

 

 

실행 결과

1269734546_1560930046.6064.png

 

1269734546_1560930062.7766.png

 

1269734546_1560930074.4624.png

 

1269734546_1560930087.5308.png

 

 

Turtle Game 3 - 울타리 만들기 끝

댓글목록 sfs

총 1 건 , 1 페이지
게시물 검색
Turtle 모듈로 게임 만들기 목록
번호 제목 글쓴이 조회 날짜
열람중 관리자 43467 06-19
GNUBOARD_M
Copyright © JBMPA.com All rights reserved.