안녕하세요! 감코딩입니다
이번 시간에는 Turtle
모듈을 활용하여 재미있는 미니 게임 4가지를 만들어보겠습니다. Turtle
은 기본적으로 그림을 그리는 용도로 많이 사용되지만, 이를 활용하면 간단한 게임도 쉽게 만들 수 있습니다. 이번 글에서는 다음과 같은 프로젝트를 다뤄볼 거예요.
- 스네이크 게임
- 자동차 레이싱 게임
- 만다라 패턴 그리기
- 클릭 게임
1. Turtle로 스네이크 게임 만들기 🐍
스네이크 게임은 방향키로 조작하며, 먹이를 먹을 때마다 길이가 길어지는 게임입니다.
🔹 구현할 기능
- 방향키로 뱀 조작하기
- 먹이를 먹으면 길이 증가
- 점수 시스템 추가
🔹 코드 예제
import turtle
import time
import random
# 화면 설정
wn = turtle.Screen()
wn.title("스네이크 게임")
wn.bgcolor("black")
wn.setup(width=600, height=600)
wn.tracer(0) # 화면 수동 업데이트
# 뱀 머리
head = turtle.Turtle()
head.shape("square")
head.color("white")
head.penup()
head.goto(0, 0)
head.direction = "stop"
# 먹이
food = turtle.Turtle()
food.shape("circle")
food.color("red")
food.penup()
food.goto(0, 100)
# 뱀 몸통 리스트
segments = []
# 점수
score = 0
high_score = 0
# 점수 표시
pen = turtle.Turtle()
pen.speed(0)
pen.shape("square")
pen.color("white")
pen.penup()
pen.hideturtle()
pen.goto(0, 260)
pen.write("Score: 0 High Score: 0", align="center", font=("Courier", 24, "normal"))
# 키보드 입력 함수
def go_up():
if head.direction != "down":
head.direction = "up"
def go_down():
if head.direction != "up":
head.direction = "down"
def go_left():
if head.direction != "right":
head.direction = "left"
def go_right():
if head.direction != "left":
head.direction = "right"
# 키보드 바인딩
wn.listen()
wn.onkeypress(go_up, "w")
wn.onkeypress(go_down, "s")
wn.onkeypress(go_left, "a")
wn.onkeypress(go_right, "d")
# 뱀 이동
def move():
if head.direction == "up":
head.sety(head.ycor() + 20)
if head.direction == "down":
head.sety(head.ycor() - 20)
if head.direction == "left":
head.setx(head.xcor() - 20)
if head.direction == "right":
head.setx(head.xcor() + 20)
# 메인 게임 루프
while True:
wn.update()
# 먹이와 충돌 체크
if head.distance(food) < 20:
# 먹이 위치 랜덤 이동
x = random.randrange(-290, 290, 20)
y = random.randrange(-290, 290, 20)
food.goto(x, y)
# 새 몸통 추가
new_segment = turtle.Turtle()
new_segment.speed(0)
new_segment.shape("square")
new_segment.color("grey")
new_segment.penup()
segments.append(new_segment)
# 점수 증가
score += 10
if score > high_score:
high_score = score
pen.clear()
pen.write(f"Score: {score} High Score: {high_score}", align="center", font=("Courier", 24, "normal"))
# 몸통 이동
for index in range(len(segments) - 1, 0, -1):
x = segments[index - 1].xcor()
y = segments[index - 1].ycor()
segments[index].goto(x, y)
if len(segments) > 0:
x = head.xcor()
y = head.ycor()
segments[0].goto(x, y)
move()
# 벽 충돌 체크
if head.xcor() > 290 or head.xcor() < -290 or head.ycor() > 290 or head.ycor() < -290:
time.sleep(1)
head.goto(0, 0)
head.direction = "stop"
for segment in segments:
segment.goto(1000, 1000) # 화면 밖으로 이동
segments.clear()
score = 0
pen.clear()
pen.write(f"Score: {score} High Score: {high_score}", align="center", font=("Courier", 24, "normal"))
# 몸통 충돌 체크
for segment in segments:
if segment.distance(head) < 20:
time.sleep(1)
head.goto(0, 0)
head.direction = "stop"
for segment in segments:
segment.goto(1000, 1000)
segments.clear()
score = 0
pen.clear()
pen.write(f"Score: {score} High Score: {high_score}", align="center", font=("Courier", 24, "normal"))
time.sleep(0.1)

위 코드를 확장하여 먹이를 추가하고 충돌 감지 기능을 넣어주면 더욱 완성도 높은 게임이 됩니다!
2. Turtle로 자동차 레이싱 게임 만들기 🚗
레이싱 게임에서는 여러 개의 자동차(거북이)를 랜덤한 속도로 이동시키면서 누가 먼저 결승선을 통과하는지 확인하는 방식으로 진행됩니다.
🔹 구현할 기능
- 여러 개의 자동차(거북이) 생성
- 랜덤한 속도로 움직이기
- 결승선 통과 확인
🔹 코드 예제
import turtle
import random
import time
# 창 설정
turtle.setup(width=500, height=400)
screen = turtle.Screen()
screen.title("거북이 레이싱 게임")
# 결승선 그리기
finish_line = 200 # 결승선 x 좌표
pen = turtle.Turtle()
pen.speed(0)
pen.penup()
pen.goto(finish_line, 150)
pen.pendown()
pen.goto(finish_line, -150)
pen.hideturtle()
# 자동차(거북이) 생성
colors = ["red", "blue", "green", "yellow", "purple"]
racers = []
for i in range(5):
racer = turtle.Turtle()
racer.shape("turtle")
racer.color(colors[i])
racer.penup()
racer.goto(-200, 100 - (i * 50)) # 시작 위치 설정
racers.append(racer)
# 우승자 발표용 펜
winner_pen = turtle.Turtle()
winner_pen.hideturtle()
winner_pen.penup()
winner_pen.goto(0, 160)
winner_pen.color("black")
# 레이싱 시작
winner = None
while True:
for racer in racers:
# 랜덤한 속도로 이동
racer.forward(random.randint(1, 5))
# 결승선에 도달했는지 체크
if racer.xcor() >= finish_line:
winner = racer.color()[0] # 우승 거북이의 색상
break
# 우승자가 결정되면 루프 종료
if winner:
break
screen.update() # 화면 갱신
time.sleep(0.01) # 속도 조절
# 우승자 발표
winner_pen.write(f"우승자: {winner} 거북이!", align="center", font=("Arial", 20, "bold"))
# 창 유지
screen.mainloop()

자동차의 속도를 랜덤하게 설정하여 매번 다른 결과가 나오도록 할 수 있습니다!
3. Turtle로 만다라 패턴 그리기 🎨
Turtle의 반복문을 활용하면 아름다운 대칭적인 패턴을 쉽게 만들 수 있습니다.
🔹 구현할 기능
- 반복문을 활용한 대칭 패턴 그리기
- 다양한 색상 적용
- 랜덤 패턴 생성 기능 추가
🔹 코드 예제
import turtle
import random
# 설정
t = turtle.Turtle()
t.speed(0)
colors = ["red", "blue", "green", "yellow", "purple", "orange"]
# 패턴 그리기
for i in range(36):
t.color(random.choice(colors))
t.circle(100)
t.left(10)

이 코드를 실행하면 마치 예술 작품처럼 보이는 멋진 패턴이 완성됩니다!
4. Turtle로 클릭 게임 만들기 🖱
마우스로 특정 지점을 클릭하면 점수가 올라가는 간단한 게임을 만들어볼 수 있습니다.
🔹 구현할 기능
- 마우스 클릭 감지
- 점수 시스템 추가
- 제한 시간 내 최대한 높은 점수 획득
🔹 코드 예제
import turtle
import random
# 설정
screen = turtle.Screen()
screen.title("클릭 게임")
screen.setup(width=600, height=400)
# 점수 변수 및 표시
score = 0
score_pen = turtle.Turtle()
score_pen.hideturtle()
score_pen.penup()
score_pen.goto(0, 170)
score_pen.write(f"점수: {score}", align="center", font=("Arial", 20, "normal"))
# 클릭 대상 (타겟) 생성
target = turtle.Turtle()
target.shape("circle")
target.color("red")
target.penup()
target.speed(0)
target.goto(random.randint(-280, 280), random.randint(-180, 180))
# 클릭 이벤트 함수
def click(x, y):
global score
# 타겟을 클릭했는지 체크
if target.distance(x, y) < 20: # 타겟 반지름 내 클릭 시
score += 1
score_pen.clear()
score_pen.write(f"점수: {score}", align="center", font=("Arial", 20, "normal"))
# 타겟을 랜덤 위치로 이동
target.goto(random.randint(-280, 280), random.randint(-180, 180))
# 화면 클릭 이벤트 연결
screen.onclick(click)
screen.listen() # 이벤트 감지 활성화
# 게임 루프
screen.mainloop()

위 코드를 확장하여 제한 시간 기능을 추가하면 더욱 재미있는 게임이 됩니다!
마무리
이번 글에서는 Turtle
을 활용하여 4가지 미니 게임을 만들어보았습니다. Turtle
은 간단한 게임을 만들기에도 유용한 모듈이니, 직접 실습하면서 원하는 기능을 추가해 보세요!
📌 다음에도 유익한 파이썬 강좌로 찾아오겠습니다! 😊
[…] 오늘은 Pygame으로 조금 더 완성도 있는 게임을 만들어 볼 거예요. 지난 글에서는 Pygame 설치와 기본적인 창 생성, 캐릭터 이동까지 배웠죠? 이제는 […]