Reputation: 9
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
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