From 3ad671eeaa1633499d09cb456c1a08b7c794f43e Mon Sep 17 00:00:00 2001 From: Gabriel Eirea Date: Fri, 14 Jan 2011 20:02:55 +0000 Subject: Added initial MapEditor --- diff --git a/DerechosSprites.py b/DerechosSprites.py index 4c3e877..58ff133 100644 --- a/DerechosSprites.py +++ b/DerechosSprites.py @@ -180,7 +180,7 @@ class BoySprite(AnimatedSprite): def draw_grid(grid,screen): for yi in range(18): for xi in range(24): - if grid[yi][xi] == 1: + if grid[yi+1][xi+1] == 1: pygame.draw.rect(screen,(100,100,100),(xi*50,yi*50,50,50),2) @@ -269,8 +269,8 @@ if __name__ == "__main__": [1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1], [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]] - #font24 = pygame.font.Font(None, 24) - font24 = pygame.font.Font("/home/gabriel/PC Senior Regular.ttf", 12) + font24 = pygame.font.Font(None, 24) +# font24 = pygame.font.Font("/home/gabriel/PC Senior Regular.ttf", 12) txts = ["Hola, yo soy Pancho", "No creo que consigas\nnada siguiendome", diff --git a/MapEditor.py b/MapEditor.py new file mode 100644 index 0000000..27570fb --- /dev/null +++ b/MapEditor.py @@ -0,0 +1,139 @@ +import pygame +import os +import sys +import random +import math + + +def draw_grid(grid,screen): + for yi in range(18): + for xi in range(24): + if grid[yi+1][xi+1] == 1: + pygame.draw.rect(screen,(100,100,100),(xi*50,yi*50,50,50),2) + +def render_tiles(tiles, tile_size, screen, scale): + i = 0 + for tile in tiles: + screen.blit(pygame.transform.scale(tile, + (int(tile_size[0]*scale), + int(tile_size[1]*scale))), + (i*int(tile_size[0]*scale), 0)) + i += 1 + +def render_map(grid, tiles, tile_size, screen, scale): + for i in range(len(grid)): + for j in range(len(grid[i])): + screen.blit(pygame.transform.scale(tiles[grid[i][j]], + (int(tile_size[0]*scale), + int(tile_size[1]*scale))), + (j*int(tile_size[0]*scale), + (i+2)*int(tile_size[1]*scale))) + +def render_selected_tile(sel_tile, tile_size, screen, scale): + pygame.draw.rect(screen,(200,0,0), + (sel_tile*int(tile_size[0]*scale),0, + int(tile_size[0]*scale),int(tile_size[0]*scale)),1) + +def render_click(coord, sel_tile, grid, tile_size, screen, scale): + + screen.blit(pygame.transform.scale(tiles[grid[i][j]], + (int(tile_size[0]*scale), + int(tile_size[1]*scale))), + (j*int(tile_size[0]*scale), + (i+2)*int(tile_size[1]*scale))) + +def save_grid(grid): + print(grid) + +if __name__ == "__main__": + + # initializations + pygame.init() + screen = pygame.display.set_mode((1024,768)) + clock = pygame.time.Clock() + # tile parameters + tileset_file = os.path.join('images', 'derechos-tileset-fondos.png') + tile_default = 0 # tile # that will be used as default + tile_border = 30 # tile # for the border (outside the screen) + tile_size = (50, 50) # (x, y) in pixels + tileset_size = (8, 4) # (x, y) in tiles + screen_size = (1200, 900) # (x, y) in pixels + # scale + scale = 0.5 + # selected tile + sel_tile = 0 + # check for consistency + if screen_size[0] % tile_size[0] != 0 \ + or screen_size[0] % tile_size[0] != 0: + print("Dimensions of the screen are not multiples of the tile size.") + sys.exit() + map_size = (screen_size[0]/tile_size[0], screen_size[1]/tile_size[1]) + # load tileset + tiles = [] + tileset_image = pygame.image.load(tileset_file).convert_alpha() + w, h = tileset_image.get_size() + if tile_size[0]*tileset_size[0] != w \ + or tile_size[1]*tileset_size[1] != h: + print("Dimensions of the tileset_file don't agree with size.") + sys.exit() + for i in xrange(tileset_size[1]): + for j in xrange(tileset_size[0]): + tiles.append(tileset_image.subsurface((j*tile_size[0], + i*tile_size[1], + tile_size[0], + tile_size[1]))) + # create initial grid + grid = [ [tile_default]*(map_size[0]+2) for i in xrange(map_size[1]+2)] + grid[0] = [tile_border]*(map_size[0]+2) + grid[map_size[1]+1] = [tile_border]*(map_size[0]+2) + for i in xrange(map_size[1]): + grid[i+1][0] = tile_border + grid[i+1][map_size[0]+1] = tile_border + # render initial screen + render_tiles(tiles, tile_size, screen, scale) + render_map(grid, tiles, tile_size, screen, scale) + render_selected_tile(sel_tile, tile_size, screen, scale) + pygame.display.flip() + + font24 = pygame.font.Font(None, 24) + + playing = True + + while playing: + for event in pygame.event.get(): + if event.type == pygame.QUIT: + playing = False + elif event.type == pygame.MOUSEBUTTONDOWN: + coord = pygame.mouse.get_pos() + if coord[1] < tile_size[1]*scale \ + and coord[0] < len(tiles)*tile_size[0]*scale: + sel_tile = int(coord[0]/(tile_size[0]*scale)) + elif coord[0] < (map_size[0]+2)*tile_size[0]*scale \ + and coord[1] < ((map_size[1]+4)*tile_size[1])*scale \ + and coord[1] > 2*tile_size[1]*scale: + grid[int(coord[1]-2*tile_size[1]*scale)/int(tile_size[1]*scale)]\ + [coord[0]/int(tile_size[0]*scale)] = sel_tile + elif event.type == pygame.KEYDOWN: + if event.key == pygame.K_UP: + pass + elif event.key == pygame.K_DOWN: + pass + elif event.key == pygame.K_LEFT: + if sel_tile > 0: + sel_tile -= 1 + elif event.key == pygame.K_RIGHT: + if sel_tile < len(tiles)-1: + sel_tile += 1 + elif event.key == pygame.K_s: + save_grid(grid) + elif event.key == pygame.K_ESCAPE \ + or event.key == pygame.K_q: + playing = False + + time_passed = clock.tick(20) + + render_tiles(tiles, tile_size, screen, scale) + render_map(grid, tiles, tile_size, screen, scale) + render_selected_tile(sel_tile, tile_size, screen, scale) + pygame.display.flip() + -- cgit v0.9.1