Advertisement
Guest User

Untitled

a guest
Feb 5th, 2012
119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 7.41 KB | None | 0 0
  1. #-------------------------------------------------------------------------------
  2. # Name:    Sprite Night
  3. # Purpose: Impossibly hard platform game
  4. # Author:  George
  5. #
  6. #!/usr/bin/env python
  7. #-------------------------------------------------------------------------------
  8. # Imports:
  9. import pygame, sys
  10. from pygame import *
  11.  
  12. # Variables:
  13.  
  14. SCREEN_SIZE = (800,640)
  15. FLAGS = 32
  16. DEPTH = 0
  17.  
  18. BLACK = (0,0,0)
  19. WHITE = (255,255,255)
  20. RED = (255,0,0)
  21. GREEN = (0,255,0)
  22. BLUE = (0,0,255)
  23. YELLOW = (255,255,0)
  24.  
  25. FPS = 40
  26.  
  27.  
  28. def main():
  29.     pygame.init()
  30.     screen = pygame.display.set_mode(SCREEN_SIZE, DEPTH, FLAGS)
  31.     timer = time.Clock() # Timer the game runs on
  32.     display.set_caption("Sprite Night: The Game")
  33.  
  34.     up = down = left = right = False # No initial inputs
  35.     x = y = 0 #No movement
  36.  
  37.     entities = pygame.sprite.Group()
  38.     player = Player(32,32)
  39.     platforms = []
  40.  
  41.     levelID = 1
  42.  
  43.     if levelID == 1:
  44.         file = "levels\level1.txt"
  45.     if levelID == 2:
  46.         file = "levels\level2.txt"
  47.     if levelID == 3:
  48.         file = "levels\editable.txt"
  49.  
  50.     f = open(file,"r")
  51.     data = f.readlines()
  52.     f.close()
  53.     level = (data)
  54.  
  55.     # Build the level
  56.     for row in level:
  57.         for col in row:
  58.             if col == "P":
  59.                 p = Platform(x, y)
  60.                 platforms.append(p)
  61.                 entities.add(p)
  62.             if col == "E":
  63.                 e = ExitBlock(x, y)
  64.                 platforms.append(e)
  65.                 entities.add(e)
  66.             x += 32
  67.         y += 32
  68.         x = 0
  69.  
  70.     entities.add(player)
  71.  
  72.     while 1:
  73.         timer.tick(60)
  74.         for event in pygame.event.get():
  75.             if event.type == QUIT:
  76.                 pygame.quit()
  77.                 sys.exit()
  78.             if event.type == KEYDOWN and event.key == K_ESCAPE:
  79.                 pygame.quit()
  80.                 sys.exit()
  81.  
  82.             keypress = event.type == KEYDOWN
  83.             if keypress and event.key == K_UP:
  84.                 up = True
  85.             if keypress and event.key == K_DOWN:
  86.                 down = True
  87.             if keypress and event.key == K_LEFT:
  88.                 left = True
  89.             if keypress and event.key == K_RIGHT:
  90.                 right = True
  91.             if keypress and event.key == K_r:
  92.                 pass
  93.  
  94.             keyup = event.type == KEYUP
  95.             if keyup and event.key == K_UP:
  96.                 up = False
  97.             if keyup and event.key == K_DOWN:
  98.                 down = False
  99.             if keyup and event.key == K_LEFT:
  100.                 left = False
  101.             if keyup and event.key == K_RIGHT:
  102.                 right = False
  103.  
  104.             if keyup and event.key == K_r:
  105.                 main()
  106.  
  107.         # Handles background
  108.         background = image.load('images/background.png').convert_alpha()
  109.         pygame.transform.scale(background, (800,640))
  110.         screen.blit(background, (0,0))
  111.  
  112.         # Update player, draw everything
  113.         player.update(up, down, left, right, platforms)
  114.         entities.draw(screen)
  115.  
  116.         # Displays FPS in top left. Not needed.
  117.         frames = str(timer.get_fps())
  118.         frames = frames[0:2]
  119.         FPSMessage(screen, "FPS: " + frames)
  120.  
  121.         pygame.display.flip()
  122.  
  123. class Entity(pygame.sprite.Sprite):
  124.     def __init__(self):
  125.         """ Turns the passed sprite into an entity"""
  126.         pygame.sprite.Sprite.__init__(self)
  127.  
  128. class Player(Entity):
  129.     def __init__(self, x, y):
  130.         Entity.__init__(self)
  131.         self.xvel = 0 # X-velocity
  132.         self.yvel = 0 # Y-velocity
  133.         self.onGround = False # State onGround determines actions on sprites
  134.         self.image = Surface((32,32)) # Location to be drawn
  135.         self.rect = Rect(x, y, 28, 28) # Creates a rect at same place as sprite
  136.         tempImage = image.load('images/ninja.png').convert_alpha()
  137.         pygame.transform.scale(tempImage, (28,28))
  138.         self.image = tempImage
  139.         self.levelnum = 1
  140.  
  141.     def update(self, up, down, left, right, platforms):
  142.         if up :
  143.             if self.onGround:
  144.                 self.yvel -= 6
  145.         if down:
  146.             pass
  147.         if left:
  148.             self.xvel = -5
  149.         if right:
  150.             self.xvel = 5
  151.         if not self.onGround:
  152.             self.yvel += 0.3
  153.             # maximum falling speed
  154.             if self.yvel > 30:
  155.                 self.yvel = 30
  156.         if not(left or right):
  157.             self.xvel = 0
  158.  
  159.         # Character 'animation'
  160.         if self.xvel >= 1:
  161.             tempImage = image.load('images/ninja_right.png').convert_alpha()
  162.             pygame.transform.scale(tempImage, (28,28))
  163.             self.image = tempImage
  164.         elif self.xvel <= -1:
  165.             tempImage = image.load('images/ninja_left.png').convert_alpha()
  166.             pygame.transform.scale(tempImage, (28,28))
  167.             self.image = tempImage
  168.         if self.yvel < 0:
  169.             tempImage = image.load('images/ninja_jumping.png').convert_alpha()
  170.             pygame.transform.scale(tempImage, (28,28))
  171.             self.image = tempImage
  172.         if self.yvel == 0 and self.xvel == 0:
  173.             tempImage = image.load('images/ninja.png').convert_alpha()
  174.             pygame.transform.scale(tempImage, (28,28))
  175.             self.image = tempImage
  176.  
  177.         # Move the player
  178.         self.rect.left += self.xvel
  179.         self.collide(self.xvel, 0, platforms)
  180.         self.rect.top += self.yvel
  181.         self.onGround = False # Assumes we're in the air
  182.         self.collide(0, self.yvel, platforms)
  183.  
  184.     def collide(self, xvel, yvel, platforms):
  185.  
  186.         for p in platforms:
  187.             if sprite.collide_rect(self, p):
  188.                 if isinstance(p, ExitBlock):
  189.                     pass
  190.                 if xvel > 0:
  191.                     self.rect.right = p.rect.left
  192.                 if xvel < 0:
  193.                     self.rect.left = p.rect.right
  194.                 if yvel > 0:
  195.                     self.rect.bottom = p.rect.top
  196.                     self.onGround = True # onGround whilst on platforms
  197.                     self.yvel = 0
  198.                 if yvel < 0:
  199.                     self.rect.top = p.rect.bottom
  200.  
  201. class FPSMessage():
  202.     def __init__(self, screen, message):
  203.         if pygame.font:
  204.             self.font = pygame.font.Font(None, 30)
  205.         else:
  206.             self.font = None
  207.  
  208.         if self.font:
  209.             size = self.font.size(message)
  210.             font_surface = self.font.render(message,False, WHITE, BLACK)
  211.             x = 10
  212.             y = 10
  213.             self.screen = screen
  214.             self.screen.blit(font_surface, (x,y))
  215.  
  216. class Platform(Entity):
  217.     def __init__(self, x, y):
  218.         Entity.__init__(self)
  219.         self.image = Surface((32,32))
  220.         tempImage = image.load('images/tile.png').convert_alpha()
  221.         pygame.transform.scale(tempImage, (32,32))
  222.         self.image = tempImage
  223.         self.rect = Rect(x, y, 32, 32)
  224.  
  225.     def update(self):
  226.         pass
  227.  
  228. class ExitBlock(Platform):
  229.     def __init__(self, x, y):
  230.         Platform.__init__(self, x, y)
  231.         tempImage = image.load('images/end.png').convert_alpha()
  232.         pygame.transform.scale(tempImage, (32,32))
  233.         self.image = tempImage
  234.  
  235. class JumpBlock(Platform):
  236.     def __init__(self, x, y):
  237.         Platform.__init__(self, x, y)
  238.         tempImage = image.load('jump.png').convert_alpha()
  239.         pygame.transform.scale(tempImage, (32,32))
  240.         self.image = tempImage
  241.  
  242. if (__name__ == "__main__"):
  243.     main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement