Capstone Project - Turtle Crossing Game
게임규칙
- 거북이는 전진만 할 수 있음
- 자동차는 y축 범위 내에서 무작위로 생성되고, 오른쪽 가장자리에서 왼쪽 가장자리로 움직임
- 거북이가 제일 윗부분에 도착하면, 거북이는 원래 위치로 돌아가고 다음 레벨로 넘어감
- 거북이가 자동차와 충돌하면, 게임 종료
- Move the turtle with keypress
- Create and move the cars
- Detect collision with car
- Detect when turtle reaches the other side
- Create a scoreboard
Move the turtle with keypress
1️⃣ 거북이 세팅
2️⃣ 이동키 설정
3️⃣ player.py에 go_up함수 정의
Create and move the cars
1️⃣ 새로운 모듈에 carManager클래스 생성
- 클래스에서 정의될 때 self를 갖고 있어야 함
- 시작 시점 y축 랜덤 수치 설정 후 좌표에 넣어주기
- 생성 후 리스트에 넣기
2️⃣ main.py에 객체 생성 후 반복문으로 자동차 생성
3️⃣ 자동차가 움직이게 하는 함수 생성
- 리스트에 생성된 자동차들을 for문으로 이동
-
main.py 반복문에 넣어주기
4️⃣ 만들어지는 자동차 수 조절하기
- 6번 중 1번의 확률을 갖게끔 random_chance
Detect collision with car
main.py에 모든 자동차가 있는 리스트를 반복문 돌려서 간격이 20(거북이 20x20, 자동차 20x40)이하면 충돌로 감지
Detect when turtle reaches the other side
1️⃣ player.py에 끝지점 감지 메소드 생성
2️⃣ 끝까지 도달 후 다시 시작지점으로 가는 메소드
3️⃣ 끝까지 도달했을 때 속도 올리기
4️⃣ main.py에 적용
Create a scoreboard
1️⃣ Scoreboard 클래스 생성
2️⃣ main.py에 객체 생성
3️⃣ 플레이어의 레벨 증가 메소드 생성
4️⃣ 초기 속성에서 self.write를 따로 메소드로 분리
5️⃣ game_over메소드 생성 후 main.py에 넣어주기
Final code for main.py
import time
from turtle import Screen
from player import Player
from car_manager import CarManager
from scoreboard import Scoreboard
screen = Screen()
screen.setup(width=600, height=600)
screen.tracer(0)
player = Player()
car_manager = CarManager()
scoreboard = Scoreboard()
screen.listen()
screen.onkey(player.go_up, "Up")
game_is_on = True
while game_is_on:
time.sleep(0.1)
screen.update()
car_manager.create_car()
car_manager.move_cars()
for car in car_manager.all_cars:
if car.distance(player) < 20:
game_is_on = False
scoreboard.game_over()
if player.is_at_finish_line():
player.go_to_start()
car_manager.level_up()
scoreboard.increase_level()
screen.exitonclick()
Final code for player.py
from turtle import Turtle
STARTING_POSITION = (0, -280)
MOVE_DISTANCE = 10
FINISH_LINE_Y = 280
class Player(Turtle):
def __init__(self):
super().__init__()
self.shape("turtle")
self.penup()
self.go_to_start()
self.setheading(90)
def go_up(self):
self.forward(MOVE_DISTANCE)
def go_to_start(self):
self.goto(STARTING_POSITION)
def is_at_finish_line(self):
if self.ycor() > FINISH_LINE_Y:
return True
else:
return False
Final code for car_manager.py
from turtle import Turtle
STARTING_POSITION = (0, -280)
MOVE_DISTANCE = 10
FINISH_LINE_Y = 280
class Player(Turtle):
def __init__(self):
super().__init__()
self.shape("turtle")
self.penup()
self.go_to_start()
self.setheading(90)
def go_up(self):
self.forward(MOVE_DISTANCE)
def go_to_start(self):
self.goto(STARTING_POSITION)
def is_at_finish_line(self):
if self.ycor() > FINISH_LINE_Y:
return True
else:
return False
Final code for scoreboard.py
from turtle import Turtle
FONT = ("Courier", 24, "normal")
class Scoreboard(Turtle):
def __init__(self):
super().__init__()
self.level = 1
self.hideturtle()
self.penup()
self.goto(-280, 250)
self.update_scoreboard()
def update_scoreboard(self):
self.clear()
self.write(f"Level: {self.level}", align="left", font=FONT)
def increase_level(self):
self.level += 1
self.update_scoreboard()
def game_over(self):
self.goto(0, 0)
self.write(f"GAME OVER", align="center", font=FONT)