Turtle Game 2 - Turtle 움직임 제어하기
페이지정보
글쓴이 관리자 조회 52,420 조회 날짜 19-06-19 00:31 / U:20-01-29 15:41내용
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
#스크린 객체 생성
#Turtle 객체 p 생성 #거북이의 움직임 속도
def turnleft():
def turnright():
def increasespeed():
def decreasespeed():
screen.listen()
|
실행 결과
# 방향키를 이용하여 거북이의 방향과, 속도를 조절해보자.
# 아래의 캡쳐된 이미지는 거북이의 움직임을 보여주기 위해서 p.penup() 부분을 주석처리하여 실행한 결과이다.
Turtle Game 2 - Turtle 움직임 제어하기 끝
댓글목록
댓글이 없습니다