뱀 게임

Malman Bunzirr·2022년 6월 13일
0

규칙

  1. 고득점을 목표로 하는 게임이다.
  2. 뱀이 먹이를 먹을 경우 점수를 획득하는 동시에 뱀의 꼬리가 길어진다.
  3. 먹이는 매번 랜덤한 위치에 배치된다.
  4. 사용자는 방향키로 뱀을 움직일 수 있다.
  5. 뱀은 벽이나 자신의 꼬리에 닿으면 사망한다.

코드

# main.py

from turtle import Screen
from snake import Snake
from food import Food
from socreboard import Scoreboard
import time

win = Screen()
win.setup(width=600, height=600)
win.bgcolor("black")
win.title("My Snake Game")
win.tracer(0)

scoreboard = Scoreboard()
food = Food()
snake = Snake()

win.onkeypress(snake.up, "Up")
win.onkeypress(snake.down, "Down")
win.onkeypress(snake.left, "Left")
win.onkeypress(snake.right, "Right")
win.listen()

game = True
while game:
    win.update()
    time.sleep(0.1)
    snake.move()
    x = snake.head.xcor()
    y = snake.head.ycor()
    if snake.head.distance(food) < 15:
        food.refresh()
        scoreboard.increase_score()
        snake.extend()
    for segment in snake.segments[1:]:
        if snake.head.distance(segment) <= 10:
            game = False
            scoreboard.game_over()
    if x >= 290 or x <= -290 or y >= 290 or y <= -290:
        game = False
        scoreboard.game_over()

win.exitonclick()
# snake.py

from turtle import Turtle

MOVE_DISTANCE = 20
UP = 90; DOWN = 270; LEFT = 180; RIGHT = 0

class Snake():
    def __init__(self):
        self.segments = []
        self.create_snake()
        self.head = self.segments[0]
        
    def create_snake(self):
        for _ in range(3):
            self.add_segment((0-20*_, 0))
    
    def add_segment(self, position):
        self.segments.append(Turtle("square"))
        self.segments[-1].color("white")
        self.segments[-1].penup()
        self.segments[-1].goto(position)
   
    def extend(self):
        self.add_segment(self.segments[-1].pos())

    def move(self):
        for segment in range(len(self.segments)-1, 0, -1):
            self.segments[segment].goto(self.segments[segment-1].pos())
        self.head.fd(MOVE_DISTANCE)
    def up(self):
        if(self.head.heading()!=DOWN):
            self.head.setheading(UP)
    def down(self):
        if(self.head.heading()!=UP):
            self.head.setheading(DOWN)
    def left(self):
        if(self.head.heading()!=RIGHT):
            self.head.setheading(LEFT)
    def right(self):
        if(self.head.heading()!=LEFT):
            self.head.setheading(RIGHT)
# food.py

from turtle import Turtle
import random

class Food(Turtle):
    def __init__(self):
        super().__init__()
        self.shape("circle")
        self.penup()
        self.shapesize(stretch_len=0.5, stretch_wid=0.5)
        self.color("blue")
        self.speed("fastest")
        self.refresh()

    def refresh(self):
        self.goto(random.randint(-280, 280), random.randint(-280, 280))
# scoreboard.py

from turtle import Turtle
ALIGNMENT = "center"
FONT = ("Arial", 20, "normal")

class Scoreboard(Turtle):
    def __init__(self):
        super().__init__()
        self.color("white")
        self.hideturtle()
        self.penup()
        self.goto(0, 270)
        self.score = 0
        self.update_scoreboard()
    
    def update_scoreboard(self):
        self.clear()
        self.write(f"Score : {self.score}", align="center", font=FONT)

    def game_over(self):
        self.home()
        self.write(f"GAME OVER", align="center", font=FONT)

    def increase_score(self):
        self.score += 1
        self.update_scoreboard()

실행 결과

0개의 댓글