이번에 만들어 볼 파이선 게임은 터틀 잡기 게임이다. 두더지 잡기 버전의 터틀 잡기 게임은 다른 글을 참고 하면 되며, 이번 터틀 잡기는 빨간 터틀이 랜덤한 위치로 아주 빠르게 이동하는 중에 타이밍이 맞게 클릭을 해야 점수를 획득하는 게임이다. 생각보다 터틀이 빠르게 움직이기 때문에 게임의 난이도 있다고 볼 수 있다. 물론 난이도 조정은 각자 수정하면 조정이 가능하다.
![[파이썬 게임] 터틀 잡기 게임 ver2 (30초 안에 터틀 여러번 클릭하기) 2 터틀잡기](https://www.shindeacon.co.kr/wp-content/uploads/2024/06/터틀잡기.gif)
Table of Contents
게임 제목 : 터틀 잡기 게임 ver2
1. 게임 설명
- 간단한 터틀 그래픽 게임으로 게임 이름은 터틀 잡기 게임(Catch the Turtle)이다.
- 플레이어는 화면에 나타나는 빨간 터틀을 클릭해서 잡을 때 점수를 얻을 수 있다.
- 이 게임의 제한시간은 30초이다.
- 30초 후 최종 점수를 알려주면서 멈추게 된다.
2. 사용하는 모듈
- turtle : 터틀 그래픽의 기본 모듈
- random : 임의의 숫자를 사용하긴 위한 모듈
- time : 제한 시간에 사용할 시간 모듈
3. 코드별 설명
3.1. 게임 설정 :
- score : 변수로 점수를 기록한다.
- time_limit : 변수로 게임의 시간을 제한 하도록 설정한다.
- start_time : 변수로 게임 시작 시간을 저장한다.
3.2. 스크린 설정 :
- 게임 화면을 설정하고, 배경색과 크기를 지정한다.
3.3. 점수 표시 :
- score_turtle 객체를 만들어 점수를 화면에 표시한다.
3.4. 게임 오버 메시지 :
- message_turtle 객체를 만들어 게임 오버 메시지를 화면에 표시한다.
3.5. 목표 터틀 :
- target_turtle 객체를 만들어 플레이어가 클릭을 하여 잡는 목표 대상의 터틀을 설정한다.
3.6. 목표 터틀 이동 :
- move_target 함수는 목표 터틀을 화면 내에서 무작위 위치로 이동시키도록 한다. 게임이 끝날 때까지 일정시간 반복된다.
3.7. 목표 터틀 클릭 처리 :
- catch_target 함수는 목표 터틀을 클릭할 때 호출된다. 호출이 되면 점수를 1올려주고 목표 터틀을 새로운 위치로 이동시킨다.
3.8. 게임 오버 처리 :
- game_over함수는 게임 시간이 끝났을 때 호출되어 게임 오버 메시지를 표시하고 목표 터틀을 숨김 처리한다.
3.9. 이벤트 및 게임 시작
- 터틀 그래픽에서 마우스를 클릭하여 터틀을 잡을 수 있도록 이벤트를 발생시킨다.
- move_target() 함수를 호출 하여 게임을 시작한다.
4. 터틀 잡기 게임 스크립트
import turtle
import random
import time
# 게임 설정
score = 0
time_limit = 30 # 게임 시간 제한 (초)
start_time = time.time()
# 스크린 설정
screen = turtle.Screen()
screen.title("Catch the Turtle")
screen.bgcolor("white")
screen.setup(width=800, height=600)
# 점수 표시 터틀
score_turtle = turtle.Turtle()
score_turtle.hideturtle()
score_turtle.penup()
score_turtle.goto(-380, 260)
score_turtle.write(f"Score: {score}", align="left", font=("Arial", 16, "bold"))
# 게임 오버 메시지 터틀
message_turtle = turtle.Turtle()
message_turtle.hideturtle()
message_turtle.penup()
# 목표 터틀 생성
target_turtle = turtle.Turtle()
target_turtle.shape("turtle")
target_turtle.color("red")
target_turtle.penup()
target_turtle.speed(0)
# 목표 터틀을 랜덤 위치로 이동
def move_target():
if time.time() - start_time < time_limit:
x = random.randint(-390, 390)
y = random.randint(-290, 290)
target_turtle.goto(x, y)
screen.ontimer(move_target, random.randint(500, 1500)) # 0.5초에서 1.5초 사이에 랜덤 이동
else:
game_over()
# 목표 터틀을 클릭했을 때의 동작
def catch_target(x, y):
global score
score += 1
score_turtle.clear()
score_turtle.write(f"Score: {score}", align="left", font=("Arial", 16, "bold"))
move_target()
# 게임 오버 처리
def game_over():
target_turtle.hideturtle()
message_turtle.goto(0, 0)
message_turtle.write("Game Over", align="center", font=("Arial", 24, "bold"))
message_turtle.goto(0, -30)
message_turtle.write(f"Your final score is {score}", align="center", font=("Arial", 20, "bold"))
# 목표 터틀 클릭 이벤트
target_turtle.onclick(catch_target)
# 게임 시작
move_target()
# 메인 루프 실행
screen.mainloop()