mixster

Untitled

Apr 16th, 2010
210
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.86 KB | None | 0 0
  1. #!/user/bin/env python
  2.  
  3.  
  4. import sys
  5. import os
  6. import pygame
  7. from pygame.locals import *
  8.  
  9.  
  10. #--- Our Variables
  11. res = (32, 32)
  12. #size = (20 * res[0], 17 * res[1])
  13. speed = [0, 0]
  14.  
  15. #--- Init pygame
  16. os.environ["SDL_VIDEO_CENTERED"] = "1"
  17. pygame.init
  18.  
  19. #--- Display
  20. pygame.display.set_caption("Rectangle Man: Story of a Square")
  21. screen = pygame.display.set_mode((20 * res[0], 17 * res[1]))
  22.  
  23.  
  24. class Character(object):
  25.     def __init__(self, Size):
  26.         self.rect = pygame.Rect(0, 0, Size[0], Size[1])
  27.         self.Wize = Size
  28.  
  29.  
  30. class Player(Character):
  31.    
  32.     def __init__(self, Size, Speed):
  33.         Character.__init__(self, Size)
  34.         self.topSpeed = Speed
  35.         self.uc = 16
  36.         self.currentJump = 0
  37.         self.totJumpNum = 2
  38.         self.jIncrement = 1
  39.         self.jumping = False
  40.  
  41.     #def tick():
  42.        
  43.  
  44.     def move(self, dx, dy):
  45.         if dx != 0:
  46.             self.move_single_axis(dx, 0)
  47.         if dy != 0:
  48.             self.move_single_axis(0, dy)
  49.    
  50.     def move_single_axis(self, dx, dy):
  51.         self.rect.x += dx
  52.         self.rect.y += dy
  53.        
  54.         tx, ty = int(player.rect.x / res[0]), int(player.rect.y / res[1])
  55.         rects = [[tx, ty], [tx + 1, ty], [tx, ty + 1], [tx + 1, ty + 1]]
  56.  
  57.         for h in rects:
  58.             if levels.map[int(h[0])][int(h[1])].tNum == 1:
  59.                 wam = levels.map[int(h[0])][int(h[1])].rect
  60.                 if self.rect.colliderect(wam):
  61.                     if dx > 0:
  62.                         self.rect.right = wam.left
  63.                     if dx < 0:
  64.                         self.rect.left = wam.right
  65.                     if dy > 0:
  66.                         self.rect.bottom = wam.top
  67.                         self.jump = 0
  68.                         speed[1] = 0
  69.                     if dy < 0:
  70.                         self.rect.top = wam.bottom
  71.                         speed[1] = 0
  72.                     return
  73.  
  74.  
  75. class Wall(object):
  76.    
  77.     def __init__(self, pos):
  78.         self.rect = pygame.Rect(pos[0], pos[1], pos[2], pos[3])
  79.         self.tNum = pos[4]
  80.         self.tile = pos[5]
  81.  
  82.        
  83. class Level(object):
  84.    
  85.     def __init__(self, (size, resolution, mapArray, playerStart)):
  86.         self.size = size
  87.         self.res = resolution
  88.         self.map =  mapArray
  89.         self.start = playerStart
  90.  
  91.    
  92. #--- Variables
  93. clock = pygame.time.Clock()
  94. uCr = False
  95.  
  96. def translate(rect):
  97.     global camera
  98.     return pygame.Rect(rect.x - camera.x, rect.y - camera.y, rect.w, rect.h)
  99.  
  100. def getEvents():  
  101.     global camera
  102.     for event in pygame.event.get():    
  103.         if event.type == KEYDOWN:
  104.             if event.key == K_UP:
  105.                 if player.jumping == False:
  106.                     player.jumping = True
  107.                     player.currentJump += 1
  108.                     speed[1] = -player.topSpeed[1]
  109.                     player.increment = 1
  110.             if event.key == K_DOWN:
  111.                 player.rect = pygame.Rect(player.rect.x, player.rect.y + player.Wize[1] / 2, player.Wize[0], player.Wize[1] / 2)
  112.                 pygame.draw.rect(screen, (0, 0, 0), ballbuff)
  113.             if event.key == K_LEFT:
  114.                 speed[0] = -player.topSpeed[0]
  115.             if event.key == K_RIGHT:
  116.                 speed[0] = player.topSpeed[0]
  117.         if event.type == KEYUP:
  118.             if event.key == K_UP:
  119.                 player.increment = 2
  120.             if event.key == K_DOWN and speed[1] > 0:
  121.                 q = player.rect.x
  122.                 player.move(0, -res[1]/2)
  123.                 if player.rect.x == q:
  124.                     player.move(0, res[1]/2)
  125.                     player.rect = pygame.Rect(player.rect.x, player.rect.y - player.Wize[1] / 2, player.Wize[0], player.Wize[1])
  126.             if event.key == K_LEFT and speed[0] < 0:
  127.                 speed[0] = 0  
  128.             if event.key == K_RIGHT and speed[0] > 0:
  129.                 speed[0] = 0  
  130.         if event.type == pygame.QUIT:
  131.             gameRunning = False
  132.             sys.exit()
  133.                      
  134. def parseLevel(filename):
  135.     COMMA_ITER = 6
  136.     pos, walls, tot = [], [], []
  137.     fileObj = open(filename)
  138.     s = fileObj.read()
  139.     fileObj.close()
  140.     mRes = s.find(".", 0)
  141.     tot = [float(res[0]) / float(s[0: mRes]), float(res[1]) / float(s[0: mRes])]
  142.     mx = s.find(".", mRes + 1)
  143.     my = s.find("(", mx)
  144.     strPart = 0
  145.     for i in range(0, int(s[mRes + 1: mx])):
  146.         walls.append([])
  147.         for e in range(0, int(s[mx + 1: my])):
  148.             strPart = s.find("(", strPart) + 1
  149.             strPart2 = s.find(")", strPart)
  150.             for la in range(0, COMMA_ITER):
  151.                 final = s.find(",", strPart, strPart2)
  152.                 pos.append(int(s[strPart: final]))
  153.                 strPart = final + 1
  154.             if pos[4] == 2:
  155.                 pos[4] = 0
  156.                 star = (pos[0] * tot[0], pos[1] * tot[1])
  157.             walls[i].append(Wall((pos[0] * tot[0], pos[1] * tot[1], pos[2] * tot[0], pos[3] * tot[1], pos[4], pos[5])))
  158.             pos = []
  159.     return ((mx, my), tot, walls, star)
  160.  
  161. levels = Level(parseLevel("level.txt"))
  162. player = Player((res[0] - 1, res[1]), (4 * levels.res[0], 10 * levels.res[1]))
  163. player.rect.x, player.rect.y = levels.start[0], levels.start[1]
  164. camera = pygame.Rect(0, 0, screen.get_width(), screen.get_height())
  165. tileset = pygame.transform.scale(pygame.image.load("tileset.bmp"), (res[0], res[1] * 9)).convert()
  166.  
  167. gameRunning = True
  168. while gameRunning:
  169.     ballbuff = pygame.Rect(player.rect.x, player.rect.y, res[0], player.rect.bottom - player.rect.top)
  170.     getEvents()
  171.        
  172.     player.move(speed[0], speed[1])
  173.     camera.x = player.rect.x - (camera.width / 2)
  174.     if camera.x < 0:
  175.         camera.x = 0
  176.     if camera.x + camera.width > len(levels.map) * res[0]:
  177.         camera.x = (len(levels.map) * res[0]) - camera.width
  178.  
  179.     camera.y = player.rect.y - (camera.height / 2)
  180.     if camera.y < 0:
  181.         camera.y = 0
  182.     if camera.y + camera.height > len(levels.map[0]) * res[1]:
  183.         camera.y = (len(levels.map[0]) * res[1]) - camera.height        
  184.     if speed[1] < player.topSpeed[1]:
  185.         if speed[1] < 0:
  186.             speed[1] += player.increment * levels.res[1]
  187.         else:
  188.             speed[1] += 1 * levels.res[1]
  189.     if player.jumping:
  190.         if (speed[1] >= 0) and (player.currentJump <= player.totJumpNum - 1):
  191.             player.jumping = False
  192.            
  193.     screen.fill((0, 0, 0))
  194.     for i in range(0, len(levels.map)):
  195.         for e in range(0, len(levels.map[i])):
  196.             rect = translate(levels.map[i][e].rect)
  197.             til = pygame.surface.Surface((res[0],res[1]))
  198.             til.set_colorkey((73,154,191))
  199.             til.blit(tileset, (0, -levels.map[i][e].tile * res[1], res[0], res[1]))
  200.             screen.blit(til, rect)
  201.            
  202.     rect = translate(player.rect)
  203.     pygame.draw.rect(screen, (255, 200, 0), rect)
  204.    
  205.     clock.tick(30)
  206.     pygame.display.flip()
Add Comment
Please, Sign In to add comment