Trip to Python

(파이썬 OOP 이해도 높이기) 거북이 레이스 만들기 - 파이썬 좌표 개념

Kestrel 2022. 12. 12. 19:16

  파이썬 강의에서 OOP 이해도를 높이기 위해 여러가지 작은 프로젝트가 과제로 나오고 있다. 이번에는 거북이 레이스 게임을 만드는 것인데 아직 80년대 게임 수준이다. 2020년대의 게임을 보고 내가 만든 프로그램을 보자니 빨리 피카츄 배구라도 만들어보고 싶다는 생각이 든다. 내용은 간단하다. Turtle 클래스를 통해서 여러 거북이를 만들고 경주를 시킨다. 유저는 예측을 하고 맞추면 승패 여부를 알려주면 된다.

 

1. 필요한 모듈을 불러온다.

from turtle import Turtle, Screen
import random

- Turtle 과 Screen은 당연히 불러와야하는 것이고 random은 향후 걸음 수를 거북이에게 부여하는데 쓰인다.

 

2. 거북이 인스턴스 만들기

from turtle import Turtle, Screen
import random

turtle_position = [-70, -40, -10, 20, 50, 80]
colors = ["red", "blue", "yellow", "orange", "purple", "pink"]
all_turtle = []

for turtle_index in range(0,6):
  new_turtle = Turtle(shape="turtle")
  new_turtle.color(colors[turtle_index])
  new_turtle.goto(x=-230, y=turtle_position[turtle_index})
  all_turtles.append(new_turtle)

- 세부 단계가 있겠지만 그냥 외워버렸다. 먼저 거북이 마다 출발지를 배치해주고 색깔을 부여한다. 이 작업은 반복이기 때문에 for 문을 통해서 코딩을 하고 리스트에 담아둔다. 출발지의 경우 x 값은 고정이고 y가 변동되므로 변수로 설정해 처리한다.

 

3. 화면 및 베팅 문구 설정

from turtle import Turtle, Screen
import random

screen = Screen()
screen.setup(width=500, height=500)
user_bet = screentextinput(title="Make your bet", prompt="Which turtle will win the race? Enter a color")
turtle_position = [-70, -40, -10, 20, 50, 80]
colors = ["red", "blue", "yellow", "orange", "purple", "pink"]
all_turtle = []

for turtle_index in range(0,6):
  new_turtle = Turtle(shape="turtle")
  new_turtle.color(colors[turtle_index])
  new_turtle.goto(x=-230, y=turtle_position[turtle_index})
  all_turtles.append(new_turtle)

- screen으로 개체를 만들어주고 setup 메소드를 통해서 화면 크기를 조정한다. 이후 화면에 띄워질 문구창을 screentextinput을 통해서 처리한다. title과 prompt 인자가 있음을 기억해둔다.

 

4. 레이스 진행

is_race_on = True

while is_race_on:
  rand_distance = random.randiant(0,10)
  turtle.fd(rand_distance)

 -While 구문을 통해서 거북이들을 움직인다.이렇게 하면 화면을 넘어서 영원히 앞으로 전진한다.

 

5. 게임 룰 구현

if user_bet:
  is_race_on = True

while is_race_on:
    for turtle in all_turtles:
      if turle.xcor() > 230:
        is_race_on = False
        winning_color = turtle.pencolor()
        if winning_color == user_bet:
          print(f"You've won! The {winning_color} turtle is the winner!")
        else:
          print(f"You've lost! The {winning_color} turtle is the winner!")
          
    rand_distance = random.randiant(0,10)
    turtle.fd(rand_distance)
         
screen.exitonclick()

- 거북이 크기가 20이고 250 가로 길이에서 20을 빼 230에 도착하는 거북이가 우승이다. 여기서 의문이 들었던 것이 거북이가 동시다발적으로 움직이는게 아니라는 점이다. for문을 통해서 거북이 하나하나가 if 구문을 통해 결승점 도착 여부를 묻고 이동하는 형태인데 이렇게 되면 나중에 출발하는 거북이가 불리한 것이 아닌가 싶다. 마지막으로 위에서 프롬프트에 입력한 값과 도착한 거북이의 색깔 일치 여부를 통해서 우승 여부 확인.