Aug-10-2018, 05:28 PM
I tried making a version of the snake game in python using pygame. I am not receiving any errors, however when i press an arrow key, the snake does not change directions.
Here is my code:
Here is my code:
import pygame import sys import random import time pygame.init() class Snake(): def __init__(self): self.position = [100,50] self.body = [[100,50],[90,50],[80,50]] self.direction = "RIGHT" def changeDirTo(self,dir): if dir=="RIGHT" and not self.direction=="LEFT": self.direction = "RIGHT" elif dir=="LEFT" and not self.direction=="RIGHT": self.direction = "LEFT" elif dir=="UP" and not self.direction=="DOWN": self.direction = "UP" elif dir=="DOWN" and not self.direction=="UP": self.direction = "DOWN" def move(self,foodPos): if self.direction == "RIGHT": self.position[0] = self.position[0] + 10 elif self.direction == "LEFT": self.position[0] = self.position[0] - 10 elif self.direction == "UP": self.position[1] = self.position[1] - 10 elif self.direction == "DOWN": self.position[1] = self.position[1] + 10 self.body.insert(0,list(self.position)) if self.position == foodPos: return 1 else: self.body.pop() return 0 def move_Right(self): self.position[0] = self.position[0] + 10 def move_Left(self): self.position[0] = self.position[0] - 10 def move_Up(self): self.position[0] = self.position[1] - 10 def move_Down(self): self.position[0] = self.position[1] + 10 def checkCollision(self): if self.position[0] > 490 or self.position[0] < 0: return 1 elif self.position[1] > 490 or self.position[1] < 0: return 1 for bodyPart in self.body[1:]: if self.position == bodyPart: return 1 return 0 def getHeadPosition(self): return self.position def getBody(self): return self.body class FoodSpawn(): def __init__(self): self.position = [random.randint(1,50)*10,random.randint(1,50)*10] self.isFoodOnScreen = True def spawnFood(self): if self.isFoodOnScreen == False: self.position = [random.randrange(1,50)*10,random.randrange(1,50)*10] self.isFoodOnScreen == True return self.position def setFoodOnScreen(self,b): self.isFoodOnScreen = b window = pygame.display.set_mode((500,500)) pygame.display.set_caption("Snake Game") fps = pygame.time.Clock() score = 0 snake = Snake() foodSpawner = FoodSpawn() def gameOver(): pygame.quit() sys.exit() while True: for event in pygame.event.get(): if event.type == pygame.QUIT: gameOver() elif event.type == pygame.KEYDOWN: if event.key == pygame.K_RIGHT: snake.changeDirTo('RIGHT') elif event.type == pygame.KEYDOWN: if event.key == pygame.K_UP: snake.changeDirTo('UP') elif event.type == pygame.KEYDOWN: if event.key == pygame.K_DOWN: snake.changeDirTo('DOWN') elif event.type == pygame.KEYDOWN: if event.key == pygame.K_LEFT: snake.changeDirTo('LEFT') foodPos = foodSpawner.spawnFood() if(snake.move(foodPos)==1): score+=1 foodSpawner.setFoodOnScreen(False) window.fill(pygame.Color(225,225,225)) for pos in snake.getBody(): pygame.draw.rect(window,pygame.Color(0,225,0),pygame.Rect(pos[0],pos[1],10,10)) pygame.draw.rect(window,pygame.Color(225,0,0),pygame.Rect(foodPos[0],foodPos[1],10,10)) if(snake.checkCollision()==1): gameOver() pygame.display.set_caption("Snake | Score: " + str(score)) pygame.display.flip() fps.tick(10) pygame.quit()I've read over similar threads and I can't seem to find a solution. All help is appreciated.