mixster

Untitled

Apr 16th, 2010
314
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.89 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.                         global jump
  68.                         jump = 0
  69.                         speed[1] = 0
  70.                     if dy < 0:
  71.                         self.rect.top = wam.bottom
  72.                         speed[1] = 0
  73.                     return
  74.  
  75.  
  76. class Wall(object):
  77.    
  78.     def __init__(self, pos):
  79.         self.rect = pygame.Rect(pos[0], pos[1], pos[2], pos[3])
  80.         self.tNum = pos[4]
  81.         self.tile = pos[5]
  82.  
  83.        
  84. class Level(object):
  85.    
  86.     def __init__(self, (size, resolution, mapArray, playerStart)):
  87.         self.size = size
  88.         self.res = resolution
  89.         self.map =  mapArray
  90.         self.start = playerStart
  91.  
  92.    
  93. #--- Variables
  94. clock = pygame.time.Clock()
  95. uCr = False
  96.  
  97. def translate(rect):
  98.     global camera
  99.     return pygame.Rect(rect.x - camera.x, rect.y - camera.y, rect.w, rect.h)
  100.  
  101. def getEvents():  
  102.     global camera
  103.     for event in pygame.event.get():    
  104.         if event.type == KEYDOWN:
  105.             if event.key == K_UP:
  106.                 if player.jumping == False:
  107.                     player.jumping = True
  108.                     player.currentJump += 1
  109.                     speed[1] = -player.topSpeed[1]
  110.                     player.increment = 1
  111.             if event.key == K_DOWN:
  112.                 player.rect = pygame.Rect(player.rect.x, player.rect.y + player.Wize[1] / 2, player.Wize[0], player.Wize[1] / 2)
  113.                 pygame.draw.rect(screen, (0, 0, 0), ballbuff)
  114.             if event.key == K_LEFT:
  115.                 speed[0] = -player.topSpeed[0]
  116.             if event.key == K_RIGHT:
  117.                 speed[0] = player.topSpeed[0]
  118.         if event.type == KEYUP:
  119.             if event.key == K_UP:
  120.                 player.increment = 2
  121.             if event.key == K_DOWN and speed[1] > 0:
  122.                 q = player.rect.x
  123.                 player.move(0, -res[1]/2)
  124.                 if player.rect.x == q:
  125.                     player.move(0, res[1]/2)
  126.                     player.rect = pygame.Rect(player.rect.x, player.rect.y - player.Wize[1] / 2, player.Wize[0], player.Wize[1])
  127.             if event.key == K_LEFT and speed[0] < 0:
  128.                 speed[0] = 0  
  129.             if event.key == K_RIGHT and speed[0] > 0:
  130.                 speed[0] = 0  
  131.         if event.type == pygame.QUIT:
  132.             gameRunning = False
  133.             sys.exit()
  134.                      
  135. def parseLevel(filename):
  136.     COMMA_ITER = 6
  137.     pos, walls, tot = [], [], []
  138.     fileObj = open(filename)
  139.     s = fileObj.read()
  140.     fileObj.close()
  141.     mRes = s.find(".", 0)
  142.     tot = [float(res[0]) / float(s[0: mRes]), float(res[1]) / float(s[0: mRes])]
  143.     mx = s.find(".", mRes + 1)
  144.     my = s.find("(", mx)
  145.     strPart = 0
  146.     for i in range(0, int(s[mRes + 1: mx])):
  147.         walls.append([])
  148.         for e in range(0, int(s[mx + 1: my])):
  149.             strPart = s.find("(", strPart) + 1
  150.             strPart2 = s.find(")", strPart)
  151.             for la in range(0, COMMA_ITER):
  152.                 final = s.find(",", strPart, strPart2)
  153.                 pos.append(int(s[strPart: final]))
  154.                 strPart = final + 1
  155.             if pos[4] == 2:
  156.                 pos[4] = 0
  157.                 star = (pos[0] * tot[0], pos[1] * tot[1])
  158.             walls[i].append(Wall((pos[0] * tot[0], pos[1] * tot[1], pos[2] * tot[0], pos[3] * tot[1], pos[4], pos[5])))
  159.             pos = []
  160.     return ((mx, my), tot, walls, star)
  161.  
  162. levels = Level(parseLevel("level.txt"))
  163. player = Player((res[0] - 1, res[1]), (4 * levels.res[0], 10 * levels.res[1]))
  164. player.rect.x, player.rect.y = levels.start[0], levels.start[1]
  165. camera = pygame.Rect(0, 0, screen.get_width(), screen.get_height())
  166. tileset = pygame.transform.scale(pygame.image.load("tileset.bmp"), (res[0], res[1] * 9)).convert()
  167.  
  168. gameRunning = True
  169. while gameRunning:
  170.     ballbuff = pygame.Rect(player.rect.x, player.rect.y, res[0], player.rect.bottom - player.rect.top)
  171.     getEvents()
  172.        
  173.     player.move(speed[0], speed[1])
  174.     camera.x = player.rect.x - (camera.width / 2)
  175.     if camera.x < 0:
  176.         camera.x = 0
  177.     if camera.x + camera.width > len(levels.map) * res[0]:
  178.         camera.x = (len(levels.map) * res[0]) - camera.width
  179.  
  180.     camera.y = player.rect.y - (camera.height / 2)
  181.     if camera.y < 0:
  182.         camera.y = 0
  183.     if camera.y + camera.height > len(levels.map[0]) * res[1]:
  184.         camera.y = (len(levels.map[0]) * res[1]) - camera.height        
  185.     if speed[1] < player.topSpeed[1]:
  186.         if speed[1] < 0:
  187.             speed[1] += player.increment * player.res[1]
  188.         else:
  189.             speed[1] += 1 * player.res[1]
  190.     if player.jumping:
  191.         if (speed[1] >= 0) and (player.currentJump <= player.totJumpNum - 1):
  192.             player.jumping = False
  193.            
  194.     screen.fill((0, 0, 0))
  195.     for i in range(0, len(levels.map)):
  196.         for e in range(0, len(levels.map[i])):
  197.             rect = translate(levels.map[i][e].rect)
  198.             til = pygame.surface.Surface((res[0],res[1]))
  199.             til.set_colorkey((73,154,191))
  200.             til.blit(tileset, (0, -levels.map[i][e].tile * res[1], res[0], res[1]))
  201.             screen.blit(til, rect)
  202.            
  203.     rect = translate(player.rect)
  204.     pygame.draw.rect(screen, (255, 200, 0), rect)
  205.    
  206.     clock.tick(30)
  207.     pygame.display.flip()
Advertisement
Add Comment
Please, Sign In to add comment