모두의 파이썬 16번째 시간!
오늘은 '거북이 대포 게임 만들기'를 해볼것이다.
들어가기에 앞서...
1. 좌표
평소에 거북이를 이동시킬때에는 't.forward', 't.right', 't.left' 등을 이용하여
이동시켰는데, 오늘은 't.goto(x, y)'를 이용하여 한 번에 원하는 지점으로
거북이가 대포알이 되어 이동될것이다.
2. 각도
또한 각도 부분에서는 현재 거북이가 바라보는 각도를 구하는 'heading'함수와
거북이가 특정 각도를 바라보도록 설정하는 'setheading(ang)'함수를 사용할것이다.
3. 글자 쓰기
그리고 't.wirte' 함수를 사용하여 현재 거북이가 있는 곳에 문자열(문장)을 쓰는 기능을 할것이다.
t.write("문자열", False, "center", ("", 15))
책에 나와있는 설명대로 위 코드를 해석해보면
1. 거북이는 위치를 옮기지 않고(False)
2. 현재 위치에서 문장을 가운데 정렬("center")로 출력하겠다.
3. 글자 크기를 15("", 15)로 출력해라
라고 설명되어있다. 일단 이 정도만 알고 넘어가도 괜찮다고하니
다음 스텝으로 가보도록 하자.
거북이 대포 게임 만들기
'거북이'와 '랜덤'모듈을 불러와준다.
그리고 방향키(위, 아래)로 각도를 조절해줄 것이기 때문에
'turn_up', 'turn_down'함수를 불러와주고
값은 각각 위는 't.left(2)'
아래는 't.right(2)'로
왼쪽, 오른쪽으로 각도를 2도씩 틀게끔 해준다.
'fire'함수를 이용해 대포를 발사하도록 설정해준다.
변수 'ang'를 선언해주고 값은 't.heading()'으로
현재 거북이가 바라보는 각도를 기억하게 하고
while문을 열어주고 거북이가 활공하는 동안
'앞으로 15, 오른쪽으로 5도 꺾기'를 계속 반복해준다.
그리고 다시 땅에 닿았을 때의 상황인데 d라는 변수를 선언하고
값은 't.distance(target, 0)'으로 설정, 이걸로 거북이와 목표지점 사이의 거리를 구할 예정이다.
그리고 't.sety(random.randint(10,100)'을 이용해 성공 또는 실패를 화면상에 출력할 위치를 지정한다.
if문을 열고 거북이와 목표지점 사이의 거리가 25보다 작거나 큰 경우를 나누어
"Good!"과 "Bad!"를 출력하게 한다. 't.write'부분은 서론에서 설명했으니 생략!
그리고 성공했거나 실패했거나 다시 거북이 색갈을 검은색으로 돌리고
원지점으로 복귀시켜준다. 각도는 'ang'로 초기값으로 돌린다.
들여쓰기에서 빠져나와 이번엔 땅을 그려주도록 하자
't.goto(-300,0)'으로 거북이가 이동할 좌표를 설정.
't.down()'을 사용해 이동경로를 남기게 하고
다시 좌표를 (300,0)으로 설정해준다.
이번엔 목표지점을 그려준다.
'target'이라는 변수를 선언한 후 'random.radnint(50,150)'을 값으로 적는다.
50~150은 x축 범위만을 나타내는듯 하다. 실제로도 x축으로만 이동하니까.
그리고 펜 사이즈는3으로 하고 컬러는 그린으로 한다.
처음에는 펜을 들고있는 상태인 't.up()'으로 설정하고
거북이를 (target - 25, 2)만큼 이동시킨 후
펜을 내리고(t.down()) 다시 '(target+25, 2)'만큼 이동시킨다.
목표지점을 그리고 다시 처음으로 돌아오게 설정한다.
이때 거북이가 바라보는 각도를 '20'으로 설정해주자.
마지막으로 거북이가 동작하는 데 필요한 키설정을 해주자
저번에 배운 'onkeypress'를 이용하여 각각
방향키 위,아래, 스페이스바를 설정해주면 끝.
그럼 위와 같은 결과가 나오게된다.
'프로그래밍 > 파이썬' 카테고리의 다른 글
모두의 파이썬 - DAY 18 (터틀런 만들기2) (8) | 2021.12.13 |
---|---|
모두의 파이썬 - DAY 17 (터틀런 만들기1) (4) | 2021.12.11 |
모두의 파이썬 - DAY 15 (타자 게임 만들기) (0) | 2021.11.27 |
모두의 파이썬 - DAY 14 (계산 맞히기 게임 만들기) (0) | 2021.11.25 |
모두의 파이썬 - DAY 13 (거북이 그래픽 응용하기) (0) | 2021.11.24 |
댓글