mixster

Untitled

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