1

I am working on a pygame version of the game snake. The problem I am having so far is that I don't want to allow diagonal movement but currently there is. Any help would be much appreciated. Thanks in advance

import pygame
class Snake:
    def __init__(self):
        self.x = 250
        self.y = 250
        self.x_change = 0
        self.y_change = 0
        self.width = 25
        self.height = 25
        self.win = pygame.display.set_mode((500,500))
        self.clock = pygame.time.Clock()
        self.run = True
        pygame.init()
        pygame.display.set_caption('Snake')

    def gameLoop(self):
        while self.run:
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    run = False
                if event.type == pygame.KEYDOWN:   
                        if event.key == pygame.K_LEFT:
                            self.x_change = -10
                        elif event.key == pygame.K_RIGHT:
                            self.x_change = 10
                        elif event.key == pygame.K_UP:
                            self.y_change = -10
                        elif event.key == pygame.K_DOWN:
                            self.y_change = 10
            self.x += self.x_change
            self.y += self.y_change
            self.win.fill((76, 66, 53))
            pygame.draw.rect(self.win, (145, 255, 51), (self.x, self.y, self.width, self.height))
            pygame.display.update()
            self.clock.tick(3)            
        pygame.quit()

p1 = Snake()
p1.gameLoop()
Blake B
  • 13
  • 4

1 Answers1

1

You can reset the change for the other axis back to 0. This way only one direction is changed per key press

def gameLoop(self):
        while self.run:
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    run = False
                if event.type == pygame.KEYDOWN:   
                        if event.key == pygame.K_LEFT:
                            self.x_change = -10
                            self.y_change = 0
                        elif event.key == pygame.K_RIGHT:
                            self.x_change = 10
                            self.y_change = 0
                        elif event.key == pygame.K_UP:
                            self.y_change = -10
                            self.x_change = 0
                        elif event.key == pygame.K_DOWN:
                            self.y_change = 10
                            self.x_change = 0
            self.x += self.x_change
            self.y += self.y_change
            self.win.fill((76, 66, 53))
            pygame.draw.rect(self.win, (145, 255, 51), (self.x, self.y, self.width, self.height))
            pygame.display.update()
            self.clock.tick(3)            
        pygame.quit()
Halmon
  • 992
  • 6
  • 13