Right now I'm learning oop so I want to practice some on this snake game project. So when i want to add snake parts when he eat the food i don't know what to do. here is my code .give me your opinion about it (if you want).(=
import pygame, random, math
pygame.init()
RED = (255,0,0)
GREEN = (0,255,0)
BLUE = (0,0,255)
BLACK = (0,0,0)
WHITE = (255,255,255)
WINDOW_W = 800
WINDOW_H = 600
BACKGROUND_COLOR = BLACK
clock = pygame.time.Clock()
SNAKE_WIDTH = 25
SNAKE_HEIGHT = 25
SNAKE_COLOR = GREEN
SNAKE_VEL = 25
FOOD_WIDTH = SNAKE_WIDTH
FOOD_HEIGHT = SNAKE_HEIGHT
FOOD_COLOR = RED
FPS = 10
win = pygame.display.set_mode((WINDOW_W, WINDOW_H))
pygame.display.set_caption('G_G')
#-------------------------------------------------------------------------------------------
class Snake:
def __init__(self, WIDTH ,HEIGHT, COLOR, VELOCITY, x, y):
self.WIDTH = WIDTH
self.HEIGHT = HEIGHT
self.COLOR = COLOR
self.VEL = VELOCITY
self.x = x
self.y = y
def draw(self):
pygame.draw.rect(win, self.COLOR, (self.x, self.y, self.WIDTH, self.HEIGHT))
def spawn(self):
if self.x<0:
self.x = WINDOW_W + SNAKE_WIDTH
if self.x > WINDOW_W + SNAKE_WIDTH:
self.x = 0
if self.y < 0:
self.y = WINDOW_H + SNAKE_HEIGHT
if self.y > WINDOW_H + SNAKE_HEIGHT:
self.y = 0
snake = Snake(SNAKE_WIDTH, SNAKE_HEIGHT, SNAKE_COLOR, SNAKE_VEL,1, 1)
#--------------------------------------------------------------------------------------------
class Food:
def __init__(self, WIDTH ,HEIGHT, COLOR, x=random.randrange(1, WINDOW_W+1, FOOD_WIDTH), y=random.randrange(1, WINDOW_H+1, FOOD_HEIGHT)):
self.WIDTH = WIDTH
self.HEIGHT = HEIGHT
self.COLOR = COLOR
self.x = x
self.y = y
def draw(self):
pygame.draw.rect(win, self.COLOR, (self.x, self.y, self.WIDTH, self.HEIGHT))
def snake_eats_food():
dis_snake_food = math.sqrt(((snake.x-food.x))**2+(snake.y-food.y)**2)
if abs(dis_snake_food)<4:
food.x = random.randrange(1, WINDOW_W+1, FOOD_WIDTH)
food.y = random.randrange(1, WINDOW_H+1, FOOD_HEIGHT)
return True
else:
return False
food = Food(FOOD_WIDTH, FOOD_WIDTH, FOOD_COLOR)
#-----------------------------------------------------------------------------------------
def draw():
win.fill(BACKGROUND_COLOR)
for x in range(0, WINDOW_W+1, SNAKE_WIDTH):
pygame.draw.line(win, WHITE, (x, 0), (x, WINDOW_H), 2)
for y in range(0, WINDOW_H+1, SNAKE_HEIGHT):
pygame.draw.line(win, WHITE, (0, y), (WINDOW_W, y), 2)
snake.draw()
food.draw()
def main():
run = True
up,down,right,left = False,False,False,False
while run:
clock.tick(FPS)
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
#-----------------------------------
draw()
snake_eats_food()
pygame.display.update()
#------------------------------------
keys = pygame.key.get_pressed()
if keys[pygame.K_UP]:
up,down,right,left = True,False,False,False
if keys[pygame.K_DOWN]:
down,up,right,left = True,False,False,False
if keys[pygame.K_RIGHT]:
right,down,up,left = True,False,False,False
if keys[pygame.K_LEFT]:
left,down,right,up = True,False,False,False
if up:
snake.y -= snake.VEL
snake.spawn()
if down:
snake.y += snake.VEL
snake.spawn()
if right:
snake.x += snake.VEL
snake.spawn()
if left:
snake.x -= snake.VEL
snake.spawn()
#-----------------------------------
pygame.quit()
if __name__ == "__main__":
main()
I know the code is a bit messy because I wanted to try to implement OOP, since I never used it.