Raspberry Snake


6 posts
by SirClayton » Mon Feb 04, 2013 2:22 pm
Hi, I've made the raspberry pi snake game out of the 'Raspberry pi user guide'
but whenever I run it, it comes up with a black screen. Any one got any ideas?
(I'm using Python 2.7 and Pygame)

Code: Select all
#!/user/bin/env python

import pygame, sys, time, random
from pygame.locals import *

pygame.init()
fpsClock = pygame.time.Clock()

playSurface = pygame.display.set_mode((640, 480))
pygame.display.set_caption('Raspberry Snake')

redColour = pygame.Color(255, 0, 0)
blackColour = pygame.Color(0, 0, 0)
whiteClour = pygame.Color(255, 255, 255)
greyColour = pygame.Color(150, 150, 150)
snakePosition = [100,100]
snakeSegments = [[100,100],[80,100],[60,100]]
raspberryPosition = [300,300]
raspberrySpawned = 1
direction = 'right'
changeDirection = direction

def gameOver():
    gameOverFont = pygame.font.font('freesansbold.ttf', 72)
    gameOverSurf = gameOverFont.render('Game Over', True, greyColour)
    gameOverRect = gameOverSurf.get_rect()
    gameOverRect.midtop = (320, 10)
    playSurface.blit(gameOverSurf, gameOverRect)
    pygame.display.flip()
    time.sleep(5)
    pygame.quit()
    sys.exit()

while True:
    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()
        elif event.type == KEYDOWN:
            if event.key == K_RIGHT or event.key == ord('d'):
                changeDirection = 'right'
            if event.key == K_LEFT or event.key == ord('a'):
                changeDirection = 'left'
            if event.key == K_UP or event.key == ord('w'):
                changeDirection = 'up'
            if event.key == K_DOWN or event.key == ord('s'):
                changeDirection = 'down'
            if event.key == K_ESCAPE:
                pygame.event.post(pygame.event.Event(QUIT))
if changeDirection == 'right' and not direction == 'left':
    direction = changeDirection
if changeDirection == 'left' and not direction == 'right':
    direction = changeDirection
if changeDirection == 'up' and not direction == 'down':
    direction = changeDirection
if changeDirection == 'down' and not direction == 'up':
    direction = changeDirection
if direction == 'right':
    snakePosition[0] += 20
if direction == 'left':
    snakePosition[0] -= 20
if direction == 'up':
    snakePosition[1] -= 20
if direction == 'down':
    snakePosition[1] += 20
snakeSegments.insert(0,list(snakePosition))
if snakePosition[0] == raspberryPosition[0] and snakePosition[1] == raspberryPosition[1]:
       raspberrySpawned = 0
else:
    snakeSegments.pop()
if raspberrySpawned == 0:
    x = random.randrange(1,32)
    y = random.randrange(1,24)
    raspberryPosition = [int(x*20),int(y*20)]
raspberrySpawned = 1
playSurface.fill(blackColour)
for position in snakeSegments:
    pygame.draw.rect(playSurface,whiteColour,Rect(position[0], position[1], 20, 20))

pygame.draw.rect (playSurface,redColour,Rect(raspberryPosition[0], raspberryPosition[1], 20, 20))
pygame.display.flip()
if snakePosition[0] > 620 or snakePosition[0] < 0:
    gameOver()
if snakePosition[1] > 460 or snakePosition[1] < 0:
    gameOver()
for snakeBody in snakeSegments[1:]:
    if snakePosition[0] == snakeBody[0] and snakePosition[1] == snakeBody[1]:
        gameover()

fpsClock.tick(30)
                                   
                                   
                           


Pi and Google...
Posts: 10
Joined: Sun Feb 03, 2013 5:55 pm
by rurwin » Mon Feb 04, 2013 2:26 pm
In Python, indentation is vitally important. It seems to me that everything after the "while True" should be indented, but the indentation stops half-way down.
User avatar
Forum Moderator
Forum Moderator
Posts: 2912
Joined: Mon Jan 09, 2012 3:16 pm
by SirClayton » Mon Feb 04, 2013 2:29 pm
Yes I agree.
However the example code in the user guide doesn't have any indentations either.
Would the indentations follow the same pattern as before?
Thanks
Pi and Google...
Posts: 10
Joined: Sun Feb 03, 2013 5:55 pm
by rurwin » Mon Feb 04, 2013 2:45 pm
But it does tell you where to go to see the entire source-code in one piece: http://media.wiley.com/product_ancillar ... rysnake.py
User avatar
Forum Moderator
Forum Moderator
Posts: 2912
Joined: Mon Jan 09, 2012 3:16 pm
by -rst- » Mon Feb 04, 2013 4:29 pm
I think this is at least the third thread about people having issues with the Snake code from that book (all not exact same though)... Maybe the print version was botched, but the Amazon preview does seem to have the indentation correct - than again, 'returning' from three levels down to one level indent not the most clear maybe :roll:
http://raspberrycompote.blogspot.com/ - Low-level graphics and 'Coding Gold Dust'
Posts: 900
Joined: Thu Nov 01, 2012 12:12 pm
Location: Dublin, Ireland
by SirClayton » Mon Feb 04, 2013 6:51 pm
Thanks, after I compared my code to the one you suggested I found a few typos as well as wrong indents.
Thank you for getting back so quickly.
Pi and Google...
Posts: 10
Joined: Sun Feb 03, 2013 5:55 pm