Turtle Game 2 - Turtle 움직임 제어하기 > Turtle 모듈로 게임 만들기

본문 바로가기

사이트 내 전체검색

이전으로Turtle 모듈로 게임 만들기

Turtle Game 2 - Turtle 움직임 제어하기

페이지정보

글쓴이 관리자 조회 52,420 조회 날짜 19-06-19 00:31 / U:20-01-29 15:41
댓글 0댓글

SNS 공유

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

내용

Turtle Game 2 - Turtle 움직임 제어하기

 

앞선 강좌에서 turtle 모듈을 이용하여 거북이를 생성하고 움직이는 것을 구현하였다.

 

하지만 while 구문에 의해서 거북이는 앞으로만 움직였으며, 화면 밖으로 넘어가서도 여전히 앞으로만 움직이고 있을 것이다.

 

이제 키보드의 방향키를 이용하여 거북이의 움직임을 제어하는 코드와 거북이의 속도를 제어하는 코드를 추가해본다.

 

 

1. 키보드의 입력 대기

 

Turtle 모듈의 Screen() 객체는 화면(window) 안에서 일어나는 이벤트를 관리한다.

따라서 키보드의 입력을 기다리기 위해서 listen() 메서드를 이용하여 키보드의 입력, 즉 키보드 입력 이벤트를 대기하는 코드를 추가한다.

 

screen.listen()

 

 

 

2. 키보드 이벤트 제어

 

키보드의 입력 이벤트는 스크린 객체의 onkey() 메서드로 체크할 수 있다. 키보드 입력 이벤트 메서드는 아래와 같다.

 

onkey() | onkeyrelease()  - 키보드의 키를 눌렀다가 뗄 때 발생하는 이벤트

onkeypress() - 키보드의 키를 누르고 있을 때 발생하는 이벤트

 

추가적으로 마우스 클릭 이벤트에 대한 메서드는 아래와 같다.

 

onclick() | onscreenclick() - 마우스를 클릭했을 때 발생하는 이벤트

 

 

onkey() 이벤트를 사용하기 위해서는 아래와 같은 형태로 사용하면 된다.

 

screen.onkey(함수, 키보드의 키 심볼)

 

즉, 키보드의 키를 눌렀다가 뗄 때, 함수를 실행시키게 된다. 연결할 함수의 이름만 적어주며 괄호는 넣지 않는다.

 

 

 

3. 방향키를 이용하여 함수 실행

 

키보드 이벤트에 대한 코드를 이해하였다면, 방향키를 이용하여 함수를 실행하는 코드를 작성해본다.

 

왼쪽 방향키(←) 를 누르면 왼쪽으로, 오른쪽 방향키(→)를 누르면 오른쪽으로 방향을 변경하는 코드와

위(↑), 아래 방향키(↓)를 통해 속도를 제어하는 코드를 만들어 본다.

 

screen.onkey(turnleft, "Left")

screen.onkey(turnright, "Right")

screen.onkey(increasespeed, "Up")

screen.onkey(decreasespeed, "Down")

 

왼쪽 방향키의 심볼은 "Left"이다.

오른쪽 방향키의 심볼은 "Right"이다.

위쪽 방향키의 심볼은 "Up"이다.

아래쪽 방향키의 심볼은 "Down"이다.

 

자세한 키보드 심볼은 다음 주소에서 확인할 수 있다. https://www.jbmpa.com/python_tip/7

 

 

 

4. 함수 생성

 

키보드 이벤트를 통해서 키보드를 눌렀을 때 실행 할 함수를 만들어본다.

 

def turnleft():
    p.left(30)

 

turnleft() 함수는 screen.onkey(turnleft, "Left") 에서 지정한 함수이다. 즉, 왼쪽 방향키를 눌렀을 때 실행할 함수이다.

 

거북이 객체 p는 left()라는 메서드를 통해서 방향을 변경한다.

 

최초 거북이가 생성되면 거북이는 오른쪽으로 머리를 향하게 된다.

이때, left(각도)를 이용하여 거북이를 왼쪽으로 지정한 각도만큼 방향을 변경해 줄 수 있다.

 

위의 코드는 왼쪽 방향키를 눌렀다가 뗐을 때, 왼쪽으로 30도만큼 방향을 변경하라는 의미가 된다.

 

마찬가지로 오른쪽 방향키를 눌렀을 때, 방향을 변경하는 코드는 아래와 같다.


def turnright():
    p.right(30)

 

마지막으로 위 방향키(↑)를 눌렀을 때, 거북이의 속도를 높이고, 아래 방향키(↓)를 눌렀을 때 거북이의 속도를 낮추는 코드는 아래와 같다.

speed 변수는 함수 밖에서 선언되었고, 모든 곳에서 사용되어야 하므로 전역변수(global)로 선언하여 사용한다.

 

def increasespeed():

    global speed
    speed += 1


def decreasespeed():

    global speed
    speed -= 1

 

 

 

전체코드는 아래와 같다.

 

주의할 점은 while True: 구문이 가장 마지막에 있어야 한다. 이유는 while True:구문을 만나면 무한반복을 하므로, while True:구문 다음이 실행되지 않는다. 따라서 모든 코드는 while True:구문 앞에 와야 한다.

import turtle as t

 

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

 

#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)

 

 

실행 결과

# 방향키를 이용하여 거북이의 방향과, 속도를 조절해보자.

# 아래의 캡쳐된 이미지는 거북이의 움직임을 보여주기 위해서 p.penup() 부분을 주석처리하여 실행한 결과이다.

1269734546_1560925801.7203.png

 

 

 

 

Turtle Game 2 - Turtle 움직임 제어하기 끝

댓글목록

댓글이 없습니다

게시물 검색
총 9 건 , 1 페이지
올서베이넷
무료 온라인 설문 사이트
OVITII
웹 프레젠테이션 도구
Copyright © JBMPA.com All rights reserved.
사이트 언어 선택
PC 보기