Brandon
Brandon

Reputation: 9

pygame.image.load wont work

When I try to load an image for the first game im making coming from a tutorial im having an error with loading an image for the head of the snake.

import pygame
import time
import random

pygame.init()

white = (255,255,255)
black = (0,0,0)
red = (255,0,0)
orange = (255,127,0)
yellow = (255,255,0)
green = (0,255,0)
blue = (0,0,255)
purple = (143,0,255)
dark_green = (0,155,0)

display_width = 800
display_height = 600

gameDisplay = pygame.display.set_mode((display_width,display_height))
pygame.display.set_caption("Slither")

img = pygame.image.load("snakehead.png")

clock = pygame.time.Clock()

block_size = 20
FPS = 15

font = pygame.font.SysFont(None, 25)

def snake(block_size, snakelist):

    gameDisplay.blit(img, (snakelist[-1][0], snakelist[-1][1]))

    for XnY in snakelist[:-1]:
        pygame.draw.rect(gameDisplay, dark_green, [XnY[0],XnY[1],block_size,block_size])

def text_objects(text,color):
    textSurface = font.render(text, True, color)
    return textSurface, textSurface.get_rect()


def message_to_screen(msg,color):
    textSurf, textRect = text_objects(msg,color)
    #screen_text = font.render(msg, True, color)
    #gameDisplay.blit(screen_text, [display_width/2, display_height/2])
    textRect.center = (display_width / 2), (display_height / 2)
    gameDisplay.blit(textSurf, textRect)


def gameLoop():
    gameExit = False
    gameOver = False

    lead_x = display_width/2
    lead_y = display_height/2

    lead_x_change = 0
    lead_y_change = 0

    snakeList = []
    snakeLength = 0

    randAppleX = round(random.randrange(0, display_width-block_size))#/10.0)*10.0
    randAppleY = round(random.randrange(0, display_height-block_size))#/10.0)*10.0

    while not gameExit:

        while gameOver == True:
            gameDisplay.fill(white)
            message_to_screen("Game over, press Q to play again ot W to quit", red)
            pygame.display.update()

            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    gameExit = True
                    gameOver = False
                if event.type == pygame.KEYDOWN:
                    if event.key == pygame.K_w:
                        gameExit = True
                        gameOver = False
                    if event.key == pygame.K_q:
                        gameLoop()

        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                gameExit = True
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_LEFT:
                    lead_x_change = -block_size
                    lead_y_change = 0
                elif event.key == pygame.K_RIGHT:
                    lead_x_change = block_size
                    lead_y_change = 0

                elif event.key == pygame.K_UP:
                    lead_y_change = -block_size
                    lead_x_change = 0
                elif event.key == pygame.K_DOWN:
                    lead_y_change = block_size
                    lead_x_change = 0

        if lead_x >= display_width or lead_x < 0 or lead_y >= display_height or lead_y < 0:
            gameOver = True



        lead_x += lead_x_change
        lead_y += lead_y_change

        gameDisplay.fill(white)

        AppleThickness = 30
        pygame.draw.rect(gameDisplay, red, [randAppleX, randAppleY, AppleThickness, AppleThickness])


        snakeHead = []
        snakeHead.append(lead_x)
        snakeHead.append(lead_y)
        snakeList.append(snakeHead)
        snake(block_size, snakeList)

        if len (snakeList) > snakeLength:
            del snakeList [0]

        for eachSegment in snakeList[:-1]:
            if eachSegment == snakeHead:
                gameOver = True

        snake(block_size, snakeList)


        pygame.display.update()

##        if lead_x >= randAppleX and lead_x <= randAppleX + AppleThickness:
##            if lead_y >= randAppleY and lead_y <= randAppleY + AppleThickness:
##                randAppleX = round(random.randrange(0, display_width-block_size))#/10.0)*10.0
##                randAppleY = round(random.randrange(0, display_height-block_size))#/10.0)*10.0
##                snakeLength += 1

        if lead_x > randAppleX and lead_x < randAppleX + AppleThickness or lead_x + block_size > randAppleX and lead_x + block_size < randAppleX + AppleThickness:

            if lead_y > randAppleY and lead_y < randAppleY + AppleThickness or lead_y + block_size > randAppleY and lead_y + block_size < randAppleY + AppleThickness:
                randAppleX = round(random.randrange(0, display_width-block_size))#/10.0)*10.0
                randAppleY = round(random.randrange(0, display_height-block_size))#/10.0)*10.0
                snakeLength += 1

            elif lead_y + block_size > randAppleY and lead_y + block_size < randAppleY + AppleThickness:

                randAppleX = round(random.randrange(0, display_width-block_size))#/10.0)*10.0
                randAppleY = round(random.randrange(0, display_height-block_size))#/10.0)*10.0
                snakeLength += 1



        clock.tick(FPS)

    pygame.quit()
    quit()



gameLoop()

And the error im getting is

Traceback (most recent call last):
  File "C:\Users\BJBGaming\Desktop\FirstGame.py", line 23, in <module>
    img = pygame.image.load("snakehead.png")
pygame.error: Couldn't open snakehead.png

Please tell me what im doing wrong because i have an image named, snakehead.png, in the exact same folder as the file with the code. Thank You.

Upvotes: 0

Views: 1103

Answers (1)

unutbu
unutbu

Reputation: 880807

load("snakehead.png") looks for snakehead.png in the current working directory -- the directory from which the script was launched, which is not necessarily the same as the directory where the script is defined.

The easiest fix is to specify the location of snakehead.png with an absolute path:

img = pygame.image.load(r"C:\Users\BJBGaming\Desktop\snakehead.png")

or, to find the script's parent directory programmatically:

import os
dirname = os.path.dirname(os.path.abspath(__file__))
img = pygame.image.load(os.path.join(dirname, "snakehead.png"))

Upvotes: 1

Related Questions