Place the while running:
loop in the Game
run()
method
running = True while running: for event in pygame.event.get(): if event.type == KEYDOWN: if event.key == K_ESCAPE or event.key == K_q: running = False if event.key == K_DOWN or event.key == K_s: block_y += 10 if event.key == K_UP or event.key == K_w: block_y -= 10 if event.key == K_LEFT or event.key == K_a: block_x -= 10 if event.key == K_RIGHT or event.key == K_d: block_x += 10 if event.type == QUIT: running = False
Instead of adjusting each block_x
and block_y
, refer to
self.snake
move
methods, but create the methods in the Snake
.
class Game: def __init__(self): pygame.init() self.surface = pygame.display.set_mode((500,400)) self.surface.fill((255,255,255)) self.snake = Snake(self.surface) self.snake.draw() def run(self): running = True while running: for event in pygame.event.get(): if event.type == KEYDOWN: if event.key == K_ESCAPE or event.key == K_q: running = False if event.key == K_DOWN or event.key == K_s: self.snake.move_down() if event.key == K_UP or event.key == K_w: self.snake.move_up() if event.key == K_LEFT or event.key == K_a: self.snake.move_left() if event.key == K_RIGHT or event.key == K_d: self.snake.move_right() if event.type == QUIT: running = False
Create move methods in the Snake
class Snake: def __init__(self,parent_surface): self.parent_surface = parent_surface self.block = pygame.image.load('images/block.jpg').convert() self.x = 100 self.y = 100 def draw(self): self.parent_surface.fill((255,255,255)) self.parent_surface.blit(self.block,(self.x,self.y)) pygame.display.flip() def move_down(self): self.y += 10 self.draw() def move_up(self): self.y -= 10 self.draw() def move_left(self): self.x -= 10 self.draw() def move_right(self): self.x += 10 self.draw()
Create the move
methods in the Snake
class
class Snake: def __init__(self,parent_surface): self.parent_surface = parent_surface self.block = pygame.image.load('images/block.jpg').convert() self.x = 100 self.y = 100 def draw(self): self.parent_surface.fill((255,255,255)) self.parent_surface.blit(self.block,(self.x,self.y)) pygame.display.flip() def move_down(self):
Code is now functioning
import pygame from pygame.locals import * class Snake: def __init__(self,parent_surface): self.parent_surface = parent_surface self.block = pygame.image.load('images/block.jpg').convert() self.x = 100 self.y = 100 def draw(self): self.parent_surface.fill((255,255,255)) self.parent_surface.blit(self.block,(self.x,self.y)) pygame.display.flip() def move_down(self): self.y += 10 self.draw() def move_up(self): self.y -= 10 self.draw() def move_left(self): self.x -= 10 self.draw() def move_right(self): self.x += 10 self.draw() class Game: def __init__(self): pygame.init() self.surface = pygame.display.set_mode((500,400)) self.surface.fill((255,255,255)) self.snake = Snake(self.surface) self.snake.draw() def run(self): running = True while running: for event in pygame.event.get(): if event.type == KEYDOWN: if event.key == K_ESCAPE or event.key == K_q: running = False if event.key == K_DOWN or event.key == K_s: self.snake.move_down() if event.key == K_UP or event.key == K_w: self.snake.move_up() if event.key == K_LEFT or event.key == K_a: self.snake.move_left() if event.key == K_RIGHT or event.key == K_d: self.snake.move_right() if event.type == QUIT: running = False if __name__ == '__main__': game = Game() game.run()