All pastes #929904 Raw Edit

game game

public python v1 · immutable
·published 2008-03-06 03:20 UTC
rendered paste body
#Stwelin - Platformer exampleimport osimport rabbytfrom rabbyt import lerp, wrapfrom math import cos,sin,pi,sqrt,atan2from random import *import pygamefrom pygame.locals import *#setup windowpygame.init()pygame.display.set_mode((640, 480), pygame.OPENGL | pygame.DOUBLEBUF)rabbyt.set_viewport((640, 480))rabbyt.set_default_attribs()#set load_texture hookrabbyt.set_load_texture_file_hook(        lambda filename: rabbyt.pygame_load_texture(filename, filter=False))def collidelist_add(list):    for instance in list:            sprites.append(instance)def collidelist_remove(list):    for instance in list:        if instance in sprites:            sprites.remove(instance)#create pSprite classclass pSprite(rabbyt.Sprite):    def __init__(self,x=0,y=0,sprite=None,shape=None,gravity=16):        rabbyt.Sprite.__init__(self,x=x,y=y,texture=sprite,shape=shape)        self.cmask = cmask(self, shape)        self.cmask.handle_collision = self.handle_collision        self.dx=0        self.dy=0        self.gravity=gravity    def update(self, dt):        self.dy -= self.gravity                self.x += self.dx * dt        self.y += self.dy * dt    def handle_collision(self,other):pass#collision mask class#used only for collisions! dummy sprite!class cmask(rabbyt.Sprite):    def __init__(self,parent,shape):        rabbyt.Sprite.__init__(self,None,shape)        self.parent=parent        self.xy = parent.attrgetter('xy')        self.shape = shape    def handle_collisions(self,other):        self.parent.handle_collision(other.parent)class player(pSprite):    def __init__(self,x=0,y=0,sprite=None,shape=None,gravity=16):        pSprite.__init__(self,x,y,sprite,shape,gravity)        self.maxxspeed=120 # pixels per second        self.xaccel = 30        self.can_jump = False        self.slist=['0.png','1.png','2.png','3.png']        self.anim = 0    def update(self, dt):        if pygame.key.get_focused:            keys = pygame.key.get_pressed()            if keys[K_LEFT]: self.dx-=self.xaccel            if keys[K_RIGHT]: self.dx+=self.xaccel            if keys[K_UP]:                if self.can_jump:                    self.dy=400            if not keys[K_RIGHT] and not keys[K_LEFT]:                if self.can_jump == True: self.dx=self.dx*0.4                else: self.dx=self.dx*0.8        if abs(self.dx) > self.maxxspeed: self.dx = self.maxxspeed*self.dx/abs(self.dx)						#limit speed        #update sprites        if abs(self.dx) > 5:            self.anim += abs(self.dx)/(self.maxxspeed*5)        else:            print 'huh'        if self.anim > 3: self.anim=0        i=int(self.anim)        #save the shape!        self.texture=self.slist[i]        pSprite.update(self, dt)        # This will be updated by handle_collision later.        self.can_jump = False    def handle_collision(self, other):        # We have collided with something and must move back out of it.        # I'm doing this by checking which direction penetrates the least. A        # better method might be to compair with the previous location, but        # this seems to work good enough.        print "SELF!" + str(self)        print "OTHER!" + str(other)        if min(other.cmask.top-self.cmask.bottom, self.cmask.top-other.cmask.bottom) > \                min(other.cmask.right-self.cmask.left, self.cmask.right-other.cmask.left):            self.dx = 0            if self.cmask.right-other.cmask.left < other.cmask.right-self.cmask.left:                self.cmask.right = other.cmask.left - .01            else:                self.cmask.left = other.cmask.right + .01        else:            self.dy = 0            if self.cmask.top-other.cmask.bottom < other.cmask.top-self.cmask.bottom:                self.cmask.top = other.cmask.bottom - .01            else:                # We landed on top of something; we will be able to jump next frame.                self.can_jump = True                self.cmask.bottom = other.cmask.top + .01class block(pSprite):    def __init__(self,x=0,y=0,sprite=None,shape=None,gravity=0):        pSprite.__init__(self,x,y,sprite,shape,gravity)        self.rgb=(.2,.3,.4)sprites=[]player1=player(sprite='2.png',shape=(-16,16,16,-16))sprites.append(player1)b=block(y=-180,shape=(160,-8,-8,8))sprites.append(b)b=block(y=-160,x=40,shape=(8,-16,-8,16))sprites.append(b)#the gameloopkeepRunning = TruespawnTime = 40c = pygame.time.Clock()last_fps = 0while keepRunning:    #messagepump    for event in pygame.event.get():        if event.type == QUIT:            keepRunning = False        elif event.type == KEYDOWN:            if event.key == K_ESCAPE:                keepRunning = False    #FPS    dt = c.tick(100)/1000.    if pygame.time.get_ticks() - last_fps > 1000:        #print "FPS: ", c.get_fps()        last_fps = pygame.time.get_ticks()    for s in sprites[:]:        s.update(dt)    collisions = rabbyt.collisions.aabb_collide([sprite.cmask for sprite in sprites])    for pSpr1,pSpr2 in collisions:        pSpr1.handle_collision(pSpr2)        pSpr2.handle_collision(pSpr1)    #the actual rendering code    rabbyt.clear() #clear the screen    for sprite in sprites:        sprite.render()    pygame.display.flip() #flip the buffers