Why won't the sprites in my group show up? (PyGame)

I

Isis

Hi all,
I am writing a snake game, but all is not going well...

Two problems here. First of all, the little circles I use for my sprite
images only show up as quadrants.
Second of all, only the Head sprite for my snake shows up at all. Why?

Here are the class definitions:

! /usr/bin/python

import pygame as PG

seg_size = 20

class SnakeSegment(PG.sprite.Sprite):


def __init__(self, pos):
PG.sprite.Sprite.__init__(self)
self.image = PG.Surface([seg_size,seg_size])
self.rect = self.image.get_rect()
self.rect.topleft = pos

# self.direction = 0


class SnakeHead(SnakeSegment):

def __init__(self,pos,spd = 10):
PG.sprite.Sprite.__init__(self)
SnakeSegment.__init__(self,pos)
PG.draw.circle(self.image,(255,0,0),self.rect.center,4)
self.speed = spd # governs speed of whole snake

def update(self):
self.rect.left += self.speed

class SnakeBody(SnakeSegment):
def __init__(self,pos,prev):
PG.sprite.Sprite.__init__(self)
SnakeSegment.__init__(self,pos)
PG.draw.circle(self.image,(0,255,0),self.rect.center,4)

self.previous=prev
def update(self):
self.rect.center = self.previous.rect.center

class SnakeTail(SnakeSegment):
def __init__(self,pos,prev):
PG.sprite.Sprite.__init__(self)
SnakeSegment.__init__(self,pos)
PG.draw.circle(self.image,(0,0,255),self.rect.center,4)

self.previous=prev

def update(self):
self.rect.center = self.previous.rect.center

class Snake(PG.sprite.OrderedUpdates):

def __init__(self, pos, length = 6):
PG.sprite.OrderedUpdates.__init__(self)
self.head = SnakeHead(pos)
self.segs = length - 2
self.position = pos


self.add(self.head)

prev = self.head

posx, posy = pos

for x in range(self.segs):
posx += seg_size
prev = (SnakeBody((posx,posy),prev))
self.add(prev)
# print prev.rect.center
posx += seg_size
self.add(SnakeTail((posx, posy),prev))
self._spritelist.reverse() # we need tail first, head last

Whew!
And here is my little test program.

#!/usr/bin/python

from snake import *
#import pygame as PG
DBUF = PG.DOUBLEBUF
FSCR = PG.FULLSCREEN
screenx = 640
screeny = 480

def main():
PG.init()

screen = PG.display.set_mode((screenx, screeny)) #python likes to make
pointers.

q = Snake((100,100))
q.draw(screen)
q.update()
PG.display.flip()
while 1:
PG.event.pump()
keyinput = PG.key.get_pressed()
if keyinput[PG.K_ESCAPE] or PG.event.peek(PG.QUIT):
break

if __name__ == '__main__':
main()

Whoop, there it is. What have I done wrong?
 
P

Peter Hansen

Isis said:
Hi all,
I am writing a snake game, but all is not going well...

Chances are good that you'll get access to many more potential
respondents by posting the question to the Pygame mailing list.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,766
Messages
2,569,569
Members
45,042
Latest member
icassiem

Latest Threads

Top