Advertisement
mixster

mixster

Sep 27th, 2010
409
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.33 KB | None | 0 0
  1. #!/usr/bin/python
  2. import sys, pygame, os
  3. from pygame.locals import *
  4. import math, random, time
  5.  
  6. class Tile(object):
  7.   def __init__(self, tilesheet, dfx, dfy, ix=0, iy=0):
  8.     self.tilesheet = tilesheet
  9.     self.source = (dfx, dfy)
  10.     self.index   = (ix, iy)
  11.  
  12.   def draw(self, dest, offset):
  13.     self.tilesheet.drawTile(dest, self, offset)
  14.  
  15. class Tilesheet(object):
  16.   def __init__(self, filename, tileWidth=32, tileHeight=32, transparentColor=None):
  17.     self.source = pygame.image.load(filename)
  18.     self.source.set_colorkey(transparentColor)
  19.     self.tileSize = (tileWidth, tileHeight)
  20.     self.tiles = (self.source.get_width() // tileWidth, self.source.get_height() // tileHeight)
  21.  
  22.   def isValid(self, x, y):
  23.     return (x >= 0) and (x < self.tiles[0]) and (y >= 0) and (y < self.tiles[1])
  24.  
  25.   def drawTile(self, dest, tile, offset):
  26.     dest.blit(self.source, offset, (tile.source, self.tileSize))
  27.  
  28.   def intToTile(self, n):
  29.     return Tile(self, (n % self.tiles[1]) * self.tileSize[0], (n // self.tiles[1]) * self.tileSize[1])
  30.  
  31.   def tileToInt(self, t):
  32.     return ((t.source[1] / self.tileSize[1]) * self.tiles[1]) + (t.source[0] / self.tileSize[0])
  33.  
  34. class TileMap(object):
  35.   def __init__(self, width, height, tileWidth, tileHeight):
  36.     self.source = [[[] for col in range(width)] for row in range(height)]
  37.     self.size = (width, height)
  38.     self.tileSize = (tileWidth, tileHeight)
  39.  
  40.   def randomMap(self, tilesheet, thickness):
  41.     for r in range(self.size[1]):
  42.       for c in range(self.size[0]):
  43.         self.source[r][c] = []
  44.  
  45.     for z in range(thickness):
  46.       for r in range(self.size[1]):
  47.         for c in range(self.size[0]):
  48.           self.source[r][c].append(Tile(tilesheet, random.randint(0, tilesheet.tiles[0]) * 32, random.randint(0, tilesheet.tiles[1]) * 32, c, r))
  49.  
  50.   def draw(self, dest, area):
  51.     for r in range(area[1][1]):
  52.       for c in range(area[1][0]):
  53.         for t in self.source[area[0][1] + r][area[0][0] + c]:
  54.           t.draw(dest, (c * self.tileSize[0], r * self.tileSize[1]))
  55.  
  56. class Camera(object):
  57.   def __init__(self, tilemap, width, height, px=0, py=0):
  58.     self.source = tilemap
  59.     self.size = (width, height)
  60.     self.dimensions = (width // self.source.tileSize[0], height // self.source.tileSize[1])
  61.     self.pos = [px, py]
  62.  
  63.   def move(self, dx, dy):
  64.     self.pos[0] += dx
  65.     self.pos[1] += dy
  66.  
  67.   def draw(self, dest):
  68.     self.source.draw(dest, (self.pos, self.dimensions))
  69.  
  70. running = True
  71.  
  72. def getEvents(cam):
  73.   for event in pygame.event.get():
  74.     if event.type == KEYDOWN:
  75.             if event.key == pygame.K_UP:
  76.               cam.move(0, -1)  
  77.             if event.key == pygame.K_DOWN:
  78.               cam.move(0, 1)
  79.             if event.key == pygame.K_LEFT:
  80.               cam.move(-1, 0)
  81.             if event.key == pygame.K_RIGHT:
  82.               cam.move(1, 0)
  83.     if event.type == pygame.QUIT:
  84.       global running
  85.       running = False
  86.  
  87. pygame.init()
  88. clock = pygame.time.Clock()
  89. random.seed()
  90.  
  91. screen = pygame.display.set_mode((800, 608))
  92. screen.fill((255, 255, 255))
  93. pygame.display.set_caption('RPyG')
  94. pygame.mouse.set_visible(1)
  95.  
  96. ts = Tilesheet('tiles.bmp', 32, 32, (255, 255, 255))
  97. tm = TileMap(100, 100, 32, 32)
  98. tm.randomMap(ts, 3)
  99.  
  100. c = Camera(tm, 800, 608)
  101.  
  102. while running:
  103.   getEvents(c)
  104.   screen.fill((255, 255, 255))
  105.   c.draw(screen)
  106.   pygame.display.flip()
  107.   clock.tick(30)
  108.  
  109. print 'Terminating'
  110. sys.exit()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement