파이썬/파이썬(python) 중급

[20-2 파이썬] 뱀 게임 만들기 2(클래스 만들기)

Olivia-BlackCherry 2022. 8. 28. 13:35

지금까지 만들었던 코드를 좀더 간결하고, 명확하게 표현하기 위해

클래스를 생성해보자.

 

지난 시간 최종 코드는 아래와 같다.

(지난 수업을 보고 싶다면 ---->클릭)

from turtle import Turtle, Screen
import time

color_list = ["yellow", "red", "blue"]
screen = Screen()
screen.setup(height=600, width=600)
screen.bgcolor("black")
screen.title("Snake Game")

# tracer 끄기
screen.tracer(0)

snakes = []
positions =[(0,0), (-20,0), (-40,0)]
for position in positions:
    snake = Turtle(shape="square")
    snake.color("white")
    snake.penup()
    snake.goto(position)
    snakes.append(snake)

keep_going =True
while keep_going:
    screen.update()
    time.sleep(0.1)
    # 위치 이동
    for index in range(len(snakes)-1, 0, -1): #start=2,stop=1, step=-1
        x = snakes[index-1].xcor()
        y = snakes[index-1].ycor()
        snakes[index].goto(x, y)
    snakes[0].forward(20)

 

 

 

오늘 미션은 아래와 같다.

1. snake 클래스 선언하기
2. 생성자를 만들기 
3. 메소드로는 스네이크 3개를 만드는 것, 스네이크를 이동시키는 것 두 개를 만들기
4. 상수의 변수명은 모두 대문자로 쓴다.

 

 

 

 

 

 

 

 

스스로 과제를 해결해보자!!!!






 

 

 

<최종코드>

1. main.py

from turtle import Turtle, Screen
from snake import Snake
import time

color_list = ["yellow", "red", "blue"]
screen = Screen()
screen.setup(height=600, width=600)
screen.bgcolor("black")
screen.title("Snake Game")
screen.tracer(0)


real_snake = Snake()

keep_going =True
while keep_going:
    screen.update()
    time.sleep(0.1)

    real_snake.move_snake()


screen.exitonclick()

 

 

2. snake.py

from turtle import Turtle
POSITIONS = [(0, 0), (-20, 0), (-40, 0)]
MOVE_DISTANCE = 20

class Snake:
    def __init__(self):
        #Snake 클래스를 만들 때마다, 이닛함수에 있는 snakes와 create_snake가 만들어진다.
        self.snakes = []
        self.create_snake()
        pass

    def create_snake(self):
        # 상수 이름은 모두 대문자로 쓴다.
        for position in POSITIONS:
            snake = Turtle(shape="square")
            snake.color("white")
            snake.penup()
            snake.goto(position)
            self.snakes.append(snake)


    def move_snake(self):
            for index in range(len(self.snakes)-1, 0, -1): #start=2,stop=1, step=-1
                x = self.snakes[index-1].xcor()
                y = self.snakes[index-1].ycor()
                self.snakes[index].goto(x, y)
            self.snakes[0].forward(MOVE_DISTANCE)