Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python
- import pygame
- from colors import *
- class Player( pygame.sprite.Sprite ):
- def __init__( self, color = blue, width = 48, height = 64 ):
- super( Player, self ).__init__()
- self.image = pygame.Surface( ( width, height ) )
- self.image.fill( color )
- self.set_properites()
- self.hspeed = 0
- self.vspeed = 0
- self.level = None
- def set_properites( self ):
- self.rect = self.image.get_rect()
- self.origin_x = self.rect.centerx
- self.origin_y = self.rect.centery
- self.speed = 5
- def change_speed( self, hspeed, vspeed ):
- self.hspeed += hspeed
- self.vspeed += vspeed
- def set_position( self, x, y ):
- self.rect.x = x - self.origin_x
- self.rect.y = y - self.origin_y
- def set_image( self, filename = None ):
- if ( filename != None ):
- self.image = pygame.image.load( filename )
- self.set_properites()
- def update( self, collidable = pygame.sprite.Group(), event = None ):
- self.experience_gravity()
- self.rect.x += self.hspeed
- collision_list = pygame.sprite.spritecollide( self, collidable, False )
- for collided_object in collision_list:
- if ( self.hspeed > 0 ):
- # RIGHT DIRECTION
- self.rect.right = collided_object.rect.left
- elif ( self.hspeed < 0 ):
- #LEFT DIRECTION
- self.rect.left = collided_object.rect.right
- self.rect.y += self.vspeed
- collision_list = pygame.sprite.spritecollide( self, collidable, False )
- for collided_object in collision_list:
- if ( self.vspeed > 0 ):
- # DOWN DIRECTION
- self.rect.bottom = collided_object.rect.top
- self.vspeed = 0
- elif ( self.vspeed < 0 ):
- #UP DIRECTION
- self.rect.top = collided_object.rect.bottom
- self.vspeed = 0
- if not ( event == None ):
- if ( event.type == pygame.KEYDOWN ):
- if ( event.key == pygame.K_LEFT ):
- self.hspeed = -self.speed
- #self.change_speed( -( self.speed ), 0 )
- if ( event.key == pygame.K_RIGHT ):
- #self.change_speed( ( self.speed ), 0 )
- self.hspeed = self.speed
- if ( event.key == pygame.K_UP ):
- if ( len( collision_list ) >= 1 ):
- self.vspeed = -( self.speed )*2
- if ( event.key == pygame.K_DOWN ):
- #self.change_speed( 0, 5 )
- pass
- if ( event.type == pygame.KEYUP ):
- if ( event.key == pygame.K_LEFT ):
- if ( self.hspeed < 0 ): self.hspeed = 0
- if ( event.key == pygame.K_RIGHT ):
- if ( self.hspeed > 0 ): self.hspeed = 0
- if ( event.key == pygame.K_UP ):
- #if ( self.vspeed != 0 ): self.vspeed = 0
- pass
- if ( event.key == pygame.K_DOWN ):
- #if ( self.vspeed != 0 ): self.vspeed = 0
- pass
- def experience_gravity( self, gravity = .35 ):
- if ( self.vspeed == 0 ): self.vspeed = 1
- else: self.vspeed += gravity
- class Block( pygame.sprite.Sprite ):
- def __init__( self, x, y, width, height, color = blue ):
- super( Block, self ).__init__()
- self.image = pygame.Surface( ( width, height ) )
- self.image.fill( color )
- self.rect = self.image.get_rect()
- #self.origin_x = self.rect.centerx
- #self.origin_y = self.rect.centery
- self.rect.x = x #- self.origin_x
- self.rect.y = y #- self.origin_y
- class Level( object ):
- def __init__( self, player_object ):
- self.object_list = pygame.sprite.Group()
- self.player_object = player_object
- def update( self ):
- self.object_list.update()
- def draw( self, window ):
- window.fill( white )
- self.object_list.draw( window )
- class Level_01( Level ):
- def __init__( self, player_object ):
- super( Level_01, self ).__init__( player_object )
- level = [
- # [ x, y, width, height, color ]
- [ 2, 124, 365, 47, black ],
- [ 200, 424, 280, 47, black ],
- ]
- for block in level:
- block = Block( block[0], block[1], block[2], block[3], block[4] )
- self.object_list.add( block )
- def set_message( text ):
- global message, previous_message
- message = font.render( text, True, black, white )
- previous_message = message
- if ( __name__ == "__main__" ):
- pygame.init()
- window_size = window_width, window_height = 640, 480
- window = pygame.display.set_mode( window_size, pygame.RESIZABLE )
- pygame.display.set_caption( "Subscribe!" )
- clock = pygame.time.Clock()
- frames_per_second = 60
- active_object_list = pygame.sprite.Group()
- player = Player()
- player.set_position( 40, 40 )
- active_object_list.add( player )
- level_list = []
- level_list.append( Level_01( player ) )
- current_level_number = 0
- current_level = level_list[ current_level_number ]
- player.level = current_level
- font = pygame.font.SysFont( "Times New Roman", 30 )
- message = previous_message = None
- set_message( "" )
- running = True
- while ( running ):
- for event in pygame.event.get():
- if ( event.type == pygame.QUIT ) or \
- ( event.type == pygame.KEYDOWN and \
- ( event.key == pygame.K_ESCAPE or event.key == pygame.K_q ) ):
- running = False
- # Update functions
- player.update( current_level.object_list, event )
- event = None
- current_level.update()
- # Logic Testing
- # Draw everything
- current_level.draw( window )
- active_object_list.draw( window )
- # Delay Framerate
- clock.tick( frames_per_second )
- # Update the screen
- pygame.display.update()
- pygame.quit()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement