python
python 집중공부 (유데미 뱀게임 만들기)
bumychoi
2024. 6. 14. 13:11
flask로 웹기본 페이지는 만들었지만 업무에 적용하기 위해서는 서버에서 데이터 가공 능력이 부족하여
유데미 python 강의를 듣고 내공을 올리기로함,
main.py
from turtle import Screen
from snake import Snake
from food import Food
from scoreboard import Scoreboard
import time
screen = Screen()
screen.setup(width=600, height=600)
screen.bgcolor("black")
screen.title("m Snake Game")
screen.tracer(0)
snake = Snake()
food = Food()
scoreboard = Scoreboard()
screen.listen()
screen.onkey(snake.up,"Up")
screen.onkey(snake.down,"Down")
screen.onkey(snake.right,"Right")
screen.onkey(snake.left,"Left")
game_is_on = True
while game_is_on:
screen.update()
time.sleep(0.1)
snake.move()
# 먹이먹기
if snake.head.distance(food) < 15:
food.refresh()
snake.extend()
scoreboard.increase_score()
# 벽감지
if snake.head.xcor()>300 or snake.head.xcor() <-300 or snake.head.ycor() > 300 or snake.head.ycor() < -300:
game_is_on = False
scoreboard.game_over()
# 꼬리감지
for segment in snake.segments[1:]:
if snake.head.distance(segment)< 10:
game_is_on =False
scoreboard.game_over()
screen.exitonclick()
snake.py
from turtle import Turtle
STARTING_OPSITIONS = [(0,0),(-20,0),(-40,0)]
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 position in STARTING_OPSITIONS:
self.add_segment(position)
def add_segment(self,position):
new_sagment = Turtle("square")
new_sagment.color("white")
new_sagment.penup()
new_sagment.goto(position)
self.segments.append(new_sagment)
def extend(self):
self.add_segment(self.segments[-1].position())
def move(self):
for seg_num in range(len(self.segments)-1 , 0, -1):
new_x = self.segments[seg_num - 1].xcor()
new_y = self.segments[seg_num - 1].ycor()
self.segments[seg_num].goto(new_x,new_y)
self.head.forward(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):
random_x = random.randint(-280,280)
random_y = random.randint(-280,280)
self.goto(random_x,random_y)
scoredoard.py
from turtle import Turtle
ALIGNET ="center"
FONT = {"Courier",24,"normal"}
class Scoreboard(Turtle):
def __init__(self):
super().__init__()
self.score= 0
self.color("white")
self.penup()
self.goto(0,270)
self.hideturtle()
self.update_scoreboard()
def update_scoreboard(self):
self.write(f"Score:{self.score}",align=ALIGNET,font=FONT)
def game_over(self):
self.goto(0,0)
self.write(f"GAME OVER",align=ALIGNET,font=FONT)
def increase_score(self):
self.score +=1
self.clear()
self.update_scoreboard()