04-03 Add running Loop & Movement in Game class

01

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

02

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
    

03

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()

03

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):

    

04

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()